Skip to content

Commit 3d5b273

Browse files
Add license dash support for license data extraction (#2232)
1 parent 35c92b1 commit 3d5b273

10 files changed

Lines changed: 659 additions & 337 deletions

sbom/BUILD.bazel

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,8 +14,6 @@ package(default_visibility = ["//visibility:public"])
1414
exports_files([
1515
"defs.bzl",
1616
"extensions.bzl",
17-
"crates_metadata.json",
18-
"cpp_metadata.json",
1917
])
2018

2119
# Filegroup for all SBOM-related bzl files

sbom/SBOM_Readme.md

Lines changed: 118 additions & 104 deletions
Large diffs are not rendered by default.

sbom/defs.bzl

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ def sbom(
2626
cdxgen_sbom = None,
2727
auto_cdxgen = False,
2828
cargo_lockfile = None,
29-
module_lockfile = None,
29+
module_lockfiles = None,
3030
auto_crates_cache = True,
3131
output_formats = ["spdx", "cyclonedx"],
3232
producer_name = "Eclipse Foundation",
@@ -65,8 +65,8 @@ def sbom(
6565
cdxgen_sbom: Optional label to CycloneDX JSON from cdxgen for C++ enrichment
6666
auto_cdxgen: Run cdxgen automatically when no cdxgen_sbom is provided
6767
cargo_lockfile: Optional Cargo.lock for crates metadata cache generation
68-
module_lockfile: Optional MODULE.bazel.lock for additional crates (e.g., from score_crates)
69-
auto_crates_cache: Run crates metadata cache generation when cargo_lockfile or module_lockfile is provided
68+
module_lockfiles: MODULE.bazel.lock files for crate metadata extraction (e.g., from score_crates and workspace)
69+
auto_crates_cache: Run crates metadata cache generation when cargo_lockfile or module_lockfiles is provided
7070
output_formats: List of formats to generate ("spdx", "cyclonedx")
7171
producer_name: SBOM producer organization name
7272
producer_url: SBOM producer URL
@@ -120,7 +120,7 @@ def sbom(
120120
cdxgen_sbom = cdxgen_sbom,
121121
auto_cdxgen = auto_cdxgen,
122122
cargo_lockfile = cargo_lockfile,
123-
module_lockfile = module_lockfile,
123+
module_lockfiles = module_lockfiles if module_lockfiles else [],
124124
auto_crates_cache = auto_crates_cache,
125125
output_formats = output_formats,
126126
producer_name = producer_name,

sbom/internal/generator/BUILD

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -10,10 +10,6 @@ package(default_visibility = ["//sbom:__subpackages__"])
1010
py_binary(
1111
name = "sbom_generator",
1212
srcs = ["sbom_generator.py"],
13-
data = [
14-
"//sbom:cpp_metadata.json",
15-
"//sbom:crates_metadata.json",
16-
],
1713
main = "sbom_generator.py",
1814
deps = [
1915
":cyclonedx_formatter",

sbom/internal/generator/cyclonedx_formatter.py

Lines changed: 10 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -158,6 +158,7 @@ def _create_cdx_component(component: dict[str, Any]) -> dict[str, Any]:
158158
version = component.get("version", "unknown")
159159
purl = component.get("purl", "")
160160
license_id = component.get("license", "")
161+
description = component.get("description", "")
161162
supplier = component.get("supplier", "")
162163
comp_type = component.get("type", "library")
163164
source = component.get("source", "")
@@ -177,19 +178,21 @@ def _create_cdx_component(component: dict[str, Any]) -> dict[str, Any]:
177178
"bom-ref": _generate_bom_ref(name, version),
178179
}
179180

181+
# Add description
182+
if description:
183+
cdx_comp["description"] = description
184+
180185
# Add PURL
181186
if purl:
182187
cdx_comp["purl"] = purl
183188

184189
# Add license
185190
if license_id:
186-
cdx_comp["licenses"] = [
187-
{
188-
"license": {
189-
"id": license_id,
190-
}
191-
}
192-
]
191+
if " AND " in license_id or " OR " in license_id:
192+
# Compound SPDX expression must use "expression", not "license.id"
193+
cdx_comp["licenses"] = [{"expression": license_id}]
194+
else:
195+
cdx_comp["licenses"] = [{"license": {"id": license_id}}]
193196

194197
# Add supplier
195198
if supplier:

0 commit comments

Comments
 (0)