Skip to content

Commit 56077fe

Browse files
NRL-1928 Merge SBOMs better
1 parent 19eb1e1 commit 56077fe

4 files changed

Lines changed: 21 additions & 38 deletions

File tree

.github/workflows/release.yml

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -72,10 +72,6 @@ jobs:
7272
- name: Create SBOM
7373
run: bash scripts/sbom-create.sh
7474

75-
- name: Generate ASDF SBOM
76-
working-directory: ./main-repo
77-
run: poetry run python scripts/asdf_to_sbom.py
78-
7975
- name: Upload SBOM artifact
8076
uses: actions/upload-artifact@v4
8177
with:

scripts/sbom-create.sh

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,11 @@
11
REPO_ROOT=$(git rev-parse --show-toplevel)
22

3+
echo REPO_ROOT: $REPO_ROOT
4+
35
syft -o spdx-json . > sbom.spdx.json
46

5-
poetry run python "$REPO_ROOT/scripts/sbom_from_asdf.py" | poetry run python "$REPO_ROOT/scripts/sbom_update.py"
7+
ASDF_SBOM="sbom-asdf.spdx.json"
8+
9+
poetry run python "$REPO_ROOT/scripts/sbom_from_asdf.py" $ASDF_SBOM
10+
11+
poetry run python "$REPO_ROOT/scripts/sbom_update.py" $ASDF_SBOM "sbom.spdx.json"

scripts/sbom_from_asdf.py

Lines changed: 0 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@
22
"""Generate an SBOM-looking document for our asdf dependencies"""
33

44
import json
5-
import re
65
from pathlib import Path
76

87

@@ -27,30 +26,6 @@ def parse_tool_versions(file_path=".tool-versions"):
2726
return tools
2827

2928

30-
# def create_spdx_package(tool, index):
31-
# package_id = f"SPDXRef-Package-asdf-{tool['name']}-{index}"
32-
33-
# return {
34-
# "name": tool["name"],
35-
# "SPDXID": package_id,
36-
# "versionInfo": tool["version"],
37-
# "supplier": "NOASSERTION",
38-
# "downloadLocation": "NOASSERTION",
39-
# "filesAnalyzed": False,
40-
# "sourceInfo": "ASDF-managed tool: acquired package info from /.tool-versions",
41-
# "licenseConcluded": "NOASSERTION",
42-
# "licenseDeclared": "NOASSERTION",
43-
# "copyrightText": "NOASSERTION",
44-
# "externalRefs": [
45-
# {
46-
# "referenceCategory": "PACKAGE-MANAGER",
47-
# "referenceType": "purl",
48-
# "referenceLocator": f"pkg:generic/{tool['name']}@{tool['version']}",
49-
# }
50-
# ],
51-
# }
52-
53-
5429
def generate_asdf_sbom(output_file="sbom-asdf.spdx.json"):
5530
tools = parse_tool_versions()
5631

@@ -83,7 +58,6 @@ def generate_asdf_sbom(output_file="sbom-asdf.spdx.json"):
8358
}
8459
for index, tool in enumerate(tools)
8560
],
86-
# "packages": [create_spdx_package(tool, idx) for idx, tool in enumerate(tools)],
8761
"relationships": [
8862
{
8963
"spdxElementId": "SPDXRef-DOCUMENT",

scripts/sbom_update.py

Lines changed: 14 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,26 @@
1+
#!/usr/bin/env python3
2+
"""
3+
Merge two SBOMs together
4+
5+
packages, files, and relationships from new_sbom will be merged into existing_sbom
6+
"""
7+
18
import json
2-
import sys
39
from pathlib import Path
410

511
import fire
612

713

8-
def update_sbom(existing_sbom="sbom.spdx.json") -> None:
14+
def update_sbom(new_sbom, existing_sbom="sbom.spdx.json") -> None:
15+
with Path(new_sbom).open("r") as f:
16+
updates = json.load(f)
17+
918
with Path(existing_sbom).open("r") as f:
1019
sbom = json.load(f)
1120

12-
tool = json.loads(sys.stdin.read())
13-
14-
sbom.setdefault("packages", []).extend(tool.setdefault("packages", []))
15-
sbom.setdefault("files", []).extend(tool.setdefault("files", []))
16-
sbom.setdefault("relationships", []).extend(tool.setdefault("relationships", []))
21+
sbom.setdefault("packages", []).extend(updates.setdefault("packages", []))
22+
sbom.setdefault("files", []).extend(updates.setdefault("files", []))
23+
sbom.setdefault("relationships", []).extend(updates.setdefault("relationships", []))
1724

1825
with Path(existing_sbom).open("w") as f:
1926
json.dump(sbom, f)

0 commit comments

Comments
 (0)