feat(release): standardised gale release pipeline — signed wasm + rivet compliance#72
Merged
Conversation
…et compliance Establishes gale's release flow, mirroring pulseengine/synth + pulseengine/relay (cosign-signed SHA256SUMS, CycloneDX SBOM, SLSA build provenance, build-env capture, rivet compliance report). gale ships no CLI binary, so its release "binaries" are the wasm-cross-LTO kernel modules. - .github/workflows/release.yml (NEW): tag-triggered creator. Builds the wasm dist (sem+mutex+msgq) via scripts/build-wasm-dist.sh on pinned loom v1.1.14 + synth v0.11.48 (the toolchain that builds all three — #359/#372 land in 0.11.48), then publishes the standardised bundle: gale-<ver>.cdx.json SBOM, SHA256SUMS.txt cosign-signed (keyless OIDC), SLSA build provenance over the .o objects, build-env.txt, and gh release create with every wasm asset. - .github/workflows/compliance.yml (NEW): on release publish, generates the rivet compliance report (pulseengine/rivet compliance action @v0.16.1, rivet-version v0.15.0 = gale's pinned schema version) and attaches it. Decoupled + additive — a report failure can't break the release. - .github/workflows/release-wasm.yml: demoted to workflow_dispatch-only (manual on-demand rebuild -> run artifact). release.yml now owns release-time wasm build + attach + sign, so the release: published trigger (which would double-build/attach) is removed; pins bumped to lockstep (v1.1.14 / v0.11.48). Both new jobs that build wasm carry the /mnt scratch-disk mount from the zephyr-tests ENOSPC fix (#71), so they don't hit the same disk exhaustion. Not yet exercised against a real tag — the first v* tag (or a workflow_dispatch with an existing tag) is the validation oracle. Release infra; for review. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Codecov Report✅ All modified and coverable lines are covered by tests. 📢 Thoughts on this report? Let us know! |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Bring gale's wasm modules + rivet compliance into a proper release
Establishes gale's release flow, mirroring how pulseengine/synth and pulseengine/relay release (cosign-signed
SHA256SUMS.txt, CycloneDX SBOM, SLSA build provenance,build-env.txt, rivet compliance report). gale ships no CLI binary, so its release "binaries" are the wasm-cross-LTO kernel modules.Flow (3 decoupled workflows, ecosystem-standard)
Changes
release.yml(new) — tag-triggered creator. Builds the wasm dist viascripts/build-wasm-dist.shon pinned loom v1.1.14 + synth v0.11.48 (the toolchain that builds all three modules — #359/#372 land in 0.11.48), then ships the standardised provenance bundle (SBOM, cosign-signedSHA256SUMS, SLSAattest-build-provenance, build-env), idempotentgh release create/upload.compliance.yml(new) — on release publish, runs thepulseengine/rivetcompliance action (@v0.16.1,rivet-version: v0.15.0= gale's pinned schema) and attaches the report. Decoupled + additive; a report failure can't break the release.release-wasm.yml— demoted toworkflow_dispatch-only manual rebuild (uploads a run artifact). release.yml now owns release-time wasm, so therelease: publishedtrigger (which would double-build/attach) is removed; pins bumped to lockstep.Verification (release notes one-liner)
Validation status
Not yet exercised against a real tag — the first
v*tag (or aworkflow_dispatchwith an existing tag) is the validation oracle. Both wasm-building jobs carry the/mntscratch-disk mount from the ENOSPC fix (#71) so they don't hit disk exhaustion. Security: all tag values flow throughenv:(never expanded intorun:), matching the synth/relay pattern.Depends-on: #71 (CI disk fix) for clean signal. Sequenced after #70 (msgq) so the msgq module is in
mainwhen the first release builds it.🤖 Generated with Claude Code