continuous-delivery-scripts 4.2.0__tar.gz → 4.3.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {continuous_delivery_scripts-4.2.0/continuous_delivery_scripts.egg-info → continuous_delivery_scripts-4.3.0}/PKG-INFO +13 -12
- {continuous_delivery_scripts-4.2.0 → continuous_delivery_scripts-4.3.0}/README.md +12 -11
- {continuous_delivery_scripts-4.2.0 → continuous_delivery_scripts-4.3.0}/continuous_delivery_scripts/_version.py +3 -3
- continuous_delivery_scripts-4.3.0/continuous_delivery_scripts/check_licence_compliance.py +48 -0
- {continuous_delivery_scripts-4.2.0 → continuous_delivery_scripts-4.3.0}/continuous_delivery_scripts/spdx_report/spdx_document.py +32 -2
- {continuous_delivery_scripts-4.2.0 → continuous_delivery_scripts-4.3.0}/continuous_delivery_scripts/spdx_report/spdx_package.py +10 -2
- {continuous_delivery_scripts-4.2.0 → continuous_delivery_scripts-4.3.0}/continuous_delivery_scripts/spdx_report/templates/third_party_IP_report.html.jinja2 +12 -0
- {continuous_delivery_scripts-4.2.0 → continuous_delivery_scripts-4.3.0}/continuous_delivery_scripts/utils/language_specifics_base.py +4 -1
- {continuous_delivery_scripts-4.2.0 → continuous_delivery_scripts-4.3.0}/continuous_delivery_scripts/utils/third_party_licences.py +35 -3
- {continuous_delivery_scripts-4.2.0 → continuous_delivery_scripts-4.3.0/continuous_delivery_scripts.egg-info}/PKG-INFO +13 -12
- {continuous_delivery_scripts-4.2.0 → continuous_delivery_scripts-4.3.0}/continuous_delivery_scripts.egg-info/SOURCES.txt +1 -0
- {continuous_delivery_scripts-4.2.0 → continuous_delivery_scripts-4.3.0}/continuous_delivery_scripts.egg-info/entry_points.txt +1 -0
- {continuous_delivery_scripts-4.2.0 → continuous_delivery_scripts-4.3.0}/setup.py +1 -0
- {continuous_delivery_scripts-4.2.0 → continuous_delivery_scripts-4.3.0}/spdx-tmp/GitPython.spdx +1 -1
- {continuous_delivery_scripts-4.2.0 → continuous_delivery_scripts-4.3.0}/spdx-tmp/Incremental.spdx +1 -1
- {continuous_delivery_scripts-4.2.0 → continuous_delivery_scripts-4.3.0}/spdx-tmp/Jinja2.spdx +1 -1
- {continuous_delivery_scripts-4.2.0 → continuous_delivery_scripts-4.3.0}/spdx-tmp/Mako.spdx +1 -1
- {continuous_delivery_scripts-4.2.0 → continuous_delivery_scripts-4.3.0}/spdx-tmp/Markdown.spdx +1 -1
- {continuous_delivery_scripts-4.2.0 → continuous_delivery_scripts-4.3.0}/spdx-tmp/MarkupSafe.spdx +1 -1
- {continuous_delivery_scripts-4.2.0 → continuous_delivery_scripts-4.3.0}/spdx-tmp/PyYAML.spdx +1 -1
- {continuous_delivery_scripts-4.2.0 → continuous_delivery_scripts-4.3.0}/spdx-tmp/Pygments.spdx +1 -1
- {continuous_delivery_scripts-4.2.0 → continuous_delivery_scripts-4.3.0}/spdx-tmp/SecretStorage.spdx +1 -1
- {continuous_delivery_scripts-4.2.0 → continuous_delivery_scripts-4.3.0}/spdx-tmp/boolean.py.spdx +1 -1
- {continuous_delivery_scripts-4.2.0 → continuous_delivery_scripts-4.3.0}/spdx-tmp/boto3.spdx +4 -4
- {continuous_delivery_scripts-4.2.0 → continuous_delivery_scripts-4.3.0}/spdx-tmp/botocore.spdx +4 -4
- {continuous_delivery_scripts-4.2.0 → continuous_delivery_scripts-4.3.0}/spdx-tmp/bracex.spdx +1 -1
- {continuous_delivery_scripts-4.2.0 → continuous_delivery_scripts-4.3.0}/spdx-tmp/certifi.spdx +1 -1
- {continuous_delivery_scripts-4.2.0 → continuous_delivery_scripts-4.3.0}/spdx-tmp/cffi.spdx +1 -1
- {continuous_delivery_scripts-4.2.0 → continuous_delivery_scripts-4.3.0}/spdx-tmp/charset-normalizer.spdx +1 -1
- {continuous_delivery_scripts-4.2.0 → continuous_delivery_scripts-4.3.0}/spdx-tmp/click-default-group.spdx +1 -1
- {continuous_delivery_scripts-4.2.0 → continuous_delivery_scripts-4.3.0}/spdx-tmp/click.spdx +1 -1
- {continuous_delivery_scripts-4.2.0 → continuous_delivery_scripts-4.3.0}/spdx-tmp/continuous-delivery-scripts.spdx +90 -77
- {continuous_delivery_scripts-4.2.0 → continuous_delivery_scripts-4.3.0}/spdx-tmp/cryptography.spdx +1 -1
- {continuous_delivery_scripts-4.2.0 → continuous_delivery_scripts-4.3.0}/spdx-tmp/detect-secrets.spdx +1 -1
- {continuous_delivery_scripts-4.2.0 → continuous_delivery_scripts-4.3.0}/spdx-tmp/docutils.spdx +1 -1
- {continuous_delivery_scripts-4.2.0 → continuous_delivery_scripts-4.3.0}/spdx-tmp/gibberish-detector.spdx +1 -1
- {continuous_delivery_scripts-4.2.0 → continuous_delivery_scripts-4.3.0}/spdx-tmp/gitdb.spdx +1 -1
- {continuous_delivery_scripts-4.2.0 → continuous_delivery_scripts-4.3.0}/spdx-tmp/id.spdx +1 -1
- {continuous_delivery_scripts-4.2.0 → continuous_delivery_scripts-4.3.0}/spdx-tmp/idna.spdx +1 -1
- {continuous_delivery_scripts-4.2.0 → continuous_delivery_scripts-4.3.0}/spdx-tmp/jaraco.classes.spdx +1 -1
- {continuous_delivery_scripts-4.2.0 → continuous_delivery_scripts-4.3.0}/spdx-tmp/jaraco.context.spdx +1 -1
- {continuous_delivery_scripts-4.2.0 → continuous_delivery_scripts-4.3.0}/spdx-tmp/jaraco.functools.spdx +1 -1
- {continuous_delivery_scripts-4.2.0 → continuous_delivery_scripts-4.3.0}/spdx-tmp/jeepney.spdx +1 -1
- {continuous_delivery_scripts-4.2.0 → continuous_delivery_scripts-4.3.0}/spdx-tmp/jellyfish.spdx +1 -1
- {continuous_delivery_scripts-4.2.0 → continuous_delivery_scripts-4.3.0}/spdx-tmp/jmespath.spdx +1 -1
- {continuous_delivery_scripts-4.2.0 → continuous_delivery_scripts-4.3.0}/spdx-tmp/keyring.spdx +1 -1
- {continuous_delivery_scripts-4.2.0 → continuous_delivery_scripts-4.3.0}/spdx-tmp/license-expression.spdx +1 -1
- {continuous_delivery_scripts-4.2.0 → continuous_delivery_scripts-4.3.0}/spdx-tmp/licenseheaders.spdx +1 -1
- {continuous_delivery_scripts-4.2.0 → continuous_delivery_scripts-4.3.0}/spdx-tmp/markdown-it-py.spdx +1 -1
- {continuous_delivery_scripts-4.2.0 → continuous_delivery_scripts-4.3.0}/spdx-tmp/mdurl.spdx +1 -1
- {continuous_delivery_scripts-4.2.0 → continuous_delivery_scripts-4.3.0}/spdx-tmp/more-itertools.spdx +1 -1
- {continuous_delivery_scripts-4.2.0 → continuous_delivery_scripts-4.3.0}/spdx-tmp/nh3.spdx +1 -1
- {continuous_delivery_scripts-4.2.0 → continuous_delivery_scripts-4.3.0}/spdx-tmp/packaging.spdx +1 -1
- {continuous_delivery_scripts-4.2.0 → continuous_delivery_scripts-4.3.0}/spdx-tmp/pdoc3.spdx +1 -1
- {continuous_delivery_scripts-4.2.0 → continuous_delivery_scripts-4.3.0}/spdx-tmp/ply.spdx +1 -1
- {continuous_delivery_scripts-4.2.0 → continuous_delivery_scripts-4.3.0}/spdx-tmp/pyautoversion.spdx +1 -1
- {continuous_delivery_scripts-4.2.0 → continuous_delivery_scripts-4.3.0}/spdx-tmp/pycparser.spdx +1 -1
- {continuous_delivery_scripts-4.2.0 → continuous_delivery_scripts-4.3.0}/spdx-tmp/pyparsing.spdx +1 -1
- {continuous_delivery_scripts-4.2.0 → continuous_delivery_scripts-4.3.0}/spdx-tmp/python-dateutil.spdx +1 -1
- {continuous_delivery_scripts-4.2.0 → continuous_delivery_scripts-4.3.0}/spdx-tmp/python-dotenv.spdx +4 -4
- {continuous_delivery_scripts-4.2.0 → continuous_delivery_scripts-4.3.0}/spdx-tmp/rdflib.spdx +1 -1
- {continuous_delivery_scripts-4.2.0 → continuous_delivery_scripts-4.3.0}/spdx-tmp/readme_renderer.spdx +1 -1
- {continuous_delivery_scripts-4.2.0 → continuous_delivery_scripts-4.3.0}/spdx-tmp/regex.spdx +1 -1
- {continuous_delivery_scripts-4.2.0 → continuous_delivery_scripts-4.3.0}/spdx-tmp/requests-toolbelt.spdx +1 -1
- {continuous_delivery_scripts-4.2.0 → continuous_delivery_scripts-4.3.0}/spdx-tmp/requests.spdx +1 -1
- {continuous_delivery_scripts-4.2.0 → continuous_delivery_scripts-4.3.0}/spdx-tmp/rfc3986.spdx +1 -1
- {continuous_delivery_scripts-4.2.0 → continuous_delivery_scripts-4.3.0}/spdx-tmp/rich.spdx +1 -1
- {continuous_delivery_scripts-4.2.0 → continuous_delivery_scripts-4.3.0}/spdx-tmp/s3transfer.spdx +1 -1
- {continuous_delivery_scripts-4.2.0 → continuous_delivery_scripts-4.3.0}/spdx-tmp/semver.spdx +1 -1
- {continuous_delivery_scripts-4.2.0 → continuous_delivery_scripts-4.3.0}/spdx-tmp/setuptools.spdx +1 -1
- {continuous_delivery_scripts-4.2.0 → continuous_delivery_scripts-4.3.0}/spdx-tmp/six.spdx +1 -1
- {continuous_delivery_scripts-4.2.0 → continuous_delivery_scripts-4.3.0}/spdx-tmp/smmap.spdx +1 -1
- {continuous_delivery_scripts-4.2.0 → continuous_delivery_scripts-4.3.0}/spdx-tmp/spdx-tools.spdx +1 -1
- {continuous_delivery_scripts-4.2.0 → continuous_delivery_scripts-4.3.0}/spdx-tmp/toml.spdx +1 -1
- {continuous_delivery_scripts-4.2.0 → continuous_delivery_scripts-4.3.0}/spdx-tmp/towncrier.spdx +1 -1
- {continuous_delivery_scripts-4.2.0 → continuous_delivery_scripts-4.3.0}/spdx-tmp/twine.spdx +1 -1
- {continuous_delivery_scripts-4.2.0 → continuous_delivery_scripts-4.3.0}/spdx-tmp/urllib3.spdx +1 -1
- {continuous_delivery_scripts-4.2.0 → continuous_delivery_scripts-4.3.0}/spdx-tmp/wcmatch.spdx +1 -1
- {continuous_delivery_scripts-4.2.0 → continuous_delivery_scripts-4.3.0}/spdx-tmp/xmltodict.spdx +1 -1
- {continuous_delivery_scripts-4.2.0 → continuous_delivery_scripts-4.3.0}/LICENSE +0 -0
- {continuous_delivery_scripts-4.2.0 → continuous_delivery_scripts-4.3.0}/MANIFEST.in +0 -0
- {continuous_delivery_scripts-4.2.0 → continuous_delivery_scripts-4.3.0}/continuous_delivery_scripts/__init__.py +0 -0
- {continuous_delivery_scripts-4.2.0 → continuous_delivery_scripts-4.3.0}/continuous_delivery_scripts/assert_news.py +0 -0
- {continuous_delivery_scripts-4.2.0 → continuous_delivery_scripts-4.3.0}/continuous_delivery_scripts/create_news_file.py +0 -0
- {continuous_delivery_scripts-4.2.0 → continuous_delivery_scripts-4.3.0}/continuous_delivery_scripts/detect_secrets.py +0 -0
- {continuous_delivery_scripts-4.2.0 → continuous_delivery_scripts-4.3.0}/continuous_delivery_scripts/generate_docs.py +0 -0
- {continuous_delivery_scripts-4.2.0 → continuous_delivery_scripts-4.3.0}/continuous_delivery_scripts/generate_news.py +0 -0
- {continuous_delivery_scripts-4.2.0 → continuous_delivery_scripts-4.3.0}/continuous_delivery_scripts/get_config.py +0 -0
- {continuous_delivery_scripts-4.2.0 → continuous_delivery_scripts-4.3.0}/continuous_delivery_scripts/get_version.py +0 -0
- {continuous_delivery_scripts-4.2.0 → continuous_delivery_scripts-4.3.0}/continuous_delivery_scripts/language_specifics.py +0 -0
- {continuous_delivery_scripts-4.2.0 → continuous_delivery_scripts-4.3.0}/continuous_delivery_scripts/license_files.py +0 -0
- {continuous_delivery_scripts-4.2.0 → continuous_delivery_scripts-4.3.0}/continuous_delivery_scripts/plugins/BASIC.MD +0 -0
- {continuous_delivery_scripts-4.2.0 → continuous_delivery_scripts-4.3.0}/continuous_delivery_scripts/plugins/CI.MD +0 -0
- {continuous_delivery_scripts-4.2.0 → continuous_delivery_scripts-4.3.0}/continuous_delivery_scripts/plugins/GITHUB_ACTIONS.MD +0 -0
- {continuous_delivery_scripts-4.2.0 → continuous_delivery_scripts-4.3.0}/continuous_delivery_scripts/plugins/GOLAND.MD +0 -0
- {continuous_delivery_scripts-4.2.0 → continuous_delivery_scripts-4.3.0}/continuous_delivery_scripts/plugins/NOOP.MD +0 -0
- {continuous_delivery_scripts-4.2.0 → continuous_delivery_scripts-4.3.0}/continuous_delivery_scripts/plugins/PYTHON.MD +0 -0
- {continuous_delivery_scripts-4.2.0 → continuous_delivery_scripts-4.3.0}/continuous_delivery_scripts/plugins/__init__.py +0 -0
- {continuous_delivery_scripts-4.2.0 → continuous_delivery_scripts-4.3.0}/continuous_delivery_scripts/plugins/basic.py +0 -0
- {continuous_delivery_scripts-4.2.0 → continuous_delivery_scripts-4.3.0}/continuous_delivery_scripts/plugins/ci.py +0 -0
- {continuous_delivery_scripts-4.2.0 → continuous_delivery_scripts-4.3.0}/continuous_delivery_scripts/plugins/docker.py +0 -0
- {continuous_delivery_scripts-4.2.0 → continuous_delivery_scripts-4.3.0}/continuous_delivery_scripts/plugins/github_actions.py +0 -0
- {continuous_delivery_scripts-4.2.0 → continuous_delivery_scripts-4.3.0}/continuous_delivery_scripts/plugins/golang.py +0 -0
- {continuous_delivery_scripts-4.2.0 → continuous_delivery_scripts-4.3.0}/continuous_delivery_scripts/plugins/noop.py +0 -0
- {continuous_delivery_scripts-4.2.0 → continuous_delivery_scripts-4.3.0}/continuous_delivery_scripts/plugins/python.py +0 -0
- {continuous_delivery_scripts-4.2.0 → continuous_delivery_scripts-4.3.0}/continuous_delivery_scripts/report_third_party_ip.py +0 -0
- {continuous_delivery_scripts-4.2.0 → continuous_delivery_scripts-4.3.0}/continuous_delivery_scripts/spdx_report/__init__.py +0 -0
- {continuous_delivery_scripts-4.2.0 → continuous_delivery_scripts-4.3.0}/continuous_delivery_scripts/spdx_report/spdx_dependency.py +0 -0
- {continuous_delivery_scripts-4.2.0 → continuous_delivery_scripts-4.3.0}/continuous_delivery_scripts/spdx_report/spdx_file.py +0 -0
- {continuous_delivery_scripts-4.2.0 → continuous_delivery_scripts-4.3.0}/continuous_delivery_scripts/spdx_report/spdx_helpers.py +0 -0
- {continuous_delivery_scripts-4.2.0 → continuous_delivery_scripts-4.3.0}/continuous_delivery_scripts/spdx_report/spdx_project.py +0 -0
- {continuous_delivery_scripts-4.2.0 → continuous_delivery_scripts-4.3.0}/continuous_delivery_scripts/spdx_report/spdx_summary.py +0 -0
- {continuous_delivery_scripts-4.2.0 → continuous_delivery_scripts-4.3.0}/continuous_delivery_scripts/spdx_report/templates/third_party_IP_report.csv.jinja2 +0 -0
- {continuous_delivery_scripts-4.2.0 → continuous_delivery_scripts-4.3.0}/continuous_delivery_scripts/spdx_report/templates/third_party_IP_report.txt.jinja2 +0 -0
- {continuous_delivery_scripts-4.2.0 → continuous_delivery_scripts-4.3.0}/continuous_delivery_scripts/tag_and_release.py +0 -0
- {continuous_delivery_scripts-4.2.0 → continuous_delivery_scripts-4.3.0}/continuous_delivery_scripts/update_secrets_registry.py +0 -0
- {continuous_delivery_scripts-4.2.0 → continuous_delivery_scripts-4.3.0}/continuous_delivery_scripts/utils/__init__.py +0 -0
- {continuous_delivery_scripts-4.2.0 → continuous_delivery_scripts-4.3.0}/continuous_delivery_scripts/utils/aws_helpers.py +0 -0
- {continuous_delivery_scripts-4.2.0 → continuous_delivery_scripts-4.3.0}/continuous_delivery_scripts/utils/configuration.py +0 -0
- {continuous_delivery_scripts-4.2.0 → continuous_delivery_scripts-4.3.0}/continuous_delivery_scripts/utils/definitions.py +0 -0
- {continuous_delivery_scripts-4.2.0 → continuous_delivery_scripts-4.3.0}/continuous_delivery_scripts/utils/filesystem_helpers.py +0 -0
- {continuous_delivery_scripts-4.2.0 → continuous_delivery_scripts-4.3.0}/continuous_delivery_scripts/utils/git_helpers.py +0 -0
- {continuous_delivery_scripts-4.2.0 → continuous_delivery_scripts-4.3.0}/continuous_delivery_scripts/utils/hash_helpers.py +0 -0
- {continuous_delivery_scripts-4.2.0 → continuous_delivery_scripts-4.3.0}/continuous_delivery_scripts/utils/logging.py +0 -0
- {continuous_delivery_scripts-4.2.0 → continuous_delivery_scripts-4.3.0}/continuous_delivery_scripts/utils/news_file.py +0 -0
- {continuous_delivery_scripts-4.2.0 → continuous_delivery_scripts-4.3.0}/continuous_delivery_scripts/utils/noop/__init__.py +0 -0
- {continuous_delivery_scripts-4.2.0 → continuous_delivery_scripts-4.3.0}/continuous_delivery_scripts/utils/noop/package_helpers.py +0 -0
- {continuous_delivery_scripts-4.2.0 → continuous_delivery_scripts-4.3.0}/continuous_delivery_scripts/utils/package_helpers.py +0 -0
- {continuous_delivery_scripts-4.2.0 → continuous_delivery_scripts-4.3.0}/continuous_delivery_scripts/utils/python/__init__.py +0 -0
- {continuous_delivery_scripts-4.2.0 → continuous_delivery_scripts-4.3.0}/continuous_delivery_scripts/utils/python/package_helpers.py +0 -0
- {continuous_delivery_scripts-4.2.0 → continuous_delivery_scripts-4.3.0}/continuous_delivery_scripts/utils/python/python_helpers.py +0 -0
- {continuous_delivery_scripts-4.2.0 → continuous_delivery_scripts-4.3.0}/continuous_delivery_scripts/utils/string_helpers.py +0 -0
- {continuous_delivery_scripts-4.2.0 → continuous_delivery_scripts-4.3.0}/continuous_delivery_scripts/utils/versioning.py +0 -0
- {continuous_delivery_scripts-4.2.0 → continuous_delivery_scripts-4.3.0}/continuous_delivery_scripts.egg-info/dependency_links.txt +0 -0
- {continuous_delivery_scripts-4.2.0 → continuous_delivery_scripts-4.3.0}/continuous_delivery_scripts.egg-info/requires.txt +0 -0
- {continuous_delivery_scripts-4.2.0 → continuous_delivery_scripts-4.3.0}/continuous_delivery_scripts.egg-info/top_level.txt +0 -0
- {continuous_delivery_scripts-4.2.0 → continuous_delivery_scripts-4.3.0}/pyproject.toml +0 -0
- {continuous_delivery_scripts-4.2.0 → continuous_delivery_scripts-4.3.0}/setup.cfg +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: continuous-delivery-scripts
|
|
3
|
-
Version: 4.
|
|
3
|
+
Version: 4.3.0
|
|
4
4
|
Summary: Git-based CI/CD tools for releases, changelogs, SPDX SBOMs and licence reporting
|
|
5
5
|
Home-page: https://github.com/ARMmbed/continuous-delivery-scripts
|
|
6
6
|
Author: Arm
|
|
@@ -239,17 +239,18 @@ same commands whichever CI system the team chooses.
|
|
|
239
239
|
|
|
240
240
|
| Command | What it does | Key arguments | Typical environment |
|
|
241
241
|
| --- | --- | --- | --- |
|
|
242
|
-
| `cd-assert-news` | Validates a branch's news files; can add a missing file for a configured dependency-update branch. | `--current-branch` (`-b`), `--local` (`-l`) | CI; `--local` for developer checks |
|
|
243
|
-
| `cd-create-news-file` | Creates a one-line news fragment in the configured news directory. | Required news text; `--type` (`-t`), `--ref-number` (`-n`) | Developer |
|
|
244
|
-
| `cd-determine-version` | Calculates and prints the **project's prospective release version** without generating a changelog. | Required `--release-type` (`-t`) | Developer preview or CI |
|
|
245
|
-
| `cd-generate-news` | Updates the project version and, for beta or production releases, builds the changelog from news fragments; prints the resulting version. | Required `--release-type` (`-t`) | CI release flow |
|
|
246
|
-
| `cd-get-config` | Prints a project configuration value. | Either `--key` (`-k`) or `--config-variable` (`-c`) | Developer or CI |
|
|
247
|
-
| `cd-tag-and-release` | Runs the release flow, including documentation, licensing summaries, Git tagging, packaging and publication through the selected [language plugin](./continuous_delivery_scripts/plugins). | Required `--release-type` (`-t`); optional `--current-branch` (`-b`) | CI release flow |
|
|
248
|
-
| `cd-generate-docs` | Generates code documentation in the configured output directory (or one specified on the command line). | `--output_directory` | Developer preview or CI |
|
|
249
|
-
| `cd-generate-spdx` | Generates SPDX documents and third-party licence summaries, then checks licence compliance when project metadata is available. | Required `--output-dir` (`-o`); create the directory first | CI audit; developer review also possible |
|
|
250
|
-
| `cd-
|
|
251
|
-
| `cd-
|
|
252
|
-
| `cd-
|
|
242
|
+
| [`cd-assert-news`](./guides/checking-news-fragments.md) | Validates a branch's news files; can add a missing file for a configured dependency-update branch. | `--current-branch` (`-b`), `--local` (`-l`) | CI; `--local` for developer checks |
|
|
243
|
+
| [`cd-create-news-file`](./guides/creating-news-fragments.md) | Creates a one-line news fragment in the configured news directory. | Required news text; `--type` (`-t`), `--ref-number` (`-n`) | Developer |
|
|
244
|
+
| [`cd-determine-version`](./guides/previewing-versions.md) | Calculates and prints the **project's prospective release version** without generating a changelog. | Required `--release-type` (`-t`) | Developer preview or CI |
|
|
245
|
+
| [`cd-generate-news`](./guides/managing-changelogs.md) | Updates the project version and, for beta or production releases, builds the changelog from news fragments; prints the resulting version. | Required `--release-type` (`-t`) | CI release flow |
|
|
246
|
+
| [`cd-get-config`](./guides/reading-project-configuration.md) | Prints a project configuration value. | Either `--key` (`-k`) or `--config-variable` (`-c`) | Developer or CI |
|
|
247
|
+
| [`cd-tag-and-release`](./guides/automating-releases.md) | Runs the release flow, including documentation, licensing summaries, Git tagging, packaging and publication through the selected [language plugin](./continuous_delivery_scripts/plugins). | Required `--release-type` (`-t`); optional `--current-branch` (`-b`) | CI release flow |
|
|
248
|
+
| [`cd-generate-docs`](./guides/generating-code-documentation.md) | Generates code documentation in the configured output directory (or one specified on the command line). | `--output_directory` | Developer preview or CI |
|
|
249
|
+
| [`cd-generate-spdx`](./guides/generating-an-spdx-sbom.md) | Generates SPDX documents and third-party licence summaries, then checks licence compliance when project metadata is available. | Required `--output-dir` (`-o`); create the directory first | CI audit; developer review also possible |
|
|
250
|
+
| [`cd-check-licence-compliance`](./guides/checking-licence-compliance.md) | Checks project and dependency licences without creating SPDX documents; optionally writes third-party IP summaries. | Optional `--output-dir` (`-o`) for reports | CI gate or developer review |
|
|
251
|
+
| [`cd-license-files`](./guides/licence-header-management.md) | Adds or updates source-file licence and copyright headers when the language plugin supports them. | `--verbose` (`-v`) | Developer or CI |
|
|
252
|
+
| [`cd-record-secrets`](./guides/recording-secrets.md) | Records accepted findings in the project's [detect-secrets](https://github.com/Yelp/detect-secrets) registry. | `--registry-file` (`-r`); defaults to the configured registry | Developer (registry maintenance) |
|
|
253
|
+
| [`cd-detect-secrets`](./guides/checking-for-secrets.md) | Checks Git-tracked files against that registry and fails if new secrets are found. | `--registry-file` (`-r`); defaults to the configured registry | CI; developer checks also possible |
|
|
253
254
|
|
|
254
255
|
For example, `cd-create-news-file "Fix dependency resolution" --type bugfix`
|
|
255
256
|
adds a news fragment. For release workflow details, see the
|
|
@@ -178,17 +178,18 @@ same commands whichever CI system the team chooses.
|
|
|
178
178
|
|
|
179
179
|
| Command | What it does | Key arguments | Typical environment |
|
|
180
180
|
| --- | --- | --- | --- |
|
|
181
|
-
| `cd-assert-news` | Validates a branch's news files; can add a missing file for a configured dependency-update branch. | `--current-branch` (`-b`), `--local` (`-l`) | CI; `--local` for developer checks |
|
|
182
|
-
| `cd-create-news-file` | Creates a one-line news fragment in the configured news directory. | Required news text; `--type` (`-t`), `--ref-number` (`-n`) | Developer |
|
|
183
|
-
| `cd-determine-version` | Calculates and prints the **project's prospective release version** without generating a changelog. | Required `--release-type` (`-t`) | Developer preview or CI |
|
|
184
|
-
| `cd-generate-news` | Updates the project version and, for beta or production releases, builds the changelog from news fragments; prints the resulting version. | Required `--release-type` (`-t`) | CI release flow |
|
|
185
|
-
| `cd-get-config` | Prints a project configuration value. | Either `--key` (`-k`) or `--config-variable` (`-c`) | Developer or CI |
|
|
186
|
-
| `cd-tag-and-release` | Runs the release flow, including documentation, licensing summaries, Git tagging, packaging and publication through the selected [language plugin](./continuous_delivery_scripts/plugins). | Required `--release-type` (`-t`); optional `--current-branch` (`-b`) | CI release flow |
|
|
187
|
-
| `cd-generate-docs` | Generates code documentation in the configured output directory (or one specified on the command line). | `--output_directory` | Developer preview or CI |
|
|
188
|
-
| `cd-generate-spdx` | Generates SPDX documents and third-party licence summaries, then checks licence compliance when project metadata is available. | Required `--output-dir` (`-o`); create the directory first | CI audit; developer review also possible |
|
|
189
|
-
| `cd-
|
|
190
|
-
| `cd-
|
|
191
|
-
| `cd-
|
|
181
|
+
| [`cd-assert-news`](./guides/checking-news-fragments.md) | Validates a branch's news files; can add a missing file for a configured dependency-update branch. | `--current-branch` (`-b`), `--local` (`-l`) | CI; `--local` for developer checks |
|
|
182
|
+
| [`cd-create-news-file`](./guides/creating-news-fragments.md) | Creates a one-line news fragment in the configured news directory. | Required news text; `--type` (`-t`), `--ref-number` (`-n`) | Developer |
|
|
183
|
+
| [`cd-determine-version`](./guides/previewing-versions.md) | Calculates and prints the **project's prospective release version** without generating a changelog. | Required `--release-type` (`-t`) | Developer preview or CI |
|
|
184
|
+
| [`cd-generate-news`](./guides/managing-changelogs.md) | Updates the project version and, for beta or production releases, builds the changelog from news fragments; prints the resulting version. | Required `--release-type` (`-t`) | CI release flow |
|
|
185
|
+
| [`cd-get-config`](./guides/reading-project-configuration.md) | Prints a project configuration value. | Either `--key` (`-k`) or `--config-variable` (`-c`) | Developer or CI |
|
|
186
|
+
| [`cd-tag-and-release`](./guides/automating-releases.md) | Runs the release flow, including documentation, licensing summaries, Git tagging, packaging and publication through the selected [language plugin](./continuous_delivery_scripts/plugins). | Required `--release-type` (`-t`); optional `--current-branch` (`-b`) | CI release flow |
|
|
187
|
+
| [`cd-generate-docs`](./guides/generating-code-documentation.md) | Generates code documentation in the configured output directory (or one specified on the command line). | `--output_directory` | Developer preview or CI |
|
|
188
|
+
| [`cd-generate-spdx`](./guides/generating-an-spdx-sbom.md) | Generates SPDX documents and third-party licence summaries, then checks licence compliance when project metadata is available. | Required `--output-dir` (`-o`); create the directory first | CI audit; developer review also possible |
|
|
189
|
+
| [`cd-check-licence-compliance`](./guides/checking-licence-compliance.md) | Checks project and dependency licences without creating SPDX documents; optionally writes third-party IP summaries. | Optional `--output-dir` (`-o`) for reports | CI gate or developer review |
|
|
190
|
+
| [`cd-license-files`](./guides/licence-header-management.md) | Adds or updates source-file licence and copyright headers when the language plugin supports them. | `--verbose` (`-v`) | Developer or CI |
|
|
191
|
+
| [`cd-record-secrets`](./guides/recording-secrets.md) | Records accepted findings in the project's [detect-secrets](https://github.com/Yelp/detect-secrets) registry. | `--registry-file` (`-r`); defaults to the configured registry | Developer (registry maintenance) |
|
|
192
|
+
| [`cd-detect-secrets`](./guides/checking-for-secrets.md) | Checks Git-tracked files against that registry and fails if new secrets are found. | `--registry-file` (`-r`); defaults to the configured registry | CI; developer checks also possible |
|
|
192
193
|
|
|
193
194
|
For example, `cd-create-news-file "Fix dependency resolution" --type bugfix`
|
|
194
195
|
adds a news fragment. For release workflow details, see the
|
|
@@ -11,8 +11,8 @@ References
|
|
|
11
11
|
This file is autogenerated, do not modify by hand.
|
|
12
12
|
"""
|
|
13
13
|
|
|
14
|
-
__version__ = "4.
|
|
15
|
-
COMMIT = "
|
|
14
|
+
__version__ = "4.3.0"
|
|
15
|
+
COMMIT = "3e8ffc7bd8472928ca195f17fb278d40476ef8a2"
|
|
16
16
|
MAJOR = 4
|
|
17
|
-
MINOR =
|
|
17
|
+
MINOR = 3
|
|
18
18
|
PATCH = 0
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
#
|
|
2
|
+
# Copyright (C) 2020-2026 Arm Limited or its affiliates and Contributors. All rights reserved.
|
|
3
|
+
# SPDX-License-Identifier: Apache-2.0
|
|
4
|
+
#
|
|
5
|
+
"""Check project and dependency licences without generating SPDX documents."""
|
|
6
|
+
|
|
7
|
+
import argparse
|
|
8
|
+
import logging
|
|
9
|
+
import sys
|
|
10
|
+
from pathlib import Path
|
|
11
|
+
|
|
12
|
+
from continuous_delivery_scripts.language_specifics import get_language_specifics
|
|
13
|
+
from continuous_delivery_scripts.utils.logging import log_exception, set_log_level
|
|
14
|
+
|
|
15
|
+
logger = logging.getLogger(__name__)
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
def main() -> int:
|
|
19
|
+
"""Check licence compliance and optionally write third-party IP summaries."""
|
|
20
|
+
parser = argparse.ArgumentParser(description="Check project and dependency licence compliance.")
|
|
21
|
+
parser.add_argument(
|
|
22
|
+
"-o",
|
|
23
|
+
"--output-dir",
|
|
24
|
+
type=Path,
|
|
25
|
+
help="Write third-party IP summaries to this existing directory (no SPDX documents).",
|
|
26
|
+
)
|
|
27
|
+
parser.add_argument("-v", "--verbose", action="count", default=0, help="Increase logging verbosity.")
|
|
28
|
+
args = parser.parse_args()
|
|
29
|
+
set_log_level(args.verbose)
|
|
30
|
+
|
|
31
|
+
try:
|
|
32
|
+
plugin = get_language_specifics()
|
|
33
|
+
if not plugin.can_get_project_metadata():
|
|
34
|
+
raise ValueError("The selected language plugin cannot provide metadata for licence compliance checks.")
|
|
35
|
+
project = plugin.get_current_spdx_project()
|
|
36
|
+
if project is None:
|
|
37
|
+
raise ValueError("The selected language plugin did not return a project for licence compliance checks.")
|
|
38
|
+
if args.output_dir is not None:
|
|
39
|
+
project.generate_licensing_summary(args.output_dir)
|
|
40
|
+
project.check_licence_compliance()
|
|
41
|
+
return 0
|
|
42
|
+
except Exception as error:
|
|
43
|
+
log_exception(logger, error)
|
|
44
|
+
return 1
|
|
45
|
+
|
|
46
|
+
|
|
47
|
+
if __name__ == "__main__":
|
|
48
|
+
sys.exit(main())
|
|
@@ -6,6 +6,7 @@
|
|
|
6
6
|
|
|
7
7
|
from pathlib import Path
|
|
8
8
|
from typing import TYPE_CHECKING, List, Optional
|
|
9
|
+
from urllib.parse import urlsplit
|
|
9
10
|
|
|
10
11
|
from continuous_delivery_scripts.spdx_report.spdx_dependency import (
|
|
11
12
|
DependencySpdxDocumentRef,
|
|
@@ -24,6 +25,7 @@ from continuous_delivery_scripts.utils.configuration import (
|
|
|
24
25
|
)
|
|
25
26
|
from continuous_delivery_scripts.utils.hash_helpers import generate_uuid_based_on_str
|
|
26
27
|
from continuous_delivery_scripts.utils.package_helpers import PackageMetadata
|
|
28
|
+
from continuous_delivery_scripts.utils.third_party_licences import LICENSE_REF_PROPRIETARY
|
|
27
29
|
|
|
28
30
|
if TYPE_CHECKING:
|
|
29
31
|
from spdx.document import Document
|
|
@@ -230,7 +232,7 @@ class SpdxDocument:
|
|
|
230
232
|
the corresponding document
|
|
231
233
|
"""
|
|
232
234
|
from spdx.creationinfo import Person, Organization, Tool
|
|
233
|
-
from spdx.document import Document, License
|
|
235
|
+
from spdx.document import Document, ExtractedLicense, License
|
|
234
236
|
from spdx.review import Review
|
|
235
237
|
from spdx.version import Version
|
|
236
238
|
|
|
@@ -262,7 +264,35 @@ class SpdxDocument:
|
|
|
262
264
|
# be described in a file and hence, all dependencies are described
|
|
263
265
|
# in separate files. Find out what to do with dependencies when new
|
|
264
266
|
# tools are released as it is not entirely clear in the specification
|
|
265
|
-
|
|
267
|
+
spdx_package = self.generate_spdx_package()
|
|
268
|
+
doc.package = spdx_package.generate_spdx_package()
|
|
269
|
+
if LICENSE_REF_PROPRIETARY in spdx_package.main_licence or LICENSE_REF_PROPRIETARY in spdx_package.licence:
|
|
270
|
+
proprietary_licence = ExtractedLicense(LICENSE_REF_PROPRIETARY)
|
|
271
|
+
proprietary_licence.full_name = "Proprietary licence"
|
|
272
|
+
proprietary_licence.text = "Proprietary licence terms are not included in this SPDX document."
|
|
273
|
+
proprietary_licence.comment = (
|
|
274
|
+
"This is a locally defined licence reference, not an SPDX License List identifier. "
|
|
275
|
+
"See https://spdx.github.io/spdx-spec/v2.3/other-licensing-information-detected/ "
|
|
276
|
+
"for the LicenseRef format; consult the rights holder for the licence terms."
|
|
277
|
+
)
|
|
278
|
+
if LICENSE_REF_PROPRIETARY in spdx_package.main_licence:
|
|
279
|
+
licence_urls = {
|
|
280
|
+
evidence.get("path", "")
|
|
281
|
+
for evidence in self._package_metadata.licence_evidence
|
|
282
|
+
if evidence.get("kind") == "licence"
|
|
283
|
+
}
|
|
284
|
+
for url in sorted(licence_urls):
|
|
285
|
+
try:
|
|
286
|
+
parsed_url = urlsplit(url)
|
|
287
|
+
except ValueError:
|
|
288
|
+
continue
|
|
289
|
+
if (
|
|
290
|
+
parsed_url.scheme in ("http", "https")
|
|
291
|
+
and parsed_url.netloc
|
|
292
|
+
and not any(c.isspace() for c in url)
|
|
293
|
+
):
|
|
294
|
+
proprietary_licence.add_xref(url)
|
|
295
|
+
doc.add_extr_lic(proprietary_licence)
|
|
266
296
|
|
|
267
297
|
for external_reference in self.external_refs:
|
|
268
298
|
doc.add_ext_document_reference(external_reference.generate_external_reference())
|
|
@@ -20,6 +20,7 @@ from continuous_delivery_scripts.spdx_report.spdx_helpers import (
|
|
|
20
20
|
from continuous_delivery_scripts.utils.definitions import UNKNOWN
|
|
21
21
|
from continuous_delivery_scripts.utils.package_helpers import PackageMetadata
|
|
22
22
|
from continuous_delivery_scripts.utils.third_party_licences import (
|
|
23
|
+
LICENSE_REF_PROPRIETARY,
|
|
23
24
|
UNKNOWN_LICENCE,
|
|
24
25
|
cleanse_licence_expression,
|
|
25
26
|
is_licence_accepted,
|
|
@@ -141,7 +142,14 @@ class SpdxPackage:
|
|
|
141
142
|
@property
|
|
142
143
|
def is_main_licence_accepted(self) -> bool:
|
|
143
144
|
"""States whether the main licence of the package is part of the accepted licence list."""
|
|
144
|
-
return bool(is_licence_accepted(self.main_licence))
|
|
145
|
+
return bool(is_licence_accepted(self.main_licence, self._project_licence_refs))
|
|
146
|
+
|
|
147
|
+
@property
|
|
148
|
+
def _project_licence_refs(self) -> List[str]:
|
|
149
|
+
"""Allow the project's own proprietary licence without permitting it for dependencies."""
|
|
150
|
+
if not self._is_dependency and LICENSE_REF_PROPRIETARY in self.main_licence:
|
|
151
|
+
return [LICENSE_REF_PROPRIETARY]
|
|
152
|
+
return []
|
|
145
153
|
|
|
146
154
|
@property
|
|
147
155
|
def licence(self) -> str:
|
|
@@ -162,7 +170,7 @@ class SpdxPackage:
|
|
|
162
170
|
@property
|
|
163
171
|
def is_licence_accepted(self) -> bool:
|
|
164
172
|
"""States whether the actual package's licence of the package is part of the accepted licence list."""
|
|
165
|
-
return bool(is_licence_accepted(self.licence))
|
|
173
|
+
return bool(is_licence_accepted(self.licence, self._project_licence_refs))
|
|
166
174
|
|
|
167
175
|
@property
|
|
168
176
|
def author(self) -> str:
|
|
@@ -49,6 +49,9 @@
|
|
|
49
49
|
.hero .meta { margin: .75rem 0 0; color: #e5f2f5; }
|
|
50
50
|
main { padding-block: 2rem 4rem; }
|
|
51
51
|
.page-nav { display: flex; flex-wrap: wrap; gap: 1rem; margin-bottom: 2rem; }
|
|
52
|
+
.download-links { display: flex; flex-wrap: wrap; gap: .75rem; }
|
|
53
|
+
.download-link { display: inline-flex; align-items: center; min-height: 2.75rem; padding: .5rem .9rem; border: 1px solid var(--accent); border-radius: .5rem; background: var(--surface); font-weight: 650; text-decoration: none; }
|
|
54
|
+
.download-link:hover { background: var(--background); text-decoration: underline; }
|
|
52
55
|
section { margin-bottom: 2.75rem; }
|
|
53
56
|
h2 { margin: 0 0 1rem; font-size: 1.5rem; }
|
|
54
57
|
h3 { margin: 0 0 .5rem; font-size: 1.05rem; }
|
|
@@ -118,6 +121,15 @@
|
|
|
118
121
|
<a href="#dependency-summary">Dependency summary</a>
|
|
119
122
|
<a href="#package-licences">Package licences</a>
|
|
120
123
|
</nav>
|
|
124
|
+
<section class="panel" aria-labelledby="downloads-heading">
|
|
125
|
+
<h2 id="downloads-heading">Download this report</h2>
|
|
126
|
+
<p>Choose a format for further analysis or sharing.</p>
|
|
127
|
+
<div class="download-links">
|
|
128
|
+
<a class="download-link" href="third_party_IP_report.csv" download="third_party_IP_report.csv">Download CSV</a>
|
|
129
|
+
<a class="download-link" href="third_party_IP_report.json" download="third_party_IP_report.json">Download JSON</a>
|
|
130
|
+
<a class="download-link" href="third_party_IP_report.txt" download="third_party_IP_report.txt">Download text</a>
|
|
131
|
+
</div>
|
|
132
|
+
</section>
|
|
121
133
|
<section id="summary" aria-labelledby="summary-heading">
|
|
122
134
|
<h2 id="summary-heading">Summary</h2>
|
|
123
135
|
<div class="summary-grid">
|
|
@@ -15,6 +15,7 @@ from continuous_delivery_scripts.utils.configuration import (
|
|
|
15
15
|
)
|
|
16
16
|
from continuous_delivery_scripts.utils.definitions import CommitType
|
|
17
17
|
from continuous_delivery_scripts.utils.git_helpers import GitWrapper
|
|
18
|
+
from continuous_delivery_scripts.utils.third_party_licences import normalise_proprietary_licence
|
|
18
19
|
|
|
19
20
|
if TYPE_CHECKING:
|
|
20
21
|
from continuous_delivery_scripts.spdx_report.spdx_project import SpdxProject
|
|
@@ -35,7 +36,9 @@ SPDX-License-Identifier: {licence_identifier}
|
|
|
35
36
|
def _generate_generic_licence_header_template() -> str:
|
|
36
37
|
"""Generates the header template which is put at the top of source files."""
|
|
37
38
|
return GENERIC_LICENCE_HEADER_TEMPLATE.format(
|
|
38
|
-
licence_identifier=
|
|
39
|
+
licence_identifier=normalise_proprietary_licence(
|
|
40
|
+
str(configuration.get_value(ConfigurationVariable.FILE_LICENCE_IDENTIFIER))
|
|
41
|
+
),
|
|
39
42
|
author="${owner}",
|
|
40
43
|
date="${years}",
|
|
41
44
|
)
|
|
@@ -48,6 +48,16 @@ UNKNOWN_LICENCE = Licence(
|
|
|
48
48
|
url="Unknown",
|
|
49
49
|
reference="Unknown",
|
|
50
50
|
)
|
|
51
|
+
LICENSE_REF_PROPRIETARY = "LicenseRef-Proprietary"
|
|
52
|
+
PROPRIETARY_LICENCE = Licence(
|
|
53
|
+
reference_number="",
|
|
54
|
+
identifier=LICENSE_REF_PROPRIETARY,
|
|
55
|
+
name="Proprietary licence",
|
|
56
|
+
is_deprecated=False,
|
|
57
|
+
is_osi_approved=False,
|
|
58
|
+
url="",
|
|
59
|
+
reference="",
|
|
60
|
+
)
|
|
51
61
|
|
|
52
62
|
LICENCE_LIKELIHOOD_THRESHOLD = 0.5
|
|
53
63
|
|
|
@@ -260,6 +270,10 @@ class OpenSourceLicences:
|
|
|
260
270
|
|
|
261
271
|
def get_licence(self, licence_descriptor: Optional[str]) -> Optional[Licence]:
|
|
262
272
|
"""Determines the licence based on a string descriptor e.g. Apache 2."""
|
|
273
|
+
if licence_descriptor and normalise_proprietary_licence(licence_descriptor) == LICENSE_REF_PROPRIETARY:
|
|
274
|
+
return PROPRIETARY_LICENCE
|
|
275
|
+
if licence_descriptor and licence_descriptor.lower().startswith("licenseref-"):
|
|
276
|
+
return None
|
|
263
277
|
self.load()
|
|
264
278
|
if not self._licence_store or not self._licence_list or not licence_descriptor:
|
|
265
279
|
return None
|
|
@@ -286,14 +300,28 @@ class OpenSourceLicences:
|
|
|
286
300
|
OPENSOURCE_LICENCES = OpenSourceLicences()
|
|
287
301
|
|
|
288
302
|
|
|
303
|
+
def normalise_proprietary_licence(licence_expression: str) -> str:
|
|
304
|
+
"""Use a stable SPDX licence reference for proprietary declarations."""
|
|
305
|
+
return re.sub(
|
|
306
|
+
r"(?<![\w-])(?:LicenseRef-)?Proprietary(?:\s+Licen[cs]e)?(?![\w-])",
|
|
307
|
+
LICENSE_REF_PROPRIETARY,
|
|
308
|
+
licence_expression,
|
|
309
|
+
flags=re.IGNORECASE,
|
|
310
|
+
)
|
|
311
|
+
|
|
312
|
+
|
|
289
313
|
def cleanse_licence_expression(licence_expression: str) -> str:
|
|
290
314
|
"""Cleanses a licence expression by using SPDX identifiers when possible.
|
|
291
315
|
|
|
292
316
|
A licence expression can be a combination of licences and in a lot of cases is free-form text.
|
|
293
317
|
The idea is to return an equivalent expression but using SPDX identifiers when possible.
|
|
294
318
|
"""
|
|
295
|
-
simplified_expression = _parse_licence_expression(
|
|
319
|
+
simplified_expression = _parse_licence_expression(
|
|
320
|
+
Licensing(), normalise_proprietary_licence(licence_expression)
|
|
321
|
+
).simplify()
|
|
296
322
|
for s in simplified_expression.symbols:
|
|
323
|
+
if s.key.startswith("LicenseRef-"):
|
|
324
|
+
continue
|
|
297
325
|
corresponding_licence = OPENSOURCE_LICENCES.get_licence(s.key)
|
|
298
326
|
if corresponding_licence:
|
|
299
327
|
s.key = corresponding_licence.identifier
|
|
@@ -301,6 +329,9 @@ def cleanse_licence_expression(licence_expression: str) -> str:
|
|
|
301
329
|
|
|
302
330
|
|
|
303
331
|
def _iter_matching_licences(desc: str) -> Iterable[Licence]:
|
|
332
|
+
if normalise_proprietary_licence(desc.strip()) == LICENSE_REF_PROPRIETARY:
|
|
333
|
+
yield PROPRIETARY_LICENCE
|
|
334
|
+
return
|
|
304
335
|
licence = OPENSOURCE_LICENCES.get_licence(desc)
|
|
305
336
|
if licence:
|
|
306
337
|
yield licence
|
|
@@ -342,7 +373,7 @@ def get_allowed_opensource_licences() -> Iterable[Licence]:
|
|
|
342
373
|
|
|
343
374
|
def simplify_licence_expression(licence_expression: str) -> str:
|
|
344
375
|
"""Simplifies a licence expression."""
|
|
345
|
-
return str(_parse_licence_expression(Licensing(), licence_expression).simplify())
|
|
376
|
+
return str(_parse_licence_expression(Licensing(), normalise_proprietary_licence(licence_expression)).simplify())
|
|
346
377
|
|
|
347
378
|
|
|
348
379
|
def determine_licence_compound(main_licence: str, additional_licences: List[str]) -> str:
|
|
@@ -374,9 +405,10 @@ def _is_expression_or(licence_expression: str) -> bool:
|
|
|
374
405
|
return isinstance(_parse_licence_expression(licensing_util, licence_expression), OR)
|
|
375
406
|
|
|
376
407
|
|
|
377
|
-
def is_licence_accepted(licence_expression: str) -> bool:
|
|
408
|
+
def is_licence_accepted(licence_expression: str, additional_identifiers: Iterable[str] = ()) -> bool:
|
|
378
409
|
"""Determines whether the licence expressed is valid with regards to project's accepted licences."""
|
|
379
410
|
authorised_licences = [licence.identifier for licence in get_allowed_opensource_licences()]
|
|
411
|
+
authorised_licences.extend(additional_identifiers)
|
|
380
412
|
is_or = _is_expression_or(licence_expression)
|
|
381
413
|
if bool([licence for licence in determine_licences_not_in_list(licence_expression, iter(authorised_licences))]):
|
|
382
414
|
return (
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: continuous-delivery-scripts
|
|
3
|
-
Version: 4.
|
|
3
|
+
Version: 4.3.0
|
|
4
4
|
Summary: Git-based CI/CD tools for releases, changelogs, SPDX SBOMs and licence reporting
|
|
5
5
|
Home-page: https://github.com/ARMmbed/continuous-delivery-scripts
|
|
6
6
|
Author: Arm
|
|
@@ -239,17 +239,18 @@ same commands whichever CI system the team chooses.
|
|
|
239
239
|
|
|
240
240
|
| Command | What it does | Key arguments | Typical environment |
|
|
241
241
|
| --- | --- | --- | --- |
|
|
242
|
-
| `cd-assert-news` | Validates a branch's news files; can add a missing file for a configured dependency-update branch. | `--current-branch` (`-b`), `--local` (`-l`) | CI; `--local` for developer checks |
|
|
243
|
-
| `cd-create-news-file` | Creates a one-line news fragment in the configured news directory. | Required news text; `--type` (`-t`), `--ref-number` (`-n`) | Developer |
|
|
244
|
-
| `cd-determine-version` | Calculates and prints the **project's prospective release version** without generating a changelog. | Required `--release-type` (`-t`) | Developer preview or CI |
|
|
245
|
-
| `cd-generate-news` | Updates the project version and, for beta or production releases, builds the changelog from news fragments; prints the resulting version. | Required `--release-type` (`-t`) | CI release flow |
|
|
246
|
-
| `cd-get-config` | Prints a project configuration value. | Either `--key` (`-k`) or `--config-variable` (`-c`) | Developer or CI |
|
|
247
|
-
| `cd-tag-and-release` | Runs the release flow, including documentation, licensing summaries, Git tagging, packaging and publication through the selected [language plugin](./continuous_delivery_scripts/plugins). | Required `--release-type` (`-t`); optional `--current-branch` (`-b`) | CI release flow |
|
|
248
|
-
| `cd-generate-docs` | Generates code documentation in the configured output directory (or one specified on the command line). | `--output_directory` | Developer preview or CI |
|
|
249
|
-
| `cd-generate-spdx` | Generates SPDX documents and third-party licence summaries, then checks licence compliance when project metadata is available. | Required `--output-dir` (`-o`); create the directory first | CI audit; developer review also possible |
|
|
250
|
-
| `cd-
|
|
251
|
-
| `cd-
|
|
252
|
-
| `cd-
|
|
242
|
+
| [`cd-assert-news`](./guides/checking-news-fragments.md) | Validates a branch's news files; can add a missing file for a configured dependency-update branch. | `--current-branch` (`-b`), `--local` (`-l`) | CI; `--local` for developer checks |
|
|
243
|
+
| [`cd-create-news-file`](./guides/creating-news-fragments.md) | Creates a one-line news fragment in the configured news directory. | Required news text; `--type` (`-t`), `--ref-number` (`-n`) | Developer |
|
|
244
|
+
| [`cd-determine-version`](./guides/previewing-versions.md) | Calculates and prints the **project's prospective release version** without generating a changelog. | Required `--release-type` (`-t`) | Developer preview or CI |
|
|
245
|
+
| [`cd-generate-news`](./guides/managing-changelogs.md) | Updates the project version and, for beta or production releases, builds the changelog from news fragments; prints the resulting version. | Required `--release-type` (`-t`) | CI release flow |
|
|
246
|
+
| [`cd-get-config`](./guides/reading-project-configuration.md) | Prints a project configuration value. | Either `--key` (`-k`) or `--config-variable` (`-c`) | Developer or CI |
|
|
247
|
+
| [`cd-tag-and-release`](./guides/automating-releases.md) | Runs the release flow, including documentation, licensing summaries, Git tagging, packaging and publication through the selected [language plugin](./continuous_delivery_scripts/plugins). | Required `--release-type` (`-t`); optional `--current-branch` (`-b`) | CI release flow |
|
|
248
|
+
| [`cd-generate-docs`](./guides/generating-code-documentation.md) | Generates code documentation in the configured output directory (or one specified on the command line). | `--output_directory` | Developer preview or CI |
|
|
249
|
+
| [`cd-generate-spdx`](./guides/generating-an-spdx-sbom.md) | Generates SPDX documents and third-party licence summaries, then checks licence compliance when project metadata is available. | Required `--output-dir` (`-o`); create the directory first | CI audit; developer review also possible |
|
|
250
|
+
| [`cd-check-licence-compliance`](./guides/checking-licence-compliance.md) | Checks project and dependency licences without creating SPDX documents; optionally writes third-party IP summaries. | Optional `--output-dir` (`-o`) for reports | CI gate or developer review |
|
|
251
|
+
| [`cd-license-files`](./guides/licence-header-management.md) | Adds or updates source-file licence and copyright headers when the language plugin supports them. | `--verbose` (`-v`) | Developer or CI |
|
|
252
|
+
| [`cd-record-secrets`](./guides/recording-secrets.md) | Records accepted findings in the project's [detect-secrets](https://github.com/Yelp/detect-secrets) registry. | `--registry-file` (`-r`); defaults to the configured registry | Developer (registry maintenance) |
|
|
253
|
+
| [`cd-detect-secrets`](./guides/checking-for-secrets.md) | Checks Git-tracked files against that registry and fails if new secrets are found. | `--registry-file` (`-r`); defaults to the configured registry | CI; developer checks also possible |
|
|
253
254
|
|
|
254
255
|
For example, `cd-create-news-file "Fix dependency resolution" --type bugfix`
|
|
255
256
|
adds a news fragment. For release workflow details, see the
|
|
@@ -7,6 +7,7 @@ setup.py
|
|
|
7
7
|
continuous_delivery_scripts/__init__.py
|
|
8
8
|
continuous_delivery_scripts/_version.py
|
|
9
9
|
continuous_delivery_scripts/assert_news.py
|
|
10
|
+
continuous_delivery_scripts/check_licence_compliance.py
|
|
10
11
|
continuous_delivery_scripts/create_news_file.py
|
|
11
12
|
continuous_delivery_scripts/detect_secrets.py
|
|
12
13
|
continuous_delivery_scripts/generate_docs.py
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
[console_scripts]
|
|
2
2
|
cd-assert-news = continuous_delivery_scripts.assert_news:main
|
|
3
|
+
cd-check-licence-compliance = continuous_delivery_scripts.check_licence_compliance:main
|
|
3
4
|
cd-create-news-file = continuous_delivery_scripts.create_news_file:main
|
|
4
5
|
cd-detect-secrets = continuous_delivery_scripts.detect_secrets:main
|
|
5
6
|
cd-determine-version = continuous_delivery_scripts.get_version:main
|
|
@@ -50,6 +50,7 @@ setup(
|
|
|
50
50
|
f"cd-get-config={SOURCE_DIR}.get_config:main",
|
|
51
51
|
f"cd-license-files={SOURCE_DIR}.license_files:main",
|
|
52
52
|
f"cd-generate-spdx={SOURCE_DIR}.report_third_party_ip:main",
|
|
53
|
+
f"cd-check-licence-compliance={SOURCE_DIR}.check_licence_compliance:main",
|
|
53
54
|
f"cd-detect-secrets={SOURCE_DIR}.detect_secrets:main",
|
|
54
55
|
f"cd-record-secrets={SOURCE_DIR}.update_secrets_registry:main",
|
|
55
56
|
]
|
{continuous_delivery_scripts-4.2.0 → continuous_delivery_scripts-4.3.0}/spdx-tmp/GitPython.spdx
RENAMED
|
@@ -12,7 +12,7 @@ DocumentComment: <text>This document was created automatically using available p
|
|
|
12
12
|
|
|
13
13
|
Creator: Tool: mbed-spdx-generator
|
|
14
14
|
Creator: Person: unknown (Sebastian Thiel <byronimo@gmail.com>, Michael Trier <mtrier@gmail.com>)
|
|
15
|
-
Created: 2026-
|
|
15
|
+
Created: 2026-10-01T09:28:53Z
|
|
16
16
|
|
|
17
17
|
|
|
18
18
|
# Package
|
|
@@ -12,7 +12,7 @@ DocumentComment: <text>This document was created automatically using available p
|
|
|
12
12
|
|
|
13
13
|
Creator: Tool: mbed-spdx-generator
|
|
14
14
|
Creator: Person: unknown (Mike Bayer <mike@zzzcomputing.com>)
|
|
15
|
-
Created: 2026-
|
|
15
|
+
Created: 2026-10-01T09:28:53Z
|
|
16
16
|
|
|
17
17
|
|
|
18
18
|
# Package
|
{continuous_delivery_scripts-4.2.0 → continuous_delivery_scripts-4.3.0}/spdx-tmp/Markdown.spdx
RENAMED
|
@@ -12,7 +12,7 @@ DocumentComment: <text>This document was created automatically using available p
|
|
|
12
12
|
|
|
13
13
|
Creator: Person: Manfred Stienstra, Yuri Takhteyev (Waylan limberg <python.markdown@gmail.com>)
|
|
14
14
|
Creator: Tool: mbed-spdx-generator
|
|
15
|
-
Created: 2026-
|
|
15
|
+
Created: 2026-10-01T09:28:53Z
|
|
16
16
|
|
|
17
17
|
|
|
18
18
|
# Package
|
{continuous_delivery_scripts-4.2.0 → continuous_delivery_scripts-4.3.0}/spdx-tmp/PyYAML.spdx
RENAMED
|
@@ -12,7 +12,7 @@ DocumentComment: <text>This document was created automatically using available p
|
|
|
12
12
|
|
|
13
13
|
Creator: Person: Kirill Simonov (xi@resolvent.net)
|
|
14
14
|
Creator: Tool: mbed-spdx-generator
|
|
15
|
-
Created: 2026-
|
|
15
|
+
Created: 2026-10-01T09:28:53Z
|
|
16
16
|
|
|
17
17
|
|
|
18
18
|
# Package
|
{continuous_delivery_scripts-4.2.0 → continuous_delivery_scripts-4.3.0}/spdx-tmp/Pygments.spdx
RENAMED
|
@@ -12,7 +12,7 @@ DocumentComment: <text>This document was created automatically using available p
|
|
|
12
12
|
|
|
13
13
|
Creator: Tool: mbed-spdx-generator
|
|
14
14
|
Creator: Person: unknown (Georg Brandl <georg@python.org>)
|
|
15
|
-
Created: 2026-
|
|
15
|
+
Created: 2026-10-01T09:28:53Z
|
|
16
16
|
|
|
17
17
|
|
|
18
18
|
# Package
|
{continuous_delivery_scripts-4.2.0 → continuous_delivery_scripts-4.3.0}/spdx-tmp/SecretStorage.spdx
RENAMED
|
@@ -12,7 +12,7 @@ DocumentComment: <text>This document was created automatically using available p
|
|
|
12
12
|
|
|
13
13
|
Creator: Tool: mbed-spdx-generator
|
|
14
14
|
Creator: Person: unknown (Dmitry Shachnev <mitya57@gmail.com>)
|
|
15
|
-
Created: 2026-
|
|
15
|
+
Created: 2026-10-01T09:28:53Z
|
|
16
16
|
|
|
17
17
|
|
|
18
18
|
# Package
|
{continuous_delivery_scripts-4.2.0 → continuous_delivery_scripts-4.3.0}/spdx-tmp/boolean.py.spdx
RENAMED
|
@@ -12,7 +12,7 @@ DocumentComment: <text>This document was created automatically using available p
|
|
|
12
12
|
|
|
13
13
|
Creator: Person: Sebastian Kraemer (basti.kr@gmail.com)
|
|
14
14
|
Creator: Tool: mbed-spdx-generator
|
|
15
|
-
Created: 2026-
|
|
15
|
+
Created: 2026-10-01T09:28:53Z
|
|
16
16
|
|
|
17
17
|
|
|
18
18
|
# Package
|
|
@@ -2,9 +2,9 @@
|
|
|
2
2
|
|
|
3
3
|
SPDXVersion: SPDX-1.2
|
|
4
4
|
DataLicense: CC0-1.0
|
|
5
|
-
DocumentName: boto3-1.43.
|
|
5
|
+
DocumentName: boto3-1.43.106
|
|
6
6
|
SPDXID: SPDXRef-DOCUMENT
|
|
7
|
-
DocumentNamespace: http://spdx.org/spdxdocs/boto3-1.43.
|
|
7
|
+
DocumentNamespace: http://spdx.org/spdxdocs/boto3-1.43.106-5312fb83-fdd6-b8dc-38af-244f66958ad3
|
|
8
8
|
DocumentComment: <text>This document was created automatically using available project and dependency information.</text>
|
|
9
9
|
|
|
10
10
|
|
|
@@ -12,14 +12,14 @@ DocumentComment: <text>This document was created automatically using available p
|
|
|
12
12
|
|
|
13
13
|
Creator: Person: Amazon Web Services (unknown)
|
|
14
14
|
Creator: Tool: mbed-spdx-generator
|
|
15
|
-
Created: 2026-
|
|
15
|
+
Created: 2026-10-01T09:28:53Z
|
|
16
16
|
|
|
17
17
|
|
|
18
18
|
# Package
|
|
19
19
|
|
|
20
20
|
PackageName: boto3
|
|
21
21
|
SPDXID: SPDXRef-boto3
|
|
22
|
-
PackageVersion: 1.43.
|
|
22
|
+
PackageVersion: 1.43.106
|
|
23
23
|
PackageDownloadLocation: NONE
|
|
24
24
|
PackageSummary: <text>The AWS SDK for Python (Boto3)</text>
|
|
25
25
|
PackageFileName: boto3
|
{continuous_delivery_scripts-4.2.0 → continuous_delivery_scripts-4.3.0}/spdx-tmp/botocore.spdx
RENAMED
|
@@ -2,9 +2,9 @@
|
|
|
2
2
|
|
|
3
3
|
SPDXVersion: SPDX-1.2
|
|
4
4
|
DataLicense: CC0-1.0
|
|
5
|
-
DocumentName: botocore-1.43.
|
|
5
|
+
DocumentName: botocore-1.43.106
|
|
6
6
|
SPDXID: SPDXRef-DOCUMENT
|
|
7
|
-
DocumentNamespace: http://spdx.org/spdxdocs/botocore-1.43.
|
|
7
|
+
DocumentNamespace: http://spdx.org/spdxdocs/botocore-1.43.106-10e147fd-3ba0-1292-77d7-1e630c192997
|
|
8
8
|
DocumentComment: <text>This document was created automatically using available project and dependency information.</text>
|
|
9
9
|
|
|
10
10
|
|
|
@@ -12,14 +12,14 @@ DocumentComment: <text>This document was created automatically using available p
|
|
|
12
12
|
|
|
13
13
|
Creator: Person: Amazon Web Services (unknown)
|
|
14
14
|
Creator: Tool: mbed-spdx-generator
|
|
15
|
-
Created: 2026-
|
|
15
|
+
Created: 2026-10-01T09:28:53Z
|
|
16
16
|
|
|
17
17
|
|
|
18
18
|
# Package
|
|
19
19
|
|
|
20
20
|
PackageName: botocore
|
|
21
21
|
SPDXID: SPDXRef-botocore
|
|
22
|
-
PackageVersion: 1.43.
|
|
22
|
+
PackageVersion: 1.43.106
|
|
23
23
|
PackageDownloadLocation: NONE
|
|
24
24
|
PackageSummary: <text>Low-level, data-driven core of boto 3.</text>
|
|
25
25
|
PackageFileName: botocore
|
{continuous_delivery_scripts-4.2.0 → continuous_delivery_scripts-4.3.0}/spdx-tmp/bracex.spdx
RENAMED
|
@@ -12,7 +12,7 @@ DocumentComment: <text>This document was created automatically using available p
|
|
|
12
12
|
|
|
13
13
|
Creator: Tool: mbed-spdx-generator
|
|
14
14
|
Creator: Person: unknown (Isaac Muse <Isaac.Muse@gmail.com>)
|
|
15
|
-
Created: 2026-
|
|
15
|
+
Created: 2026-10-01T09:28:53Z
|
|
16
16
|
|
|
17
17
|
|
|
18
18
|
# Package
|