Repository navigation
ci: publish Rust crates with trusted OIDC - #187
Merged
Merged
Conversation
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.
What changed
Publish both Rust crates using short-lived crates.io OIDC credentials bound to
everruns/fetchkitandpublish.yml, without an environment. Only the two publishing jobs receiveid-token: write; both retaincontents: read. The official auth action is pinned to its verified v1.0.5 commit.Why
The 0.6.0 upload built successfully but crates.io rejected the existing repository token with HTTP403 authentication failed. Both crates still have 0.5.0 in the registry. The owner approved the exact two Trusted Publisher bindings and workflow permissions; both bindings are now configured and verified.
Before / After
Before: run 40030079951 used the legacy repository secret and failed at upload.
After: the publishing jobs take the token only from the OIDC auth step, which revokes it at job completion. Recovery dispatch runs this workflow from main with
release_tag=v0.6.0; both jobs check out the original immutable4712567f75cdee91336351efacc13c4eb3855cb3source. Package code, versions and existing tags are unchanged. Actual registry artifact and consumer verification follows publication after this PR merges.Risk
Medium: persistent publishing authority is bound to this exact repository/workflow; maintainers who can modify/run the workflow are trusted. There is no unrelated credential fallback. Existing credentials, crate owners and trusted-publishing-only policy remain unchanged.
Checklist
Publication verification
Publish run 40248153237 succeeded. Both fetchkit 0.6.0 and fetchkit-cli 0.6.0 are non-yanked and their public index/CDN checksums and embedded source revision match the original
4712567f75cdee91336351efacc13c4eb3855cb3tag. No tag moved.A standalone crates.io consumer passed HTML/DOCX/nested-PDF/API smoke with registry Markkit0.1.1, Tokio1.54.1, rustls0.23.46 and rustls-webpki0.103.16. A new-prefix
cargo install fetchkit-cli --version '=0.6.0' --lockedpassed version/help/tool-llmtxt and hardened MCP initialize/tools-list on macOS arm64. Linux CI/package verification passed; no new Windows runtime smoke was performed in this recovery.