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  }