Skip to content

fix(release): dispatch crate publishing with its own workflow identity - #26

Merged
scbrown merged 1 commit into
mainfrom
gennaro/crates-workflow-dispatch-20261024
Oct 24, 2026
Merged

scbrown merged 1 commit into
mainfrom
gennaro/crates-workflow-dispatch-20261024

Conversation

@scbrown

@scbrown scbrown commented Oct 24, 2026

Copy link
Copy Markdown
Owner

The release-plz pipeline currently calls crates.yml as a reusable workflow. crates.io rejects its OIDC authentication because the caller is release-plz.yml, while the configured trusted publisher expects crates.yml. The failed run is 37628308831: package verification passed, authentication returned HTTP400, and publishing never ran.

Dispatch crates.yml as a separate workflow with the exact new release tag instead. Only the dispatch job receives actions:write; it no longer requests an ID token. The publishing workflow requires a tag, checks its own workflow identity and repository before checkout/authentication, and checks out refs/tags/<tag>. Dry runs continue to skip both authentication and publication. No crates.io account configuration changes.

Validation: 11 offline controls pass under a clean HOME escape guard. They execute the production dispatcher and publisher validation shell, accept stable/prerelease/build tags, reject forks, the former reusable-caller identity, missing/invalid tags, and propagate a failed dispatch without retry. Workflow YAML parses successfully. The controls run in ordinary PR CI.

Observed before: the reusable caller produced HTTP400, expected crates.yml but received release-plz.yml. Source controls after: the dispatcher invokes a separate crates.yml workflow at main with an explicit tag; the former caller identity is refused before authentication. A hosted dry run is still outstanding; it will not prove successful registry authentication because that step is deliberately skipped.

GitHub documents that reusable workflows retain caller identity and that workflow_dispatch is a GITHUB_TOKEN trigger exception.

Bead: aegis-8t76.1

Overlap preflight: 8d2795a1c06e2861917ef8a04bf07f0a4d8a25e03375a63b6f9b9486d84b180b

  • PR fix(render): honor thickness on semantic line regions #25 @ 4802322: independent — Disjoint source paths. This publisher repair is the prerequisite and lands first; the semantic-line fix in PR25 remains frozen until main is green. Separate branches preserve that operator-directed landing order; neither proposal absorbs or rewrites the other.

@scbrown

scbrown commented Oct 24, 2026

Copy link
Copy Markdown
Owner Author

SOURCE APPROVE at 276ef53 — Pixelsrc PR26. Native registration REFUSED; no accepted artifact.
One independent non-author post-green full review of all five paths, author Gennaro. Fresh hosted head: 13 SUCCESS + expected PyPI conditional SKIP. Current native classifier cf2db005 matches origin/main, exact record 81935fb30e3f01459f55fdd680e9bcbe06c699eb76a72c51024f43031aafba3a T3/unavailable null, base686b366c09313c31d5fd21f0f8b9571f8a30dd8c.
The proposal replaces the reusable crates caller with a separate workflow_dispatch of crates.yml at main carrying an explicit validated release tag. Only dispatch has actions:write; publication alone requests id-token:write. Publisher validates its repository/workflow and tag before checkout/authentication, checks out refs/tags/tag, and dry-run skips both auth and publication. No account/token configuration change or publication is authorized by this review.
Validation: 11 production-script/source controls PASS plus 6 independent production-validator controls (stable/prerelease/build positive, newline injection, Unicode digits, lookalike workflow path, fork workflow and old reusable caller negatives), both HOME157+5 CLEAN/command0. Whole inverse restores exact base tree713f37d15840679e2046c07bf4f037f2f3bdf8f1. Clean isolated detached review tree; no source edits, push, tag, upload or remote workflow dispatch.
Native review command REFUSED because exact base main has failed crates.io publish workflow367491690:push/check15368 crates.io / Publish to crates.io. This is the pre-existing publication failure the proposal addresses; no exception was fabricated or forced. Tim must obtain normal exact-base admission before recording/landing this retained source verdict. Hosted dry-run remains outstanding; actual registry authentication/publication is not proven by offline controls or this approval.
Evidence archive /srv/fleet/aegis/grant-pixelsrc26-review-20261024 includes current-risk.json, controls.guard.log, independent.guard.log, independent.py, inverse.patch and review-registration.log. The PR body links aegis-8t76.1, which actually tracks the separate line-thickness PR25; preserve that item's ownership/scope and use parent aegis-8t76 for this review evidence, not a closure of the thickness task.

@scbrown scbrown changed the title Dispatch crate publishing with its own workflow identity fix(release): dispatch crate publishing with its own workflow identity Oct 24, 2026
@scbrown
scbrown merged commit c665831 into main Oct 24, 2026
14 checks passed
@github-actions github-actions Bot mentioned this pull request Oct 24, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant