Skip to content

Add build provenance attestation; draft-then-publish for immutable releases - #7

Merged
alexeagle merged 1 commit into
masterfrom
figma-release-attestation
Jun 24, 2026
Merged

Add build provenance attestation; draft-then-publish for immutable releases#7
alexeagle merged 1 commit into
masterfrom
figma-release-attestation

Conversation

@alexeagle

Copy link
Copy Markdown

Follow-up to #6 (which got the release pipeline fully green — 8.6.0-figma2 published with portable linux binaries). Two hardening changes:

1. SLSA build provenance attestation

Adds actions/attest-build-provenance (v4.1.0, SHA-pinned) in the release job. It signs each binary's digest with the workflow's OIDC identity, binding the artifact to this repo + commit + workflow run. Consumers can then prove a binary was built from our sources (not tampered with or rebuilt elsewhere):

gh attestation verify ./bazel-8.6.0-figma2-linux-x86_64 --repo figma/bazel
  • Release job gains id-token: write + attestations: write.
  • Attests only the binaries (dist/bazel-*, dist/bazel_nojdk-*); excludes *.sha256.

2. Immutable-releases compatibility (draft → publish)

Immutable releases freeze a release's assets the moment it's published, so all artifacts must be attached before publishing. Changed the release step to:

  1. gh release create "$VERSION" --draft … dist/* (draft, all assets attached)
  2. gh release edit "$VERSION" --draft=false (seal/publish)

Notes

  • Also documented gh attestation verify in the workflow header.
  • Next run auto-increments to 8.6.0-figma3.
  • Head SHA 04f8fcbe7a — confirm before merging.

🤖 Generated with Claude Code

Two supply-chain/release hardening changes:

1. SLSA build provenance: attest each binary's digest with
   actions/attest-build-provenance using the workflow's OIDC identity, so
   consumers can prove a binary was built from our sources by this workflow:
     gh attestation verify <binary> --repo figma/bazel
   The release job gains id-token:write and attestations:write. Only the
   binaries are attested, not the .sha256 sidecars.

2. Immutable-releases compatibility: create the release as a --draft with
   all assets attached, then `gh release edit --draft=false` to publish.
   Immutable releases freeze assets at publish time, so every artifact must
   be present while still a draft.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
@alexeagle
alexeagle merged commit 4629b58 into master Jun 24, 2026
3 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant