@@ -19,7 +19,6 @@ import (
1919 "github.com/anchore/stereoscope"
2020 "github.com/anchore/stereoscope/pkg/image"
2121 "github.com/anchore/syft/syft"
22- "github.com/anchore/syft/syft/artifact"
2322 "github.com/anchore/syft/syft/event"
2423 "github.com/anchore/syft/syft/pkg/cataloger"
2524 "github.com/anchore/syft/syft/sbom"
@@ -33,6 +32,7 @@ Examples:
3332 docker sbom alpine:latest -o syft-json show all possible cataloging details
3433 docker sbom alpine:latest -o syft-json --file sbom.json write report output to a file
3534 docker sbom alpine:latest -o table -o sbom.json=cyclonedx-json report the SBOM in multiple formats
35+ docker sbom alpine:latest --exclude /lib --exclude '**/*.db' ignore one or more paths in the image
3636 docker sbom alpine:latest -v show logging output
3737 docker sbom alpine:latest -vv show verbose debug logs`
3838
@@ -78,7 +78,7 @@ func setPackageFlags(flags *pflag.FlagSet) {
7878 // Formatting & Input options //////////////////////////////////////////////
7979 flags .StringP (
8080 "scope" , "s" , cataloger .DefaultSearchConfig ().Scope .String (),
81- fmt .Sprintf ("selection of layers to catalog, options=%v" , source .AllScopes ))
81+ fmt .Sprintf ("[experimental] selection of layers to catalog, options=%v" , source .AllScopes ))
8282
8383 flags .StringArrayP (
8484 "output" , "o" , formatAliases (syft .TableFormatID ),
@@ -184,35 +184,26 @@ func isVerbose() (result bool) {
184184 return appConfig .CliOptions .Verbosity > 0 || isPipedInput
185185}
186186
187- func generateSBOM (src * source.Source , errs chan error ) (* sbom.SBOM , error ) {
188- tasks , err := catalogingTasks ()
189- if err != nil {
190- return nil , err
191- }
192-
187+ func generateSBOM (src * source.Source ) (* sbom.SBOM , error ) {
193188 s := sbom.SBOM {
194189 Source : src .Metadata ,
195190 Descriptor : sbom.Descriptor {
196191 Name : internal .SyftName ,
197- Version : version .FromBuild ().Version ,
192+ Version : version .FromBuild ().SyftVersion ,
198193 Configuration : appConfig ,
199194 },
200195 }
201196
202- buildRelationships (& s , src , tasks , errs )
203-
204- return & s , nil
205- }
206-
207- func buildRelationships (s * sbom.SBOM , src * source.Source , tasks []task , errs chan error ) {
208- var relationships []<- chan artifact.Relationship
209- for _ , task := range tasks {
210- c := make (chan artifact.Relationship )
211- relationships = append (relationships , c )
212- go runTask (task , & s .Artifacts , src , c , errs )
197+ packageCatalog , relationships , theDistro , err := syft .CatalogPackages (src , appConfig .Package .ToConfig ())
198+ if err != nil {
199+ return nil , fmt .Errorf ("unable to catalog packages: %w" , err )
213200 }
214201
215- s .Relationships = append (s .Relationships , mergeRelationships (relationships ... )... )
202+ s .Artifacts .PackageCatalog = packageCatalog
203+ s .Artifacts .LinuxDistribution = theDistro
204+ s .Relationships = relationships
205+
206+ return & s , nil
216207}
217208
218209func sbomExecWorker (si source.Input , writer sbom.Writer ) <- chan error {
@@ -229,7 +220,7 @@ func sbomExecWorker(si source.Input, writer sbom.Writer) <-chan error {
229220 return
230221 }
231222
232- s , err := generateSBOM (src , errs )
223+ s , err := generateSBOM (src )
233224 if err != nil {
234225 errs <- err
235226 return
@@ -247,13 +238,3 @@ func sbomExecWorker(si source.Input, writer sbom.Writer) <-chan error {
247238 }()
248239 return errs
249240}
250-
251- func mergeRelationships (cs ... <- chan artifact.Relationship ) (relationships []artifact.Relationship ) {
252- for _ , c := range cs {
253- for n := range c {
254- relationships = append (relationships , n )
255- }
256- }
257-
258- return relationships
259- }
0 commit comments