Skip to content

Commit 2693255

Browse files
committed
add sbom generation using cdxgen (system)
1 parent 688643f commit 2693255

File tree

2 files changed

+13
-4
lines changed

2 files changed

+13
-4
lines changed

complassist/_sbom_generate.py

+10-1
Original file line numberDiff line numberDiff line change
@@ -182,8 +182,15 @@ def _run_syft(directory: str, tmpfile: str) -> tuple[int, str, str]:
182182
return _run_program("syft", "scan", f"dir:{directory}", "-o", f"cyclonedx-json={tmpfile}")
183183

184184

185+
def _run_cdxgen(directory: str, tmpfile: str) -> tuple[int, str, str]:
186+
"""Run cdxgen to generate SBOM"""
187+
_, cdxgen_version, _ = _run_program("cdxgen", "--version")
188+
logging.info("Running cdxgen %s to generate SBOM", cdxgen_version)
189+
return _run_program("cdxgen", "-r", "-o", tmpfile)
190+
191+
185192
def sbom_gen_system_program(
186-
program: Literal["syft"], directory: str, output: str = ""
193+
program: Literal["syft", "cdxgen"], directory: str, output: str = ""
187194
) -> str:
188195
"""
189196
Generates a CycloneDX Software Bill of Materials (SBOM) for the project
@@ -211,6 +218,8 @@ def sbom_gen_system_program(
211218
with NamedTemporaryFile() as tmpfile:
212219
if program == "syft":
213220
code, stdout, stderr = _run_syft(directory=directory, tmpfile=tmpfile.name)
221+
elif program == "cdxgen":
222+
code, stdout, stderr = _run_cdxgen(directory=directory, tmpfile=tmpfile.name)
214223
else:
215224
logging.critical("Unsupported program provided for SBOM generation")
216225
sys.exit(1)

complassist/main.py

+3-3
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,7 @@
5656
"-g",
5757
"--generator",
5858
help="SBOM Generator to use",
59-
choices=["cdxgen-docker", "syft"],
59+
choices=["syft", "cdxgen", "cdxgen-docker"],
6060
required=True,
6161
)
6262
parser_sbom_gen.add_argument(
@@ -270,9 +270,9 @@ def main(): # pylint: disable=too-many-branches, too-many-statements
270270
if args.sbom_command == "generate":
271271
if args.generator == "cdxgen-docker":
272272
sbom_gen_cdxgen_docker(directory=args.directory, output=args.output)
273-
elif args.generator == "syft":
273+
else:
274274
sbom_gen_system_program(
275-
program="syft", directory=args.directory, output=args.output
275+
program=args.generator, directory=args.directory, output=args.output
276276
)
277277

278278
# Enrich SBOM by ClearlyDefined data

0 commit comments

Comments
 (0)