Repository navigation
release.yml: the call of crate.yml grants id-token and inherits secrets, so a release run starts - #318
Conversation
…ts, so the release run starts GitHub validates a reusable workflow at startup against the permissions and secrets its caller passes, before any job condition is read. crate.yml's upload job declares id-token: write and reads the crates.io secret, and the release workflow granted neither, so every release run, rehearsal or tag, ended as a startup failure (run 40219629854 on release/v0.4 at 71c6bd8). Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_013QppGKetUURseXowZun9KY
…e cargo version used cargo 1.97.1's `publish --dry-run` leaves the archive under `<target-dir>/package/tmp-crate/`, where the readiness step read `<target-dir>/package/<crate>` and failed with "No such file" (rehearsal 40220072633, job crate readiness). Reproduced locally with the pinned toolchain; the archive's bytes equal `cargo package`'s, as the step asserts. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_013QppGKetUURseXowZun9KY
|
Maintainer: the first rehearsal on this branch (run 40220072633) got past startup, which proves the Generated by Claude Code |
… name too, and the oracle reads the lines the workflows now carry The publish job of release.yml read the dry-run archive at the path cargo 1.97.1 no longer uses, as the crate readiness step did, and it runs only on a tag, so no rehearsal would have caught it. RP-18's conformance case reads the two workflows as text and asserted the old `cmp`, `metadata` and `identity` lines of crate.yml; it now asserts the lines the workflows carry (`"$dry_crate"`), with its plants following. conformance_rp_18 passes on this tree. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_013QppGKetUURseXowZun9KY
|
Maintainer: the gate on Generated by Claude Code |
…30-slice-4 The line gained #298, #309 (the 0.4.0 bump) and #318-#320 (release gate; register 457); conflicts were the register count (README.md, SPEC.md section 31 total, cases/repository.rs, xtask/src/spec_links.rs) and the CHANGELOG. The register is 460: the line plus this branch's three rows. The line records v0.4.0 as tagged at its own commit, so this branch's entry moves to a new Unreleased section above 0.4.0 instead of joining the released section. Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
What
The
v0.4.0rehearsal (release.ymldispatched onrelease/v0.4at71c6bd8db, run 40219629854) ended as astartup_failurewith no job started. GitHub validates a reusable workflow at startup against the permissions and secrets its caller passes, before any job condition is read.crate.yml's upload job declarespermissions: id-token: writeand readssecrets.CARGO_REGISTRY_TOKEN; thecratejob ofrelease.ymlgranted neither, so every release run (rehearsal or tag) failed before its first job.crate.ymlhas never been dispatched on its own, so nothing had exercised the call.Change
Nine lines in
.github/workflows/release.yml, on thecratejob:permissions: contents: read, id-token: writeandsecrets: inherit, with the reason recorded as a comment. The upload job ofcrate.ymlstill runs only on a dispatch ofcrate.yml(github.event_name == 'workflow_dispatch'), so a release run grants the token capability and uses it for nothing.Evidence
A rehearsal of
release.ymldispatched on this branch is the test: it must get past startup and runidentity,crate readiness, the gate, the five binaries and the two images (thepublishjob stays skipped on an untagged run). Its run is linked in the comments once it has an id. No register row changes (RP-18's statement already describes this behaviour; the workflow did not deliver it).Milestone
v0.4.0 (the tag commit's workflow must start). Opened under the #15 moratorium as a release blocker.
Generated by Claude Code