Skip to content

ci: publish Rust crates with trusted OIDC - #187

Merged
chaliy merged 1 commit into
mainfrom
fix/crates-oidc-publishing
Oct 26, 2026
Merged

chaliy merged 1 commit into
mainfrom
fix/crates-oidc-publishing

Conversation

@chaliy

@chaliy chaliy commented Oct 26, 2026 •

Copy link
Copy Markdown
Contributor

What changed

Publish both Rust crates using short-lived crates.io OIDC credentials bound to everruns/fetchkit and publish.yml, without an environment. Only the two publishing jobs receive id-token: write; both retain contents: 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 immutable 4712567f75cdee91336351efacc13c4eb3855cb3 source. 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

  • Workflow actionlint, local knowledge and repository-script checks passed
  • Rust formatting, workspace clippy/tests, rustdoc warnings denied and release build passed locally
  • Documentation and release threat model updated
  • Immutable source and both approved publisher bindings verified
  • All 12 exact-head checks SUCCESS; post-main CI and CodeQL SUCCESS
  • Public registry source/checksum and fresh consumer/CLI installation verified after publication

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 4712567f75cdee91336351efacc13c4eb3855cb3 tag. 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' --locked passed 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.

@chaliy
chaliy marked this pull request as ready for review October 26, 2026 00:08
@chaliy
chaliy merged commit c108261 into main Oct 26, 2026
12 checks passed
@chaliy
chaliy deleted the fix/crates-oidc-publishing branch October 26, 2026 00:11
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