ci(release): standardize on synth pattern — sums + cosign + SLSA + SBOM#143
Open
avrabe wants to merge 1 commit into
Open
ci(release): standardize on synth pattern — sums + cosign + SLSA + SBOM#143avrabe wants to merge 1 commit into
avrabe wants to merge 1 commit into
Conversation
LOOM has not shipped any release binaries since v0.5.0: every Release
workflow run since at least v1.0.2 has failed at the `Build WASM
(wasm32-wasip2)` step (rules_wasm_component pinned to v0.3.0, the
WASM build cannot move forward). The Create-Release job had
`needs: [build-native, build-wasm]`, so the failing WASM job
short-circuits the upload step and all native binaries get
discarded — v0.9.0 / v1.0.5 / v1.1.0 / v1.1.1 are tagged with zero
assets.
This rewrite adopts pulseengine/synth's release.yml as the reference
implementation (per the cross-repo standardization brief):
- Drop the WASM build job entirely (release-blocker; not in the
standard asset list; rules_wasm_component pin issue is a separate
concern).
- Drop the OCI publish + OCI signing + custom-JSON SLSA path. The
standard set is the single signed SHA256SUMS plus GitHub-native
SLSA attestation, no OCI side-channel.
- Drop per-file `*.sha256` sidecars — replaced by one signed
SHA256SUMS.txt covering every asset (and the SBOM).
- Trigger switches from `release: published` to `push: tags: v*`
so the workflow CREATES the release atomically with its assets,
instead of racing a manually-created (asset-less) release page.
The artifact-generation block (Phase 6 onward) is copied verbatim
from pulseengine/synth/.github/workflows/release.yml — only the SBOM
manifest path is adapted (`loom-cli/Cargo.toml` instead of
`crates/synth-cli/Cargo.toml`).
Required assets per the brief, and only these:
- loom-vX.Y.Z-<triple>.{tar.gz|zip} binary archives, per platform
- loom-X.Y.Z.cdx.json CycloneDX SBOM
- SHA256SUMS.txt sha256 of every other asset
- SHA256SUMS.txt.sig cosign detached signature
- SHA256SUMS.txt.pem Fulcio leaf certificate
- SHA256SUMS.txt.cosign.bundle verifier-friendly bundle
- build-env.txt rustc/cargo/cosign/runner versions
Build matrix: x86_64-linux, x86_64-darwin (macos-14), aarch64-darwin
(macos-latest), x86_64-windows. aarch64-linux via `cross` deferred —
z3-sys cross-compile is untested in this repo.
Verification one-liner (to paste in release notes after first run):
cosign verify-blob \
--certificate-identity-regexp \
'https://github.com/pulseengine/loom/.github/workflows/release.yml@.*' \
--certificate-oidc-issuer \
'https://token.actions.githubusercontent.com' \
--bundle SHA256SUMS.txt.cosign.bundle SHA256SUMS.txt
gh attestation verify loom-vX.Y.Z-<triple>.tar.gz --repo pulseengine/loom
Validation plan: after merge, dispatch the workflow against tag
v1.1.1 (which currently has zero assets) to populate it with the
standard asset set.
Trace: REQ-INFRA
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.
Summary
LOOM has not shipped any release binaries since v0.5.0 — every Release workflow run since at least v1.0.2 fails at the
Build WASM (wasm32-wasip2)step (rules_wasm_component pinned to v0.3.0), and the Create-Release job'sneeds: [build-native, build-wasm]short-circuits the upload. v0.9.0, v1.0.5, v1.1.0, v1.1.1 are all tagged with zero assets.This rewrites
.github/workflows/release.ymlto adopt the pulseengine/synth reference pattern per the cross-repo release-artifact standardization brief.Required asset set (per the brief)
loom-vX.Y.Z-<triple>.{tar.gz|zip}loom-X.Y.Z.cdx.jsonSHA256SUMS.txtSHA256SUMS.txt.sigSHA256SUMS.txt.pemSHA256SUMS.txt.cosign.bundlebuild-env.txtWhat changed
rules_wasm_component@v0.3.0pin is a separate concern.actions/attest-build-provenance@v2) plus cosign-signedSHA256SUMS.txt. No OCI side-channel.*.sha256sidecars. Replaced by one signedSHA256SUMS.txtcovering every asset (including the SBOM).release: published→push: tags: v*, so the workflow CREATES the release atomically with its assets, rather than racing an asset-less release page.loom-cli/Cargo.tomlinstead ofcrates/synth-cli/Cargo.toml).Build matrix
x86_64-unknown-linux-gnu,x86_64-apple-darwin(on macos-14),aarch64-apple-darwin(on macos-latest),x86_64-pc-windows-msvc.aarch64-unknown-linux-gnuviacrossis deferred — z3-sys cross-compile is untested in this repo.Validation plan
After merge, dispatch the workflow against tag
v1.1.1(which currently has zero assets) to populate the standard asset set and verify the cosign + attestation paths work end-to-end:Then verify the published assets:
cosign verify-blob \ --certificate-identity-regexp \ 'https://github.com/pulseengine/loom/.github/workflows/release.yml@.*' \ --certificate-oidc-issuer \ 'https://token.actions.githubusercontent.com' \ --bundle SHA256SUMS.txt.cosign.bundle SHA256SUMS.txt gh attestation verify loom-v1.1.1-x86_64-unknown-linux-gnu.tar.gz --repo pulseengine/loomTest plan
gh workflow viewerrors)workflow_dispatchagainst v1.1.1)SHA256SUMS.txt.cosign.bundleverifies with the canonical one-liner abovegh attestation verifysucceeds for every binary archive