@@ -182,8 +182,15 @@ def _run_syft(directory: str, tmpfile: str) -> tuple[int, str, str]:
182
182
return _run_program ("syft" , "scan" , f"dir:{ directory } " , "-o" , f"cyclonedx-json={ tmpfile } " )
183
183
184
184
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
+
185
192
def sbom_gen_system_program (
186
- program : Literal ["syft" ], directory : str , output : str = ""
193
+ program : Literal ["syft" , "cdxgen" ], directory : str , output : str = ""
187
194
) -> str :
188
195
"""
189
196
Generates a CycloneDX Software Bill of Materials (SBOM) for the project
@@ -211,6 +218,8 @@ def sbom_gen_system_program(
211
218
with NamedTemporaryFile () as tmpfile :
212
219
if program == "syft" :
213
220
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 )
214
223
else :
215
224
logging .critical ("Unsupported program provided for SBOM generation" )
216
225
sys .exit (1 )
0 commit comments