diff --git a/pkg/installer/repository.go b/pkg/installer/repository.go index 7a458b25..0ff374c4 100644 --- a/pkg/installer/repository.go +++ b/pkg/installer/repository.go @@ -24,6 +24,7 @@ import ( "regexp" "sort" "strconv" + "strings" "time" artifact "github.com/mudler/luet/pkg/compiler/types/artifact" @@ -297,6 +298,37 @@ func GenerateRepository(name, descr, t string, urls []string, } } + // Load packages from metadata files if not present already. + var ff = func(currentpath string, info os.FileInfo, err error) error { + if err != nil { + return nil + } + + // Only those which are metadata + if !strings.HasSuffix(info.Name(), pkg.PackageMetaSuffix) { + return nil + } + + dat, err := ioutil.ReadFile(currentpath) + if err != nil { + return nil + } + + art, err := artifact.NewPackageArtifactFromYaml(dat) + if err != nil { + return nil + } + if _, err := runtimeTree.FindPackage(art.CompileSpec.Package); err != nil && art.CompileSpec.Package.Name != "" { + Debug("Added", art.CompileSpec.Package.HumanReadableString(), "from metadata files") + runtimeTree.CreatePackage(art.CompileSpec.Package) + } + + return nil + } + + // Best effort + filepath.Walk(src, ff) + repo := &LuetSystemRepository{ LuetRepository: config.NewLuetRepository(name, t, descr, urls, priority, true, false), Tree: tree.NewInstallerRecipe(runtimeTree), diff --git a/pkg/package/package.go b/pkg/package/package.go index 400dc922..d2481746 100644 --- a/pkg/package/package.go +++ b/pkg/package/package.go @@ -124,6 +124,8 @@ type Package interface { JSON() ([]byte, error) } +const PackageMetaSuffix = "metadata.yaml" + type Tree interface { GetPackageSet() PackageDatabase Prelude() string // A tree might have a prelude to be able to consume a tree @@ -246,7 +248,7 @@ func (t *DefaultPackage) JSON() ([]byte, error) { // GetMetadataFilePath returns the canonical name of an artifact metadata file func (d *DefaultPackage) GetMetadataFilePath() string { - return d.GetFingerPrint() + ".metadata.yaml" + return fmt.Sprintf("%s.%s", d.GetFingerPrint(), PackageMetaSuffix) } // DefaultPackage represent a standard package definition