1e72b635cSLuis Augenstein#!/usr/bin/env python3 2e72b635cSLuis Augenstein# SPDX-License-Identifier: GPL-2.0-only OR MIT 3e72b635cSLuis Augenstein# Copyright (C) 2025 TNG Technology Consulting GmbH 4e72b635cSLuis Augenstein 5e72b635cSLuis Augenstein""" 6e72b635cSLuis AugensteinCompute software bill of materials in SPDX format describing a kernel build. 7e72b635cSLuis Augenstein""" 8e72b635cSLuis Augenstein 9*3fd79200SLuis Augensteinimport logging 10*3fd79200SLuis Augensteinimport sys 11*3fd79200SLuis Augensteinimport sbom.sbom_logging as sbom_logging 12*3fd79200SLuis Augensteinfrom sbom.config import get_config 13*3fd79200SLuis Augenstein 14*3fd79200SLuis Augenstein 15*3fd79200SLuis Augensteindef _exit_with_summary(write_output_on_error: bool = False) -> None: 16*3fd79200SLuis Augenstein warning_summary = sbom_logging.summarize_warnings() 17*3fd79200SLuis Augenstein error_summary = sbom_logging.summarize_errors() 18*3fd79200SLuis Augenstein if warning_summary: 19*3fd79200SLuis Augenstein logging.warning(warning_summary) 20*3fd79200SLuis Augenstein if error_summary: 21*3fd79200SLuis Augenstein logging.error(error_summary) 22*3fd79200SLuis Augenstein sys.exit(1) 23*3fd79200SLuis Augenstein 24e72b635cSLuis Augenstein 25e72b635cSLuis Augensteindef main(): 26*3fd79200SLuis Augenstein # Read config 27*3fd79200SLuis Augenstein config = get_config() 28*3fd79200SLuis Augenstein 29*3fd79200SLuis Augenstein # Configure logging 30*3fd79200SLuis Augenstein logging.basicConfig( 31*3fd79200SLuis Augenstein level=logging.DEBUG if config.debug else logging.INFO, 32*3fd79200SLuis Augenstein format="[%(levelname)s] %(message)s", 33*3fd79200SLuis Augenstein ) 34*3fd79200SLuis Augenstein 35*3fd79200SLuis Augenstein _exit_with_summary(config.write_output_on_error) 36e72b635cSLuis Augenstein 37e72b635cSLuis Augenstein 38e72b635cSLuis Augenstein# Call main method 39e72b635cSLuis Augensteinif __name__ == "__main__": 40e72b635cSLuis Augenstein main() 41