@@ -5,12 +5,13 @@ import (
55 "os"
66 "time"
77
8+ "github.com/CycloneDX/cyclonedx-go"
89 "github.com/jfrog/gofrog/datastructures"
910 clientutils "github.com/jfrog/jfrog-client-go/utils"
1011 "github.com/jfrog/jfrog-client-go/utils/errorutils"
1112 "github.com/jfrog/jfrog-client-go/utils/io/fileutils"
1213 "github.com/jfrog/jfrog-client-go/utils/log"
13- xrayCmdUtils "github.com/jfrog/jfrog-client-go/xray/services/utils"
14+ xrayUtils "github.com/jfrog/jfrog-client-go/xray/services/utils"
1415
1516 "github.com/jfrog/jfrog-cli-core/v2/utils/config"
1617
@@ -35,8 +36,8 @@ import (
3536)
3637
3738type DependencyTreeResult struct {
38- FlatTree * xrayCmdUtils .GraphNode
39- FullDepTrees []* xrayCmdUtils .GraphNode
39+ FlatTree * xrayUtils .GraphNode
40+ FullDepTrees []* xrayUtils .GraphNode
4041 DownloadUrls map [string ]string
4142}
4243
@@ -56,7 +57,9 @@ func BuildDependencyTree(scan *results.TargetResults, params technologies.BuildI
5657 if treeResult .FlatTree == nil || len (treeResult .FlatTree .Nodes ) == 0 {
5758 return nil , errorutils .CheckErrorf ("no dependencies were found. Please try to build your project and re-run the audit command" )
5859 }
59- scan .SetSbom (results .DepTreeToSbom (treeResult .FullDepTrees ))
60+ sbom := cyclonedx .NewBOM ()
61+ sbom .Components , sbom .Dependencies = results .DepsTreeToSbom (treeResult .FullDepTrees ... )
62+ scan .SetSbom (sbom )
6063 return & treeResult , nil
6164}
6265
@@ -181,44 +184,47 @@ func SetResolutionRepoInParamsIfExists(params *technologies.BuildInfoBomGenerato
181184 return
182185}
183186
184- func createFlatTreeWithTypes (uniqueDeps map [string ]* xray.DepTreeNode ) * xrayCmdUtils .GraphNode {
185- var uniqueNodes []* xrayCmdUtils .GraphNode
187+ func createFlatTreeWithTypes (uniqueDeps map [string ]* xray.DepTreeNode ) * xrayUtils .GraphNode {
188+ var uniqueNodes []* xrayUtils .GraphNode
186189 for uniqueDep , nodeAttr := range uniqueDeps {
187- node := & xrayCmdUtils .GraphNode {Id : uniqueDep }
190+ node := & xrayUtils .GraphNode {Id : uniqueDep }
188191 if nodeAttr != nil {
189192 node .Types = nodeAttr .Types
190193 node .Classifier = nodeAttr .Classifier
191194 }
192195 uniqueNodes = append (uniqueNodes , node )
193196 }
194- return & xrayCmdUtils .GraphNode {Id : "root" , Nodes : uniqueNodes }
197+ return & xrayUtils .GraphNode {Id : "root" , Nodes : uniqueNodes }
195198}
196199
197- func createFlatTree (uniqueDeps []string ) * xrayCmdUtils .GraphNode {
198- uniqueNodes := []* xrayCmdUtils .GraphNode {}
200+ func createFlatTree (uniqueDeps []string ) * xrayUtils .GraphNode {
201+ uniqueNodes := []* xrayUtils .GraphNode {}
199202 for _ , uniqueDep := range uniqueDeps {
200- uniqueNodes = append (uniqueNodes , & xrayCmdUtils .GraphNode {Id : uniqueDep })
203+ uniqueNodes = append (uniqueNodes , & xrayUtils .GraphNode {Id : uniqueDep })
201204 }
202- return & xrayCmdUtils .GraphNode {Id : "root" , Nodes : uniqueNodes }
205+ return & xrayUtils .GraphNode {Id : "root" , Nodes : uniqueNodes }
203206}
204207
205208// Collect dependencies exists in target and not in resultsToCompare
206- func GetDiffDependencyTree (scanResults * results.TargetResults , resultsToCompare * results.TargetResults , fullDepTrees ... * xrayCmdUtils .GraphNode ) (* DependencyTreeResult , error ) {
207- if resultsToCompare == nil {
209+ func GetDiffDependencyTree (scanResults * results.TargetResults , resultsToCompare * results.TargetResults , fullDepTrees ... * xrayUtils .GraphNode ) (* DependencyTreeResult , error ) {
210+ if resultsToCompare == nil || resultsToCompare . ScaResults == nil || resultsToCompare . ScaResults . Sbom == nil || resultsToCompare . ScaResults . Sbom . Components == nil {
208211 return nil , fmt .Errorf ("failed to get diff dependency tree: no results to compare" )
209212 }
213+ if scanResults == nil || scanResults .ScaResults == nil || scanResults .ScaResults .Sbom == nil || scanResults .ScaResults .Sbom .Components == nil {
214+ return nil , fmt .Errorf ("failed to get diff dependency tree: no scan results found for target %s" , scanResults .Target )
215+ }
210216 log .Debug (fmt .Sprintf ("Comparing %s SBOM with %s to get diff" , scanResults .Target , resultsToCompare .Target ))
211217 // Compare the dependency trees
212218 filterDepsMap := datastructures .MakeSet [string ]()
213- for _ , component := range resultsToCompare .Sbom .Components {
214- filterDepsMap .Add (techutils .ToXrayComponentId (component .XrayType , component . Component , component . Version ))
219+ for _ , component := range * resultsToCompare . ScaResults .Sbom .Components {
220+ filterDepsMap .Add (techutils .PurlToXrayComponentId (component .PackageURL ))
215221 }
216222 addedDepsMap := datastructures .MakeSet [string ]()
217- for _ , component := range scanResults .Sbom .Components {
218- componentId := techutils .ToXrayComponentId (component .XrayType , component . Component , component . Version )
219- if exists := filterDepsMap .Exists (componentId ); ! exists {
223+ for _ , component := range * scanResults . ScaResults .Sbom .Components {
224+ id := techutils .PurlToXrayComponentId (component .PackageURL )
225+ if exists := filterDepsMap .Exists (id ); ! exists {
220226 // Dependency in scan results but not in results to compare
221- addedDepsMap .Add (componentId )
227+ addedDepsMap .Add (id )
222228 }
223229 }
224230 diffDepTree := DependencyTreeResult {
0 commit comments