github.com/noqcks/syft@v0.0.0-20230920222752-a9e2c4e288e5/syft/internal/packagemetadata/generate/main.go (about) 1 package main 2 3 import ( 4 "fmt" 5 "os" 6 7 "github.com/dave/jennifer/jen" 8 9 "github.com/anchore/syft/syft/internal/packagemetadata" 10 ) 11 12 // This program is invoked from syft/internal and generates packagemetadata/generated.go 13 14 const ( 15 pkgImport = "github.com/anchore/syft/syft/pkg" 16 path = "packagemetadata/generated.go" 17 ) 18 19 func main() { 20 typeNames, err := packagemetadata.DiscoverTypeNames() 21 if err != nil { 22 panic(fmt.Errorf("unable to get all metadata type names: %w", err)) 23 } 24 25 fmt.Printf("updating package metadata type list with %+v types\n", len(typeNames)) 26 27 f := jen.NewFile("packagemetadata") 28 f.HeaderComment("DO NOT EDIT: generated by syft/internal/packagemetadata/generate/main.go") 29 f.ImportName(pkgImport, "pkg") 30 f.Comment("AllTypes returns a list of all pkg metadata types that syft supports (that are represented in the pkg.Package.Metadata field).") 31 32 f.Func().Id("AllTypes").Params().Index().Any().BlockFunc(func(g *jen.Group) { 33 g.ReturnFunc(func(g *jen.Group) { 34 g.Index().Any().ValuesFunc(func(g *jen.Group) { 35 for _, typeName := range typeNames { 36 g.Qual(pkgImport, typeName).Values() 37 } 38 }) 39 }) 40 }) 41 42 rendered := fmt.Sprintf("%#v", f) 43 44 fh, err := os.OpenFile(path, os.O_RDWR|os.O_CREATE|os.O_TRUNC, 0644) 45 if err != nil { 46 panic(fmt.Errorf("unable to open file: %w", err)) 47 } 48 _, err = fh.WriteString(rendered) 49 if err != nil { 50 panic(fmt.Errorf("unable to write file: %w", err)) 51 } 52 if err := fh.Close(); err != nil { 53 panic(fmt.Errorf("unable to close file: %w", err)) 54 } 55 }