@@ -21,15 +21,22 @@ import (
2121)
2222
2323type Syft struct {
24- SbomFormat string
24+ sbomFormat string
25+ resolveVersion func () string
2526}
2627
2728func New (sbomFormat string ) Syft {
2829 return Syft {
29- SbomFormat : sbomFormat ,
30+ sbomFormat : sbomFormat ,
31+ resolveVersion : getSyftVersion ,
3032 }
3133}
3234
35+ func (s Syft ) WithVersion (version string ) Syft {
36+ s .resolveVersion = func () string { return version }
37+ return s
38+ }
39+
3340func (s * Syft ) ExecuteSyft (img kubernetes.ContainerImage ) (string , error ) {
3441 logrus .Infof ("Processing image %s" , img .ImageID )
3542
@@ -57,24 +64,12 @@ func (s *Syft) ExecuteSyft(img kubernetes.ContainerImage) (string, error) {
5764 defer cleanup ()
5865 }
5966
60- bi , ok := debug .ReadBuildInfo ()
61- if ! ok {
62- logrus .Warnf ("failed to read build info" )
63- }
64-
65- descriptor := sbom.Descriptor {
66- Name : "syft" ,
67- }
68-
69- for _ , dep := range bi .Deps {
70- if strings .EqualFold ("github.com/anchore/syft" , dep .Path ) {
71- descriptor .Version = dep .Version
72- }
73- }
74-
7567 result := sbom.SBOM {
76- Source : src .Metadata ,
77- Descriptor : descriptor ,
68+ Source : src .Metadata ,
69+ Descriptor : sbom.Descriptor {
70+ Name : "syft" ,
71+ Version : s .resolveVersion (),
72+ },
7873 // TODO: we should have helper functions for getting this built from exported library functions
7974 }
8075
@@ -91,7 +86,7 @@ func (s *Syft) ExecuteSyft(img kubernetes.ContainerImage) (string, error) {
9186 result .Relationships = relationships
9287
9388 // you can use other formats such as format.CycloneDxJSONOption or format.SPDXJSONOption ...
94- b , err := syft .Encode (result , format .Option (s .SbomFormat ))
89+ b , err := syft .Encode (result , format .Option (s .sbomFormat ))
9590 if err != nil {
9691 logrus .WithError (err ).Error ("Encoding of result failed" )
9792 return "" , err
@@ -121,3 +116,18 @@ func GetFileName(sbomFormat string) string {
121116 return "sbom.json"
122117 }
123118}
119+
120+ func getSyftVersion () string {
121+ bi , ok := debug .ReadBuildInfo ()
122+ if ! ok {
123+ logrus .Warnf ("failed to read build info" )
124+ }
125+
126+ for _ , dep := range bi .Deps {
127+ if strings .EqualFold ("github.com/anchore/syft" , dep .Path ) {
128+ return dep .Version
129+ }
130+ }
131+
132+ return ""
133+ }
0 commit comments