github.com/anchore/syft@v1.38.2/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/snapsource" 11 "github.com/anchore/syft/syft/source/stereoscopesource" 12 ) 13 14 const ( 15 FileTag = stereoscope.FileTag 16 DirTag = stereoscope.DirTag 17 PullTag = stereoscope.PullTag 18 SnapTag = "snap" 19 ) 20 21 // All returns all the configured source providers known to syft 22 func All(userInput string, cfg *Config) []collections.TaggedValue[source.Provider] { 23 if cfg == nil { 24 cfg = DefaultConfig() 25 } 26 stereoscopeProviders := stereoscopeSourceProviders(userInput, cfg) 27 28 return collections.TaggedValueSet[source.Provider]{}. 29 // 1. try all specific, local sources first... 30 31 // --from file, dir, oci-archive, etc. 32 Join(stereoscopeProviders.Select(FileTag, DirTag)...). 33 34 // --from snap (local only) 35 Join(tagProvider(snapsource.NewLocalSourceProvider(userInput, cfg.Exclude, cfg.DigestAlgorithms, cfg.Alias), SnapTag)). 36 37 // 2. try unspecific, local sources after other local sources last... 38 Join(tagProvider(filesource.NewSourceProvider(userInput, cfg.Exclude, cfg.DigestAlgorithms, cfg.Alias), FileTag)). 39 Join(tagProvider(directorysource.NewSourceProvider(userInput, cfg.Exclude, cfg.Alias, cfg.BasePath), DirTag)). 40 41 // 3. try remote sources after everything else... 42 43 // --from docker, registry, etc. 44 Join(stereoscopeProviders.Select(PullTag)...). 45 46 // --from snap (remote only) 47 Join(tagProvider(snapsource.NewRemoteSourceProvider(userInput, cfg.Exclude, cfg.DigestAlgorithms, cfg.Alias), SnapTag)) 48 } 49 50 func stereoscopeSourceProviders(userInput string, cfg *Config) collections.TaggedValueSet[source.Provider] { 51 var registry image.RegistryOptions 52 if cfg.RegistryOptions != nil { 53 registry = *cfg.RegistryOptions 54 } 55 stereoscopeProviders := stereoscopesource.Providers(stereoscopesource.ProviderConfig{ 56 StereoscopeImageProviderConfig: stereoscope.ImageProviderConfig{ 57 UserInput: userInput, 58 Platform: cfg.Platform, 59 Registry: registry, 60 }, 61 Alias: cfg.Alias, 62 Exclude: cfg.Exclude, 63 }) 64 return stereoscopeProviders 65 } 66 67 func tagProvider(provider source.Provider, tags ...string) collections.TaggedValue[source.Provider] { 68 return collections.NewTaggedValue(provider, append([]string{provider.Name()}, tags...)...) 69 }