Skip to content

Generate license reports and SBOMs from build evidence (bom-tools 0.3.0) - #201

Merged
jadamcrain merged 1 commit into
mainfrom
sbom-from-build-evidence
Oct 9, 2026
Merged

jadamcrain merged 1 commit into
mainfrom
sbom-from-build-evidence

Conversation

@jadamcrain

Copy link
Copy Markdown
Member

Same migration as stepfunc/dnp3#450: replaces cargo cyclonedx + allow-list with bom-tools 0.3.0.

Why

third-party-licenses.txt came from cargo cyclonedx without feature flags, describing the default features (ring), while Windows, macOS and the gnu Linux targets are built with tls-aws-lc. Also, packaging installed bom-tools from main without a tag, so it broke when 0.3.0 removed the cargo-cyclonedx commands.

What changes

  • Build jobs (Windows, macOS, Linux cross; FFI and JNI) run through .github/scripts/build-evidence.sh (identical to dnp3's), which does the build and records its evidence from the same arguments, and requires --target. macOS now builds with --target (copy and binding-test paths updated).
  • Packaging installs bom-tools pinned to --tag 0.3.0, generates the license reports and rodbus-ffi.cdx.json / rodbus-ffi-java.cdx.json, and embeds each SBOM in its package next to the license report (C zip, .nupkg, .jar).
  • Release: the draft GitHub release also attaches the two SBOMs.
  • allowed.json: the crates rodbus shares with dnp3 use dnp3's reviewed entries (ring as Apache-2.0 AND ISC, aws-lc-rs / aws-lc-sys, Step Function's open-source crates in third_party, oo-bindgen / sfio-tokio-ffi / sfio-tracing-ffi as embedded); cmake, fs_extra, jobserver, pkg-config added as build tools; workspace members dropped; commercial_license added.

Checked locally

An all-targets approval check finds no violations; real evidence for x86_64-unknown-linux-gnu (aws-lc and ring builds) passes for both products, and the SBOMs validate with the CycloneDX CLI. CI here covers the rest.

Replace cargo-cyclonedx and allow-list with bom-tools 0.3.0, which scopes
the third-party license reports and the new CycloneDX SBOMs to what each
build actually compiled. Same migration as stepfunc/dnp3#450.

cargo-cyclonedx described the default features, while most targets are
built with tls-aws-lc, so the reports listed ring and omitted
aws-lc-rs/aws-lc-sys.

- each build job records its evidence via .github/scripts/build-evidence.sh
  (same script as dnp3), which also does the build and requires --target;
  macOS now builds with --target like the other platforms
- packaging runs bom-tools for rodbus-ffi and rodbus-ffi-java, embeds each
  SBOM in its package next to the license report, and the GitHub release
  attaches the SBOMs
- allowed.json: same review as dnp3 for the shared crates (ring, aws-lc-*,
  Step Function's open-source crates, embedded build dependencies), plus
  cmake, fs_extra, jobserver and pkg-config as build tools
@jadamcrain
jadamcrain merged commit ec1a587 into main Oct 9, 2026
30 checks passed
@jadamcrain
jadamcrain deleted the sbom-from-build-evidence branch October 9, 2026 22:50
jadamcrain added a commit to stepfunc/rodbus-no-serial that referenced this pull request Oct 9, 2026
…#8)

* Generate the license report and a CycloneDX SBOM with bom-tools 0.3.0

Same migration as stepfunc/rodbus#201: each build records its evidence with
upstream's build-evidence.sh, packaging runs bom-tools 0.3.0 for the
license report and the SBOM, the SBOM is embedded in the .nupkg and
attached to the release. The upstream ref is now a single RODBUS_REF
variable.

* Release only when the upstream ref is the tag being released
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant