xref: /linux/scripts/sbom/sbom.py (revision 3fd79200835f382261a7b53fed659625b22484af)
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