github.com/nextlinux/gosbom@v0.81.1-0.20230627115839-1ff50c281391/cmd/gosbom/cli/options/packages.go (about) 1 package options 2 3 import ( 4 "fmt" 5 6 "github.com/nextlinux/gosbom/gosbom/formats" 7 "github.com/nextlinux/gosbom/gosbom/formats/table" 8 "github.com/nextlinux/gosbom/gosbom/pkg/cataloger" 9 "github.com/nextlinux/gosbom/gosbom/source" 10 "github.com/spf13/cobra" 11 "github.com/spf13/pflag" 12 "github.com/spf13/viper" 13 ) 14 15 type PackagesOptions struct { 16 Scope string 17 Output []string 18 OutputTemplatePath string 19 File string 20 Platform string 21 Exclude []string 22 Catalogers []string 23 SourceName string 24 SourceVersion string 25 } 26 27 var _ Interface = (*PackagesOptions)(nil) 28 29 func (o *PackagesOptions) AddFlags(cmd *cobra.Command, v *viper.Viper) error { 30 cmd.Flags().StringVarP(&o.Scope, "scope", "s", cataloger.DefaultSearchConfig().Scope.String(), 31 fmt.Sprintf("selection of layers to catalog, options=%v", source.AllScopes)) 32 33 cmd.Flags().StringArrayVarP(&o.Output, "output", "o", []string{string(table.ID)}, 34 fmt.Sprintf("report output format, options=%v", formats.AllIDs())) 35 36 cmd.Flags().StringVarP(&o.File, "file", "", "", 37 "file to write the default report output to (default is STDOUT)") 38 39 cmd.Flags().StringVarP(&o.OutputTemplatePath, "template", "t", "", 40 "specify the path to a Go template file") 41 42 cmd.Flags().StringVarP(&o.Platform, "platform", "", "", 43 "an optional platform specifier for container image sources (e.g. 'linux/arm64', 'linux/arm64/v8', 'arm64', 'linux')") 44 45 cmd.Flags().StringArrayVarP(&o.Exclude, "exclude", "", nil, 46 "exclude paths from being scanned using a glob expression") 47 48 cmd.Flags().StringArrayVarP(&o.Catalogers, "catalogers", "", nil, 49 "enable one or more package catalogers") 50 51 cmd.Flags().StringVarP(&o.SourceName, "name", "", "", 52 "set the name of the target being analyzed") 53 cmd.Flags().Lookup("name").Deprecated = "use: source-name" 54 55 cmd.Flags().StringVarP(&o.SourceName, "source-name", "", "", 56 "set the name of the target being analyzed") 57 58 cmd.Flags().StringVarP(&o.SourceVersion, "source-version", "", "", 59 "set the name of the target being analyzed") 60 61 return bindPackageConfigOptions(cmd.Flags(), v) 62 } 63 64 //nolint:revive 65 func bindPackageConfigOptions(flags *pflag.FlagSet, v *viper.Viper) error { 66 // Formatting & Input options ////////////////////////////////////////////// 67 68 if err := v.BindPFlag("package.cataloger.scope", flags.Lookup("scope")); err != nil { 69 return err 70 } 71 72 if err := v.BindPFlag("file", flags.Lookup("file")); err != nil { 73 return err 74 } 75 76 if err := v.BindPFlag("exclude", flags.Lookup("exclude")); err != nil { 77 return err 78 } 79 80 if err := v.BindPFlag("catalogers", flags.Lookup("catalogers")); err != nil { 81 return err 82 } 83 84 if err := v.BindPFlag("name", flags.Lookup("name")); err != nil { 85 return err 86 } 87 88 if err := v.BindPFlag("source-name", flags.Lookup("source-name")); err != nil { 89 return err 90 } 91 92 if err := v.BindPFlag("source-version", flags.Lookup("source-version")); err != nil { 93 return err 94 } 95 96 if err := v.BindPFlag("output", flags.Lookup("output")); err != nil { 97 return err 98 } 99 100 if err := v.BindPFlag("output-template-path", flags.Lookup("template")); err != nil { 101 return err 102 } 103 104 if err := v.BindPFlag("platform", flags.Lookup("platform")); err != nil { 105 return err 106 } 107 108 return nil 109 }