Skip to content

Commit a75605c

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

4 files changed

Lines changed: 21 additions & 34 deletions

File tree

.github/workflows/release.yml

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -73,7 +73,6 @@ jobs:
7373
run: bash scripts/sbom-create.sh
7474

7575
- name: Generate ASDF SBOM
76-
working-directory: ./main-repo
7776
run: poetry run python scripts/asdf_to_sbom.py
7877

7978
- name: Upload SBOM artifact

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 & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,27 @@
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
29
import sys
310
from pathlib import Path
411

512
import fire
613

714

8-
def update_sbom(existing_sbom="sbom.spdx.json") -> None:
15+
def update_sbom(new_sbom, existing_sbom="sbom.spdx.json") -> None:
16+
with Path(new_sbom).open("r") as f:
17+
updates = json.load(f)
18+
919
with Path(existing_sbom).open("r") as f:
1020
sbom = json.load(f)
1121

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", []))
22+
sbom.setdefault("packages", []).extend(updates.setdefault("packages", []))
23+
sbom.setdefault("files", []).extend(updates.setdefault("files", []))
24+
sbom.setdefault("relationships", []).extend(updates.setdefault("relationships", []))
1725

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

0 commit comments

Comments
 (0)