github.com/anchore/syft@v1.4.2-0.20240516191711-1bec1fc5d397/syft/source/sourceproviders/source_providers.go (about)

     1  package sourceproviders
     2  
     3  import (
     4  	"github.com/anchore/go-collections"
     5  	"github.com/anchore/stereoscope"
     6  	"github.com/anchore/stereoscope/pkg/image"
     7  	"github.com/anchore/syft/syft/source"
     8  	"github.com/anchore/syft/syft/source/directorysource"
     9  	"github.com/anchore/syft/syft/source/filesource"
    10  	"github.com/anchore/syft/syft/source/stereoscopesource"
    11  )
    12  
    13  const (
    14  	FileTag = stereoscope.FileTag
    15  	DirTag  = stereoscope.DirTag
    16  	PullTag = stereoscope.PullTag
    17  )
    18  
    19  // All returns all the configured source providers known to syft
    20  func All(userInput string, cfg *Config) []collections.TaggedValue[source.Provider] {
    21  	if cfg == nil {
    22  		cfg = DefaultConfig()
    23  	}
    24  	stereoscopeProviders := stereoscopeSourceProviders(userInput, cfg)
    25  
    26  	return collections.TaggedValueSet[source.Provider]{}.
    27  		// --from file, dir, oci-archive, etc.
    28  		Join(stereoscopeProviders.Select(FileTag, DirTag)...).
    29  		Join(tagProvider(filesource.NewSourceProvider(userInput, cfg.Exclude, cfg.DigestAlgorithms, cfg.Alias), FileTag)).
    30  		Join(tagProvider(directorysource.NewSourceProvider(userInput, cfg.Exclude, cfg.Alias, cfg.BasePath), DirTag)).
    31  
    32  		// --from docker, registry, etc.
    33  		Join(stereoscopeProviders.Select(PullTag)...)
    34  }
    35  
    36  func stereoscopeSourceProviders(userInput string, cfg *Config) collections.TaggedValueSet[source.Provider] {
    37  	var registry image.RegistryOptions
    38  	if cfg.RegistryOptions != nil {
    39  		registry = *cfg.RegistryOptions
    40  	}
    41  	stereoscopeProviders := stereoscopesource.Providers(stereoscopesource.ProviderConfig{
    42  		StereoscopeImageProviderConfig: stereoscope.ImageProviderConfig{
    43  			UserInput: userInput,
    44  			Platform:  cfg.Platform,
    45  			Registry:  registry,
    46  		},
    47  		Alias:   cfg.Alias,
    48  		Exclude: cfg.Exclude,
    49  	})
    50  	return stereoscopeProviders
    51  }
    52  
    53  func tagProvider(provider source.Provider, tags ...string) collections.TaggedValue[source.Provider] {
    54  	return collections.NewTaggedValue(provider, append([]string{provider.Name()}, tags...)...)
    55  }