Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
78 commits
Select commit Hold shift + click to select a range
9c14ee6
feat: use only nonGPL dependencies (#854)
jkowalleck Jul 20, 2025
2cfb3d6
chore(release): 10.5.0
Jul 20, 2025
4842828
feat!: ignore unknown properties when deserializing (#853)
jkowalleck Jul 21, 2025
6b91494
refactor: explicitely ignore json-implementation's format hints
jkowalleck Jul 21, 2025
17046d4
chore(release): 11.0.0
Jul 21, 2025
d801c2c
chore(deps-dev): update mypy requirement from 1.16.1 to 1.17.0 (#855)
dependabot[bot] Jul 21, 2025
ea627ec
docs: update linked XML spec (#857)
jkowalleck Jul 22, 2025
ba0b5c0
docs: update CDX spec links (#858)
jkowalleck Jul 22, 2025
0ecdaa8
docs: update linked CDX spec (#860)
jkowalleck Jul 22, 2025
5621705
docs: shorten lines
jkowalleck Jul 22, 2025
0898cf7
feat: add BomRefs for known models according to CycloneDX 1.5 (#859)
jkowalleck Jul 23, 2025
6b3f526
chore(deps-dev): update coverage requirement from 7.9.2 to 7.10.1 (#865)
dependabot[bot] Aug 5, 2025
2e300a6
chore(deps-dev): update mypy requirement from 1.17.0 to 1.17.1 (#868)
dependabot[bot] Aug 5, 2025
a6e157f
chore(deps-dev): update tox requirement from 4.27.0 to 4.28.4 (#867)
dependabot[bot] Aug 5, 2025
10f6d32
chore(deps-dev): update deptry requirement from 0.23.0 to 0.23.1 (#866)
dependabot[bot] Aug 5, 2025
03567ae
chore(deps-dev): update coverage requirement from 7.10.1 to 7.10.2 (#…
dependabot[bot] Aug 12, 2025
e51a8c9
chore(deps): bump actions/download-artifact from 4 to 5 (#873)
dependabot[bot] Aug 15, 2025
eedfe08
chore(deps): bump actions/checkout from 4 to 5 (#875)
dependabot[bot] Aug 18, 2025
bbd31ff
test: fix slow tests and add timing reports (#880)
jkowalleck Sep 2, 2025
6d35f69
chore(deps-dev): update tox requirement from 4.28.4 to 4.29.0 (#879)
dependabot[bot] Sep 2, 2025
98c9a63
chore(deps-dev): update coverage requirement from 7.10.2 to 7.10.6 (#…
dependabot[bot] Sep 2, 2025
631fbf3
chore(deps): bump actions/setup-python from 5 to 6 (#882)
dependabot[bot] Sep 7, 2025
505a85d
chore(deps-dev): update tox requirement from 4.29.0 to 4.30.2 (#884)
dependabot[bot] Sep 8, 2025
876a364
feat: Updating SPDX license list to 3.27.0 (#885)
jkowalleck Sep 9, 2025
6e77bf7
chore(release): 11.1.0
Sep 9, 2025
ac06361
chore(deps-dev): update mypy requirement from 1.17.1 to 1.18.1 (#889)
dependabot[bot] Sep 16, 2025
72a3e75
chore(deps-dev): update mypy requirement from 1.18.1 to 1.18.2 (#890)
dependabot[bot] Sep 22, 2025
92398a2
chore(deps-dev): update coverage requirement from 7.10.6 to 7.10.7 (#…
dependabot[bot] Sep 30, 2025
d8a24b7
docs: add Changelog to project urls
jkowalleck Oct 15, 2025
267672b
feat: support Python 3.14 (#897)
jkowalleck Oct 15, 2025
5d6d34e
chore(deps-dev): update isort requirement from 6.0.1 to 6.1.0 (#894)
dependabot[bot] Oct 15, 2025
b6e8cd5
chore(deps-dev): update tox requirement from 4.30.2 to 4.30.3 (#893)
dependabot[bot] Oct 15, 2025
f812b84
chore(deps-dev): update pyupgrade requirement from 3.20.0 to 3.21.0 (…
dependabot[bot] Oct 15, 2025
3587094
chore(deps-dev): update tomli requirement from 2.2.1 to 2.3.0 (#895)
dependabot[bot] Oct 15, 2025
9f7bdc8
chore(release): 11.2.0
Oct 15, 2025
0f17348
ci: use py314 per default (#898)
jkowalleck Oct 15, 2025
9425c67
feat: deserialize single `ComponentEvidence.identity` (#900)
qkaiser Oct 22, 2025
bebda4f
fix: implement `__lt__` for models still missing it (#899)
qkaiser Oct 22, 2025
2e02bab
chore(release): 11.3.0
Oct 22, 2025
f35b9ee
feat: add support for CycloneDX 1.7 (basics) (#902)
jkowalleck Oct 23, 2025
25a27cc
chore(release): 11.4.0
Oct 23, 2025
649412c
chore(deps): bump actions/upload-artifact from 4 to 5 (#904)
dependabot[bot] Oct 27, 2025
5d42b55
chore(deps): bump actions/download-artifact from 5 to 6 (#905)
dependabot[bot] Oct 27, 2025
70adb7c
feat: add support for DistributionConstraints in BOM metadata (#906)
Churro Oct 31, 2025
73e7c1a
feat: add support for properties in external references (#907)
Churro Oct 31, 2025
aff9636
chore(release): 11.5.0
Oct 31, 2025
4f76c79
chore(deps): bump actions/checkout from 5 to 6 (#915)
dependabot[bot] Nov 27, 2025
687818f
chore(deps-dev): update mypy requirement from 1.18.2 to 1.19.0 (#918)
dependabot[bot] Dec 1, 2025
7e6771b
docs: update 1.7 (#920)
jkowalleck Dec 2, 2025
15a9023
feat: Moved non‑standard implementations to Contrib area (#916)
jkowalleck Dec 2, 2025
095e7c5
chore(release): 11.6.0
Dec 2, 2025
af0059d
docs: modernize RTF setup (#921)
jkowalleck Dec 5, 2025
0c74775
chore(deps): bump actions/upload-artifact from 5 to 6 (#924)
dependabot[bot] Dec 16, 2025
586edc2
chore(deps): bump actions/download-artifact from 6 to 7 (#925)
dependabot[bot] Dec 16, 2025
944beb3
chore(deps-dev): update mypy requirement from 1.19.0 to 1.19.1 (#929)
dependabot[bot] Dec 22, 2025
fda79c0
chore(deps): Update pyupgrade version to 3.21.2 (#930)
jkowalleck Dec 22, 2025
de09ece
chore: PR template
jkowalleck Jan 12, 2026
f311b61
chore(ci): modernize GH ci (#932)
jkowalleck Jan 26, 2026
bf596c0
docs: Add comprehensive SBOM validation guide (#933)
saquibsaifee Feb 27, 2026
8a6efce
feat(validation): provide useful structured validation errors
saquibsaifee Feb 28, 2026
44f1273
Fix signing command in contribution guide (#943)
stefan6419846 Mar 6, 2026
6460b71
docs: docstrings for schema version classes (#946)
jkowalleck Mar 13, 2026
71edacf
feat: make schema deprecation warnings handle-able (#945)
jkowalleck Mar 17, 2026
375d209
feat: add properties for licenses according to CycloneDX 1.5 (#947)
peschuster Mar 17, 2026
ec2f604
chore: force tox environment to utf8 (#949)
peschuster Mar 17, 2026
3ccfa4f
chore(release): 11.7.0
Mar 17, 2026
e492b84
chore: extract glob for pyupgrade to separate script for cross-platfo…
peschuster Mar 23, 2026
752b162
docs: update CDX summary (#951)
jkowalleck Mar 24, 2026
b8b8720
chore: fix test coverage reporting (#956)
jkowalleck Apr 7, 2026
d04d043
Update CONTRIBUTING.md
jkowalleck Apr 8, 2026
204dfdd
chore(deps-dev): update tomli requirement from 2.3.0 to 2.4.1 (#954)
dependabot[bot] Apr 13, 2026
7209c31
chore(release): use own GH app for releasing (#958)
jkowalleck Apr 15, 2026
4ef5bc3
chore(ci): pin GitHub Actions to immutable SHAs while preserving tag …
Copilot Apr 15, 2026
52c29af
chore: add zizmor workflow to harden GitHub Actions security (#968)
Copilot May 4, 2026
1a6dfb0
Update PULL_REQUEST_TEMPLATE.md (#974)
jkowalleck May 6, 2026
0daf3f9
chore: Update CONTRIBUTING.md (#975)
jkowalleck May 6, 2026
7b5f220
Merge branch 'main' into implement-fix-for-validation-error-messages
saquibsaifee May 17, 2026
eb0350d
Merge branch 'feat/validator_error_useful' into implement-fix-for-val…
saquibsaifee Jun 12, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
39 changes: 39 additions & 0 deletions .github/PULL_REQUEST_TEMPLATE.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
<!--🔅🔅🔅🔅🔅🔅🔅🔅🔅🔅🔅🔅🔅🔅🔅🔅🔅🔅🔅🔅🔅🔅🔅🔅🔅🔅🔅🔅🔅🔅🔅

You can expedite processing of your PR by using this template to provide context
and additional information. Before actually opening a PR please make sure that it
does NOT fall into any of the following categories

🚫 Spam PRs (accidental or intentional) - these will result in a 30-days or even
∞ ban from interacting with the project depending on reoccurrence and severity.

🚫 Lazy typo fixing PRs - if you fix a typo in a file, your PR will only be merged
if all other typos in the same file are also fixed with the same PR

🚫 If you fail to provide any _Description_ below, your PR will be considered spam.
If you do not check the _Affirmation_ box below, your PR will not be merged.

🚫 If you do not check one of the _AI Tool Disclosure_ boxes below, your PR will
not be merged. If you used AI tools to assist you in writing code, but fail to
provide the required disclosure, your PR will not be merged.

🔅🔅🔅🔅🔅🔅🔅🔅🔅🔅🔅🔅🔅🔅🔅🔅🔅🔅🔅🔅🔅🔅🔅🔅🔅🔅🔅🔅🔅🔅🔅🔅🔅-->

### Description

<!-- ✍️-->
A clear and concise summary of the change and which issue (if any) it fixes. Should also include relevant motivation and context.

Resolves or fixes issue: <!-- ✍️ Add GitHub issue number in format `#0000` - if there is none fitting, create one -->

### AI Tool Disclosure

- [ ] My contribution does not include any AI-generated content
- [ ] My contribution includes AI-generated content, as disclosed below:
- AI Tools: `[e.g. GitHub CoPilot, ChatGPT, JetBrains Junie etc.]`
- LLMs and versions: `[e.g. GPT-4.1, Claude Haiku 4.5, Gemini 2.5 Pro etc.]`
- Prompts: `[Summarize the key prompts or instructions given to the AI tools]`

### Affirmation

- [ ] My code follows the [CONTRIBUTING.md](https://github.com/CycloneDX/cyclonedx-python-lib/blob/main/CONTRIBUTING.md) guidelines
4 changes: 4 additions & 0 deletions .github/dependabot.yml
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,8 @@ updates:
schedule:
interval: 'weekly'
day: 'saturday'
cooldown:
default-days: 7
allow:
- dependency-type: 'all'
versioning-strategy: 'auto'
Expand All @@ -21,6 +23,8 @@ updates:
schedule:
interval: 'weekly'
day: 'saturday'
cooldown:
default-days: 7
labels: [ 'dependencies' ]
commit-message:
## prefix maximum string length of 15
Expand Down
90 changes: 46 additions & 44 deletions .github/workflows/python.yml
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ permissions: {}

env:
REPORTS_DIR: CI_reports
PYTHON_VERSION_DEFAULT: "3.11"
PYTHON_VERSION_DEFAULT: "3.14"
POETRY_VERSION: "1.8.1"
TESTS_REPORTS_ARTIFACT: tests-reports

Expand All @@ -33,16 +33,18 @@ jobs:
steps:
- name: Checkout
# see https://github.com/actions/checkout
uses: actions/checkout@v4
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6
with:
persist-credentials: false
- name: Setup Python Environment
# see https://github.com/actions/setup-python
uses: actions/setup-python@v5
uses: actions/setup-python@a309ff8b426b58ec0e2a45f0f869d46889d02405 # v6
with:
python-version: ${{ env.PYTHON_VERSION_DEFAULT }}
architecture: 'x64'
- name: Install poetry
# see https://github.com/marketplace/actions/setup-poetry
uses: Gr1N/setup-poetry@v9
uses: Gr1N/setup-poetry@48b0f77c8c1b1b19cb962f0f00dff7b4be8f81ec # v9
with:
poetry-version: ${{ env.POETRY_VERSION }}
- name: Install dependencies
Expand All @@ -57,16 +59,18 @@ jobs:
steps:
- name: Checkout
# see https://github.com/actions/checkout
uses: actions/checkout@v4
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6
with:
persist-credentials: false
- name: Setup Python Environment
# see https://github.com/actions/setup-python
uses: actions/setup-python@v5
uses: actions/setup-python@a309ff8b426b58ec0e2a45f0f869d46889d02405 # v6
with:
python-version: ${{ env.PYTHON_VERSION_DEFAULT }}
architecture: 'x64'
- name: Install poetry
# see https://github.com/marketplace/actions/setup-poetry
uses: Gr1N/setup-poetry@v9
uses: Gr1N/setup-poetry@48b0f77c8c1b1b19cb962f0f00dff7b4be8f81ec # v9
with:
poetry-version: ${{ env.POETRY_VERSION }}
- name: Install dependencies
Expand All @@ -81,16 +85,18 @@ jobs:
steps:
- name: Checkout
# see https://github.com/actions/checkout
uses: actions/checkout@v4
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6
with:
persist-credentials: false
- name: Setup Python Environment
# see https://github.com/actions/setup-python
uses: actions/setup-python@v5
uses: actions/setup-python@a309ff8b426b58ec0e2a45f0f869d46889d02405 # v6
with:
python-version: ${{ env.PYTHON_VERSION_DEFAULT }}
architecture: 'x64'
- name: Install poetry
# see https://github.com/marketplace/actions/setup-poetry
uses: Gr1N/setup-poetry@v9
uses: Gr1N/setup-poetry@48b0f77c8c1b1b19cb962f0f00dff7b4be8f81ec # v9
with:
poetry-version: ${{ env.POETRY_VERSION }}
- name: Install dependencies
Expand All @@ -105,16 +111,18 @@ jobs:
steps:
- name: Checkout
# see https://github.com/actions/checkout
uses: actions/checkout@v4
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6
with:
persist-credentials: false
- name: Setup Python Environment
# see https://github.com/actions/setup-python
uses: actions/setup-python@v5
uses: actions/setup-python@a309ff8b426b58ec0e2a45f0f869d46889d02405 # v6
with:
python-version: ${{ env.PYTHON_VERSION_DEFAULT }}
architecture: 'x64'
- name: Install poetry
# see https://github.com/marketplace/actions/setup-poetry
uses: Gr1N/setup-poetry@v9
uses: Gr1N/setup-poetry@48b0f77c8c1b1b19cb962f0f00dff7b4be8f81ec # v9
with:
poetry-version: ${{ env.POETRY_VERSION }}
- name: Install dependencies
Expand All @@ -132,7 +140,7 @@ jobs:
include:
- # test with the latest dependencies
os: ubuntu-latest
python-version: '3.13'
python-version: '3.14'
toxenv-factors: '-current'
- # test with the lowest dependencies
os: ubuntu-latest
Expand All @@ -141,16 +149,18 @@ jobs:
steps:
- name: Checkout
# see https://github.com/actions/checkout
uses: actions/checkout@v4
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6
with:
persist-credentials: false
- name: Setup Python Environment
# see https://github.com/actions/setup-python
uses: actions/setup-python@v5
uses: actions/setup-python@a309ff8b426b58ec0e2a45f0f869d46889d02405 # v6
with:
python-version: ${{ matrix.python-version }}
architecture: 'x64'
- name: Install poetry
# see https://github.com/marketplace/actions/setup-poetry
uses: Gr1N/setup-poetry@v9
uses: Gr1N/setup-poetry@48b0f77c8c1b1b19cb962f0f00dff7b4be8f81ec # v9
with:
poetry-version: ${{ env.POETRY_VERSION }}
- name: Install dependencies
Expand All @@ -170,7 +180,8 @@ jobs:
- macos-latest
- windows-latest
python-version:
- "3.13" # highest supported
- "3.14" # highest supported
- "3.13"
- "3.12"
- "3.11"
- "3.10"
Expand All @@ -179,36 +190,25 @@ jobs:
- "-allExtras"
- "-noExtras"
exclude:
- os: macos-latest
- os: macos-latest # macos-latest is incompatible with some PY versions
python-version: "3.10"
- os: macos-latest
- os: macos-latest # macos-latest is incompatible with some PY versions
python-version: "3.9"
include:
- os: macos-13
python-version: "3.10"
toxenv-factors: "-allExtras"
- os: macos-13
python-version: "3.10"
toxenv-factors: "-noExtras"
- os: macos-13
python-version: "3.9"
toxenv-factors: "-allExtras"
- os: macos-13
python-version: "3.9"
toxenv-factors: "-noExtras"
steps:
- name: Disabled Git auto EOL CRLF transforms
run: |
git config --global core.autocrlf false
git config --global core.eol lf
- name: Checkout
# see https://github.com/actions/checkout
uses: actions/checkout@v4
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6
with:
persist-credentials: false
- name: Create reports directory
run: mkdir ${{ env.REPORTS_DIR }}
- name: Setup Python Environment
# see https://github.com/actions/setup-python
uses: actions/setup-python@v5
uses: actions/setup-python@a309ff8b426b58ec0e2a45f0f869d46889d02405 # v6
with:
python-version: ${{ matrix.python-version }}
architecture: 'x64'
Expand All @@ -219,7 +219,7 @@ jobs:
print('Python %s on %s in %s' % (sys.version, sys.platform, sys.getdefaultencoding()))
- name: Install poetry
# see https://github.com/marketplace/actions/setup-poetry
uses: Gr1N/setup-poetry@v9
uses: Gr1N/setup-poetry@48b0f77c8c1b1b19cb962f0f00dff7b4be8f81ec # v9
with:
poetry-version: ${{ env.POETRY_VERSION }}
- name: Install dependencies
Expand All @@ -238,7 +238,7 @@ jobs:
- name: Artifact reports
if: ${{ ! cancelled() }}
# see https://github.com/actions/upload-artifact
uses: actions/upload-artifact@v4
uses: actions/upload-artifact@b7c566a772e6b6bfb58ed0dc250532a479d7789f # v6
with:
name: ${{ env.TESTS_REPORTS_ARTIFACT }}-${{ matrix.os }}-py${{ matrix.python-version }}${{ matrix.toxenv-factors }}
path: ${{ env.REPORTS_DIR }}
Expand All @@ -248,11 +248,11 @@ jobs:
name: Publish test coverage
needs: [ "build-and-test" ]
runs-on: ubuntu-latest
timeout-minutes: 5
timeout-minutes: 10
steps:
- name: fetch test artifacts
# see https://github.com/actions/download-artifact
uses: actions/download-artifact@v4
uses: actions/download-artifact@37930b1c2abaa49bbe596cd826c3c89aef350131 # v7
with:
path: ${{ env.REPORTS_DIR }}
pattern: ${{ env.TESTS_REPORTS_ARTIFACT }}-*
Expand All @@ -262,7 +262,7 @@ jobs:
CODACY_PROJECT_TOKEN: ${{ secrets.CODACY_PROJECT_TOKEN }}
if: ${{ env.CODACY_PROJECT_TOKEN != '' }} ## see https://docs.github.com/en/actions/using-workflows/workflow-syntax-for-github-actions#example-using-secrets
# see https://github.com/codacy/codacy-coverage-reporter-action
uses: codacy/codacy-coverage-reporter-action@v1
uses: codacy/codacy-coverage-reporter-action@89d6c85cfafaec52c72b6c5e8b2878d33104c699 # v1
with:
project-token: ${{ env.CODACY_PROJECT_TOKEN }}
coverage-reports: ${{ env.REPORTS_DIR }}/coverage/*
Expand All @@ -281,20 +281,22 @@ jobs:
steps:
- name: Checkout
# see https://github.com/actions/checkout
uses: actions/checkout@v4
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6
with:
persist-credentials: false
- name: Setup Python Environment
# see https://github.com/actions/setup-python
uses: actions/setup-python@v5
uses: actions/setup-python@a309ff8b426b58ec0e2a45f0f869d46889d02405 # v6
with:
python-version: '>=3.9 <=3.13' # supported version range
python-version: '>=3.9 <=3.14' # supported version range
- name: Validate Python Environment
shell: python
run: |
import sys
print('Python %s on %s in %s' % (sys.version, sys.platform, sys.getdefaultencoding()))
- name: Install poetry
# see https://github.com/marketplace/actions/setup-poetry
uses: Gr1N/setup-poetry@v9
uses: Gr1N/setup-poetry@48b0f77c8c1b1b19cb962f0f00dff7b4be8f81ec # v9
with:
poetry-version: ${{ env.POETRY_VERSION }}
- name: Install package and prod dependencies
Expand Down
Loading