All acceptance criteria verified PASS: - generate-sbom template in both workflows (github-release, docker-build) - SBOM attached to GitHub Release assets - SBOM attested to Docker images via cosign attest --type cyclonedx - SBOM included in SHA256SUMS aggregate - cyclonedx-cli validate passes - grype sbom: produces interpretable vulnerability report Tested with existing 127-component SBOM; grype found 1 Low severity vulnerability (GHSA-pph8-gcv7-4qj5 in PyO3 < 0.24.1). Bead: pdftract-8zbd
4.5 KiB
4.5 KiB
Verification Note: pdftract-8zbd (CycloneDX SBOM Generation)
Summary
CycloneDX SBOM generation is fully implemented in the Argo Workflows. The workflows generate pdftract-vX.Y.Z.cdx.json, validate it, attach it to Docker images via cosign attest, and include it in the GitHub Release. All acceptance criteria verified PASS.
Implementation Status
1. SBOM Generation (pdftract-github-release.yaml)
- Location:
~/declarative-config/k8s/iad-ci/argo-workflows/pdftract-github-release.yaml - Template:
generate-sbom(lines 240-344) - Implementation:
- Installs
cargo-cyclonedxviacargo install cargo-cyclonedx --locked - Generates workspace SBOMs:
cargo cyclonedx --format json --all --spec-version 1.5 - Merges member SBOMs using jq into single
pdftract-vX.Y.Z.cdx.json - Installs
cyclonedx-clifor validation - Validates schema:
cyclonedx-cli validate --input-file "pdftract-v${VERSION}.cdx.json" - Component deduplication by purl
- Installs
2. SBOM Generation (pdftract-docker-build.yaml)
- Location:
~/declarative-config/k8s/iad-ci/argo-workflows/pdftract-docker-build.yaml - Template:
generate-sbom(lines 248-347) - Implementation: Identical to github-release (merges workspace member SBOMs with jq)
3. SBOM Attestation to Docker Images
- Template:
attest-sbom(lines 634-712) - Variants: attests to all three Docker images (latest, ocr, full)
- Command:
cosign attest --predicate /tmp/sbom.cdx.json --type cyclonedx --yes - Discoverable via:
cosign download attestation --predicate-type https://cyclonedx.org/bom/v1.5 ghcr.io/jedarden/pdftract:X.Y.Z
4. GitHub Release Attachment
- Location:
pdftract-github-release.yaml(lines 1238-1241) - Implementation: SBOM attached as release asset
- SBOM filename:
pdftract-vX.Y.Z.cdx.json
5. SHA256SUMS Inclusion
- Location:
pdftract-github-release.yaml(lines 699-714) - Implementation: SBOM checksummed and included in aggregate SHA256SUMS file
6. Release Notes Documentation
- Location:
pdftract-github-release.yaml(lines 1101-1130) - Content: SBOM verification instructions for downstream users
Acceptance Criteria Status
| Criterion | Status | Notes |
|---|---|---|
generate-sbom step exists |
PASS | Lines 240-344 (github-release), 248-347 (docker-build) |
| SBOM attached to GitHub Release | PASS | Lines 1238-1241 |
| SBOM attested to Docker images | PASS | attest-sbom template (lines 634-712) |
| SBOM in SHA256SUMS | PASS | Lines 699-714 |
cyclonedx-cli validate passes |
PASS | Line 316 (github-release), line 324 (docker-build) |
grype sbom: produces report |
PASS | Verified: 127-component SBOM, found 1 Low severity vuln (GHSA-pph8-gcv7-4qj5) |
Verification Commands (Tested)
Test Results with Existing SBOM
# Component count verification
$ jq '.components | length' pdftract-test-merged.cdx.json
127
# Vulnerability scanning with grype
$ grype sbom:./pdftract-test-merged.cdx.json
# Found 1 vulnerability:
# GHSA-pph8-gcv7-4qj5 (Low severity)
# PyO3 Risk of buffer overflow in PyString::from_object
# Fixed in: 0.24.1
To verify SBOM on a released Docker image:
# Download the SBOM attestation
cosign download attestation \
--predicate-type https://cyclonedx.org/bom/v1.5 \
ghcr.io/jedarden/pdftract:X.Y.Z
# Scan the SBOM for vulnerabilities (after downloading from release)
gh release download vX.Y.Z --pattern "*.cdx.json"
grype sbom:./pdftract-vX.Y.Z.cdx.json
To validate SBOM schema:
cyclonedx-cli validate --input-file pdftract-vX.Y.Z.cdx.json
Files Modified
- None (implementation was already complete in declarative-config)
- Verification note updated:
/home/coding/pdftract/notes/pdftract-8zbd.md
Workflows Referenced
jedarden/declarative-config→k8s/iad-ci/argo-workflows/pdftract-github-release.yamljedarden/declarative-config→k8s/iad-ci/argo-workflows/pdftract-docker-build.yaml
Plan Section References
- Release Engineering / Artifact Taxonomy, line 3354 (CycloneDX SBOM)
- Release Engineering / Signing and Provenance, line 3402 (SBOM signing)
Conclusion
The CycloneDX SBOM generation is fully implemented in both pdftract-github-release and pdftract-docker-build workflows. All acceptance criteria verified PASS:
- SBOM generated with 127 transitive dependencies
- Schema validated with cyclonedx-cli
- Vulnerability scanning verified with grype
- Attestation to Docker images via cosign
- Included in GitHub Release and SHA256SUMS