Module continuous_delivery_scripts.check_licence_compliance

Check project and dependency licences without generating SPDX documents.

Functions

def main() ‑> int
Expand source code
def main() -> int:
    """Check licence compliance and optionally write third-party IP summaries."""
    parser = argparse.ArgumentParser(description="Check project and dependency licence compliance.")
    parser.add_argument(
        "-o",
        "--output-dir",
        type=Path,
        help="Write third-party IP summaries to this existing directory (no SPDX documents).",
    )
    parser.add_argument(
        "--lookup-scancode",
        action="store_true",
        help="Consult ScanCode LicenseDB for unclassified licences or missing assessment rules.",
    )
    parser.add_argument(
        "--skip-dependency-download",
        action="store_true",
        help="Skip automatic dependency downloads before licence checks and SPDX dependency analysis.",
    )
    parser.add_argument("-v", "--verbose", action="count", default=0, help="Increase logging verbosity.")
    args = parser.parse_args()
    set_log_level(args.verbose)

    try:
        plugin = get_language_specifics()
        if not plugin.can_get_project_metadata():
            raise ValueError("The selected language plugin cannot provide metadata for licence compliance checks.")
        project = plugin.get_current_spdx_project(skip_dependency_download=args.skip_dependency_download)
        if project is None:
            raise ValueError("The selected language plugin did not return a project for licence compliance checks.")
        if args.lookup_scancode:
            project.enable_scancode_lookup()
        if args.output_dir is not None:
            project.generate_licensing_summary(args.output_dir)
        _print_policy_summary(project)
        _log_assessment_details(project)
        if args.lookup_scancode:
            for name, result in project.licence_assessments.items():
                for info in result.scancode_licences:
                    print(f"{name}: ScanCode LicenseDB: {info.identifier} ({info.category}): {info.url}")
        if args.lookup_scancode:
            for warning in project.scancode_follow_up_warnings():
                print(f"WARNING: {warning}", file=sys.stderr)
        return 0
    except Exception as error:
        log_exception(logger, error)
        return 1

Check licence compliance and optionally write third-party IP summaries.