Skip to main content

SBOM (SPDX & CycloneDX)

A Software Bill of Materials lists every component (and its version) that goes into a released binary. Auditors increasingly require one — EU MR Annex IV.6, the EU Cyber Resilience Act, US Executive Order 14028. Roboticks ingests SBOMs and embeds them in the per-release evidence pack so the auditor finds the answer without asking. Roboticks accepts both major SBOM formats: For most teams syft (multi-format, multi-language) or trivy (image + filesystem) are the right tools. Both ship in the bundled OSS scanners — no extra fee.

Why an SBOM lands in the evidence pack

Regulators ask “what’s in the binary you shipped to my factory?” and they want a machine-readable answer pinned to the release tag. The Roboticks evidence pack already contains:
  • Source state (git SHA, commit signature)
  • Test results (JUnit, MCAP)
  • Requirement coverage snapshot (ReqIF)
  • Findings (SARIF + vendor reports)
Adding the SBOM closes the supply-chain loop. The pack now answers:
  1. What was tested? — JUnit + traceability matrix
  2. What were the requirements? — ReqIF snapshot
  3. What runtime behaviours did we capture? — MCAP attachments
  4. What components went into the binary?SBOM

Upload an SBOM

The CLI auto-detects SPDX vs CycloneDX by document structure. The --tool label is free-form for grouping in the dashboard.

Wire it into CI

CI recipe — SBOM on every release

The --release flag pins the SBOM to the release tag — it ends up in that release’s evidence pack, even if you re-run the workflow later.

Where SBOMs appear

  • Release detail view — a Supply chain panel shows component counts, license breakdown, and a CVE summary (via the vulnerability scan if trivy was used).
  • Release evidence pack — the SBOM ships in:
    • The PDF, as a Supply-Chain Appendix with component-list, license-table, and the CVE summary
    • The ZIP, as raw sbom.cdx.json and sbom.spdx.json files for downstream tooling
  • Comparison — diff one release’s SBOM against the previous to spot newly introduced components.

Diffing SBOMs

--output json returns the structured diff including PURLs and license deltas.

License surfacing

Roboticks extracts SPDX license identifiers from both SBOM formats and surfaces:
  • Per-release license summary — total components per license
  • Copyleft check — flags GPL/AGPL/LGPL components for review
  • Unknown licenses — components syft/trivy couldn’t classify
A release.license_policy.yaml lets you fail an evidence-pack generation if a forbidden license appears:

Provenance and signatures

If your SBOM is signed (in-toto, Cosign, or DSSE-wrapped), upload the signature alongside:
Roboticks records the signature in the SBOM’s metadata block and embeds it in the evidence pack so the auditor can re-verify.

Quotas

Standards references

Troubleshooting

Confirm the format with cyclonedx-cli validate or spdx-tools verify. Most validation failures stem from custom fields outside the spec.
Use --release <tag> on upload. Without it, the SBOM attaches to the current state, not the release-tagged state. You can re-attach:
Both tools’ default modes can produce dupes when scanning a tree with multiple package managers (e.g., npm + pip). Pass --exclude to narrow scope or merge SBOMs with cyclonedx-cli merge before upload.

Next

OSS scanners

syft and trivy ship bundled.

Evidence packs

Where SBOMs end up.