Repository navigation
ci: move release.yml to GitHub-hosted runners with SLSA provenance - #3
Merged
Merged
Conversation
…loses #1) This repo is public and the org runner group enforces allows_public_repositories: false, so the self-hosted release jobs could never be scheduled: the next tag would have queued 24 h and been cancelled. v0.0.1 shipped only because it was built while the repo was still private. Moves all three jobs to ubuntu-latest under the same exception injection-scanner took in its #45. The release uses no org secret, only the built-in GITHUB_TOKEN, and fires only on tag pushes, which a fork cannot make. - Least privilege: the workflow default is contents: read. Only the release job holds contents/id-token/attestations: write. - Signed SLSA build provenance (actions/attest-build-provenance) over every tarball and SHA256SUMS.txt, created before the Release. The release notes give the gh attestation verify command. - Every action is pinned to a verified commit SHA. checkout moves v5 to v7.0.1; upload and download artifact move together to v7.0.1/v8.0.1. - The trigger narrows from v* to v[0-9]+.[0-9]+.[0-9]+. GSD milestone tags match v* too: run 29185695331 fired on v1.0-milestone, and on a hosted runner it would have published a real Release. - The asset contract is unchanged: six targets, the 4 required + 2 best-effort split, the same tarball shape, SHA256SUMS.txt. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
#1) ci.yml runs on this PR, so pinning it to the same commits as release.yml is the only evidence before merge that the checkout v7.0.1 and pinned rust-toolchain steps run on a hosted runner in this repo. The spike gets the same pins so that every workflow is SHA-pinned. A SHA-pinned dtolnay/rust-toolchain loses its branch-name default, so each step now passes `toolchain: stable` explicitly. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
…ification (#1) CONTRIBUTING.md and README.md still said CI runs on self-hosted runners only and that a maintainer may need to bring one online. Neither is possible on this public repo. They now describe the real policy: hosted fork CI with a read-only token, a hosted release fired only by exact vX.Y.Z tags under the issue #1 exception, the gh attestation verify command, and that the cross-compile spike is not a release gate. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
…loses #1) Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
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.
Closes #1.
Why
This repo is public, and the UnityInFlow org runner group enforces
allows_public_repositories: false. A self-hosted job therefore cannot be scheduled here at all. The next release tag would have queued for 24 hours and then been cancelled. v0.0.1 shipped only because it was built while the repo was still private.This takes option 2 from the issue, the same exception injection-scanner took in #45:
GITHUB_TOKEN;What changes
release.ymlubuntu-latest.contents: read. Only the release job getscontents: write,id-token: writeandattestations: write.actions/attest-build-provenance) covers every tarball andSHA256SUMS.txt, and is created before the Release. The release notes include thegh attestation verifycommand.v*tov[0-9]+.[0-9]+.[0-9]+. GSD milestone tags start withvtoo: run 29185695331 fired onv1.0-milestone. On a hosted runner, that would have published a real Release with binaries. Pre-release tags (v0.1.0-rc.1) no longer trigger either; Phase 6 can widen the filter if its dry run needs one.agent-memory-<triple>.tar.gzwith the binary at the archive root;SHA256SUMS.txt.ci.ymlandspike-cross-compile.ymlCONTRIBUTING.mdandREADME.mdPins
3d3c42e5aac5ba805825da76410c181273ba90b14360b52568e2003a75bf9bc1d59f33a8e3fc893c043fb46d1a93c77aae656e7c1c64a875d1fc6a0a3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c4d101475d8b20a2381f78447822ac1eab6504dd8efb35369e0ad2afab669f228072c1b0d510eae64These are the same pins injection-scanner's v0.1.0 release ran green with, including the attest step.
Verification
actionlintis clean on all three workflows. Before this change it reported three unknown-runner-label errors.release.ymlcovers:v0.1.0but notv1.0-milestoneorv0.1.0-rc.1;uses:;toolchain: stableon every rust-toolchain step.secrets.expression remain in any workflow.Not verifiable before merge (by design)
release.ymlruns only on avX.Y.Ztag, and that tag-only trigger is the safety property behind this exception. The first hosted run is the Phase 6 release dry run. It must confirm:--versionsmoke test;gh attestation verifyon a downloaded tarball.Follow-ups (not in this PR)
dtolnay/rust-toolchainpin to a commit after upstream fix #187, in this repo and injection-scanner together. The risk is accepted for now because every caller passes fixed inputs.🤖 Generated with Claude Code