Skip to content

Commit

Permalink
Fix SPDX relationships in sbom
Browse files Browse the repository at this point in the history
This adjusts the relationships to match the explanations at https://spdx.github.io/spdx-spec/v2.3/relationships-between-SPDX-elements/

Fixes npm#6867

Signed-off-by: Anton Bauhofer <[email protected]>
  • Loading branch information
antonbauhofer committed Oct 5, 2023
1 parent 2e4b4ad commit 7386827
Show file tree
Hide file tree
Showing 5 changed files with 23 additions and 16 deletions.
11 changes: 9 additions & 2 deletions lib/utils/sbom-spdx.js
Original file line number Diff line number Diff line change
Expand Up @@ -139,9 +139,16 @@ const toSpdxRelationship = (node, edge) => {
type = REL_DEP
}

let from, to
if ([REL_OPTIONAL, REL_DEV].includes(type)) {
[from, to] = [edge.to, node]
} else {
[from, to] = [node, edge.to]
}

return {
spdxElementId: toSpdxID(node),
relatedSpdxElement: toSpdxID(edge.to),
spdxElementId: toSpdxID(from),
relatedSpdxElement: toSpdxID(to),
relationshipType: type,
}
}
Expand Down
12 changes: 6 additions & 6 deletions tap-snapshots/test/lib/commands/sbom.js.test.cjs
Original file line number Diff line number Diff line change
Expand Up @@ -557,8 +557,8 @@ exports[`test/lib/commands/sbom.js TAP sbom extraneous dep > must match snapshot
"relationshipType": "DEPENDS_ON"
},
{
"spdxElementId": "SPDXRef-Package-test-npm-ls-1.0.0",
"relatedSpdxElement": "SPDXRef-Package-chai-1.0.0",
"spdxElementId": "SPDXRef-Package-chai-1.0.0",
"relatedSpdxElement": "SPDXRef-Package-test-npm-ls-1.0.0",
"relationshipType": "OPTIONAL_DEPENDENCY_OF"
}
]
Expand Down Expand Up @@ -730,8 +730,8 @@ exports[`test/lib/commands/sbom.js TAP sbom loading a tree containing workspaces
"relationshipType": "DEPENDS_ON"
},
{
"spdxElementId": "SPDXRef-Package-a-1.0.0",
"relatedSpdxElement": "SPDXRef-Package-baz-1.0.0",
"spdxElementId": "SPDXRef-Package-baz-1.0.0",
"relatedSpdxElement": "SPDXRef-Package-a-1.0.0",
"relationshipType": "DEV_DEPENDENCY_OF"
},
{
Expand Down Expand Up @@ -1091,8 +1091,8 @@ exports[`test/lib/commands/sbom.js TAP sbom loading a tree containing workspaces
"relationshipType": "DEPENDS_ON"
},
{
"spdxElementId": "SPDXRef-Package-a-1.0.0",
"relatedSpdxElement": "SPDXRef-Package-baz-1.0.0",
"spdxElementId": "SPDXRef-Package-baz-1.0.0",
"relatedSpdxElement": "SPDXRef-Package-a-1.0.0",
"relationshipType": "DEV_DEPENDENCY_OF"
},
{
Expand Down
2 changes: 1 addition & 1 deletion tap-snapshots/test/lib/docs.js.test.cjs
Original file line number Diff line number Diff line change
Expand Up @@ -1421,7 +1421,7 @@ SBOM format to use when generating SBOMs.
* Type: "library", "application", or "framework"
The type of package described by the generated SBOM. For SPDX, this is the
value for the \`primaryPackagePurpose\` fieled. For CycloneDX, this is the
value for the \`primaryPackagePurpose\` field. For CycloneDX, this is the
value for the \`type\` field.
Expand Down
12 changes: 6 additions & 6 deletions tap-snapshots/test/lib/utils/sbom-spdx.js.test.cjs
Original file line number Diff line number Diff line change
Expand Up @@ -154,13 +154,13 @@ exports[`test/lib/utils/sbom-spdx.js TAP node - with deps > must match snapshot
"relationshipType": "HAS_PREREQUISITE"
},
{
"spdxElementId": "SPDXRef-Package-root-1.0.0",
"relatedSpdxElement": "SPDXRef-Package-dep2-0.0.2",
"spdxElementId": "SPDXRef-Package-dep2-0.0.2",
"relatedSpdxElement": "SPDXRef-Package-root-1.0.0",
"relationshipType": "OPTIONAL_DEPENDENCY_OF"
},
{
"spdxElementId": "SPDXRef-Package-root-1.0.0",
"relatedSpdxElement": "SPDXRef-Package-dep3-0.0.3",
"spdxElementId": "SPDXRef-Package-dep3-0.0.3",
"relatedSpdxElement": "SPDXRef-Package-root-1.0.0",
"relationshipType": "DEV_DEPENDENCY_OF"
},
{
Expand All @@ -174,8 +174,8 @@ exports[`test/lib/utils/sbom-spdx.js TAP node - with deps > must match snapshot
"relationshipType": "DEPENDS_ON"
},
{
"spdxElementId": "SPDXRef-Package-root-1.0.0",
"relatedSpdxElement": "SPDXRef-Package-dep6-0.0.6",
"spdxElementId": "SPDXRef-Package-dep6-0.0.6",
"relatedSpdxElement": "SPDXRef-Package-root-1.0.0",
"relationshipType": "OPTIONAL_DEPENDENCY_OF"
}
]
Expand Down
2 changes: 1 addition & 1 deletion workspaces/config/lib/definitions/definitions.js
Original file line number Diff line number Diff line change
Expand Up @@ -1234,7 +1234,7 @@ define('sbom-type', {
],
description: `
The type of package described by the generated SBOM. For SPDX, this is the
value for the \`primaryPackagePurpose\` fieled. For CycloneDX, this is the
value for the \`primaryPackagePurpose\` field. For CycloneDX, this is the
value for the \`type\` field.
`,
flatten,
Expand Down

0 comments on commit 7386827

Please sign in to comment.