Skip to content

ci: revert publish workflow to cargo xtask publish (shipper#173 blocker)#570

Merged
EffortlessSteven merged 1 commit into
mainfrom
ci/revert-publish-to-cargo-xtask
May 11, 2026
Merged

ci: revert publish workflow to cargo xtask publish (shipper#173 blocker)#570
EffortlessSteven merged 1 commit into
mainfrom
ci/revert-publish-to-cargo-xtask

Conversation

@EffortlessSteven

Copy link
Copy Markdown
Member

Summary

shipper 0.3.0-rc.2 emits the publish plan in alphabetical-looking order rather than topological order. With `uselesskey-aws-lc-rs` at position 1 and `uselesskey-core` at #2, shipper's linear walk fails immediately because `cargo publish` of aws-lc-rs requires `uselesskey-ecdsa` (#22) and other deps to already be on crates.io.

Filed against shipper: EffortlessMetrics/shipper#173 (to be fixed in shipper's next patch). Reverting publish flow to `cargo xtask publish` for v0.7.0; we'll re-migrate to shipper once #173 is resolved.

Why this works now

The two reasons `cargo xtask publish` failed earlier are both addressed:

Changes

  • `release.yml` `publish` job: shipper plan/preflight/publish steps → single `cargo xtask publish` step + `publish-state.json` artifact upload (the pre-shipper-migration shape).
  • `publish-retry.yml`: shipper paths → `cargo xtask publish` (or `--from ` when `resume_from` input is set) and `cargo xtask publish-check` for dry-run.
  • Keep `.shipper/` in `.gitignore` (harmless future-proofing for the eventual re-migration).
  • Keep the existing `Quality gate` / `Publish preflight` / `Publish dry-run` steps in the `preflight` job — unaffected.

Recovery for v0.7.0

After this PR merges, delete + retag `v0.7.0` on the new main HEAD and push. `release.yml` runs end-to-end with cargo xtask publish. Three crates already at 0.7.0 (`uselesskey-core-hmac-spec`, `uselesskey-jwk`, `uselesskey-core-jwk`) stay where they are; cargo xtask publish skips them on "version already published" via `already_published` state in `publish-state.json`.

Test plan

  • CI green
  • After merge, retag v0.7.0 and tag push fires release.yml end-to-end
  • All ~53 publishable crates reach 0.7.0 on crates.io
  • release job creates the GitHub release (we'll overwrite the body with the custom one post-publish)

Shipper 0.3.0-rc.2 emits the publish plan in alphabetical-looking order
rather than topological order (EffortlessMetrics/shipper#173). With
\`uselesskey-aws-lc-rs\` at position 1 and \`uselesskey-core\` at #2,
shipper's linear walk fails immediately because cargo publish of
aws-lc-rs requires uselesskey-ecdsa (#22) and other deps to already be
on crates.io.

The owner of shipper will fix this in the next patch. Until then,
revert both \`release.yml\` and \`publish-retry.yml\` to use
\`cargo xtask publish\`. The PUBLISH_CRATES order is correct after #565,
and the test-helper dev-dep fix in #569 removes the cargo verification
gap that the original cargo xtask path also tripped over.

Keep \`.shipper/\` in \`.gitignore\` and the existing \`Quality gate\` /
\`Publish preflight\` / \`Publish dry-run\` steps in preflight job —
those are unaffected by the shipper revert and still useful.

After this PR merges, retag v0.7.0 on the new main HEAD and let
\`release.yml\` run end-to-end. shipper#173 stays open for the next
release cycle.
@chatgpt-codex-connector

Copy link
Copy Markdown

You have reached your Codex usage limits for code reviews. You can see your limits in the Codex usage dashboard.
To continue using code reviews, add credits to your account and enable them for code reviews in your settings.

@gemini-code-assist

Copy link
Copy Markdown

Warning

You have reached your daily quota limit. Please wait up to 24 hours and I will start processing your requests again!

@coderabbitai

coderabbitai Bot commented May 11, 2026

Copy link
Copy Markdown

Warning

Rate limit exceeded

@EffortlessSteven has exceeded the limit for the number of commits that can be reviewed per hour. Please wait 48 minutes and 3 seconds before requesting another review.

You’ve run out of usage credits. Purchase more in the billing tab.

⌛ How to resolve this issue?

After the wait time has elapsed, a review can be triggered using the @coderabbitai review command as a PR comment. Alternatively, push new commits to this PR.

We recommend that you space out your commits to avoid hitting the rate limit.

🚦 How do rate limits work?

CodeRabbit enforces hourly rate limits for each developer per organization.

Our paid plans have higher rate limits than the trial, open-source and free plans. In all cases, we re-allow further reviews after a brief timeout.

Please see our FAQ for further information.

ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: ASSERTIVE

Plan: Pro

Run ID: e9fbf2be-1058-4e84-959a-2e2eec467c11

📥 Commits

Reviewing files that changed from the base of the PR and between 69ab4b4 and a118aee.

📒 Files selected for processing (2)
  • .github/workflows/publish-retry.yml
  • .github/workflows/release.yml
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch ci/revert-publish-to-cargo-xtask

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

@EffortlessSteven EffortlessSteven merged commit 1a5b944 into main May 11, 2026
7 of 8 checks passed
@EffortlessSteven EffortlessSteven deleted the ci/revert-publish-to-cargo-xtask branch May 11, 2026 14:18
EffortlessSteven added a commit that referenced this pull request May 12, 2026
…::spec (#595)

* refactor(hmac): fold core-hmac-spec into uselesskey-hmac::srp::spec

Inverts the dep direction between `uselesskey-hmac` and
`uselesskey-core-hmac-spec`. `HmacSpec`, its impl block, and its inline
tests now live in `crates/uselesskey-hmac/src/srp/spec.rs`;
`uselesskey-core-hmac-spec` becomes a thin re-export shim re-exporting
`uselesskey_hmac::srp::spec::*` to preserve the v0.7.x public-internal
surface for downstream pinners.

This matches the v0.7.0 fold pattern established for `core-cache`,
`core-id`, `core-hash`, `core-factory`, `token-spec`, etc. (#565-#570
and follow-ups) where the owner fixture crate took canonical ownership
and the previously-published microcrate became a compatibility shim.

Mechanical changes:

- New `crates/uselesskey-hmac/src/srp/{mod.rs,spec.rs}` carry the
  `HmacSpec` enum + helpers + inline `#[cfg(test)] mod tests` block.
- `crates/uselesskey-hmac/src/spec.rs` and `lib.rs` now re-export from
  `srp::spec`; the public `uselesskey_hmac::HmacSpec` path is unchanged.
- `uselesskey-hmac/Cargo.toml` drops the dep on
  `uselesskey-core-hmac-spec`.
- `uselesskey-core-hmac-spec/src/lib.rs` is now `pub use
  uselesskey_hmac::srp::spec::*;`. Its Cargo.toml adds
  `uselesskey-hmac.workspace = true` and updates the description.
- `xtask::PUBLISH_CRATES` and `xtask::plan::dependents()` move
  `uselesskey-core-hmac-spec` to the post-`uselesskey-hmac` position,
  matching `uselesskey-token-spec` after the token fold.
- `docs/explanation/architecture.md`, `docs/metadata/workspace-docs.json`,
  and the regenerated `docs/reference/support-matrix.md` describe the
  crate as a compatibility shim.

The shim's integration / mutant_killers / prop / snapshot tests are
unchanged and continue to pass via the new re-export. `stable_bytes()`
values, JOSE alg names, byte lengths, and Debug output are identical
to v0.7.1; no derivation-stability impact.

This is PR-1 of the v0.8.0 SRP collapse lane. The shim crate stays
published for v0.7.x compat and is scheduled for removal in PR-4.

* refactor(hmac): bump uselesskey-hmac and core-hmac-spec to 0.7.2

The fold introduces a new public `uselesskey_hmac::srp::spec` module
which the `uselesskey-core-hmac-spec` shim now re-exports. The
published v0.7.1 of `uselesskey-hmac` does not have this path, so
`cargo publish --dry-run -p uselesskey-core-hmac-spec` would resolve
its dep against registry v0.7.1 and fail with `E0433: cannot find
'srp' in 'uselesskey_hmac'`.

Bump both crates to v0.7.2 so the live publish lane resolves the shim
against the new (v0.7.2) `uselesskey-hmac` that ships in the same wave.
Downstream consumers (`uselesskey`, `uselesskey-jsonwebtoken`,
`uselesskey-jose-openid`, `uselesskey-rustcrypto`, `uselesskey-cli`,
`uselesskey-interop-tests`) keep their existing `version = "0.7.1"`
constraint — cargo treats it as `^0.7.1`, which accepts v0.7.2.

`publish-check` once this PR lands: the v0.7.2 publish of
`uselesskey-hmac` precedes the v0.7.2 publish of
`uselesskey-core-hmac-spec` (already enforced by PUBLISH_CRATES
topological order), so the shim's dry-run finds the new `srp::spec`
path on the registry.
EffortlessSteven added a commit that referenced this pull request May 12, 2026
…::srp::pki (#598)

* refactor(rustls): fold core-rustls-pki into uselesskey-rustls::srp::pki

Inverts the dep direction between `uselesskey-rustls` and
`uselesskey-core-rustls-pki`. The `RustlsPrivateKeyExt`,
`RustlsCertExt`, and `RustlsChainExt` traits and their impls for
RSA, ECDSA, Ed25519, and X.509 fixture types now live in
`crates/uselesskey-rustls/src/srp/pki.rs`;
`uselesskey-core-rustls-pki` becomes a thin re-export shim
re-exporting `uselesskey_rustls::srp::pki::*` to preserve the
v0.7.x public-internal surface for downstream pinners.

This matches the v0.7.0 fold pattern established for `core-cache`,
`core-id`, `core-hash`, `core-factory`, `token-spec`, etc. (#565-#570
and follow-ups) and the v0.8.0 hmac-spec fold (#595) where the owner
crate took canonical ownership and the previously-published microcrate
became a compatibility shim.

Mechanical changes:

- New `crates/uselesskey-rustls/src/srp/{mod.rs,pki.rs}` carry the
  three extension traits, all impl blocks, and the inline
  `#[cfg(test)] mod tests` blocks.
- `crates/uselesskey-rustls/src/lib.rs` declares `pub mod srp` (doc-
  hidden) and re-exports the pki traits at the top level. The public
  `uselesskey_rustls::{RustlsPrivateKeyExt, RustlsCertExt,
  RustlsChainExt}` path is unchanged.
- `uselesskey-rustls/Cargo.toml` drops the dep on
  `uselesskey-core-rustls-pki` and gains a direct `rustls-pki-types`
  dep; per-key-type feature flags drop the
  `uselesskey-core-rustls-pki/*` re-export legs.
- `uselesskey-core-rustls-pki/src/lib.rs` is now a thin shim:
  `pub use uselesskey_rustls::srp::pki::*`. Its Cargo.toml drops the
  direct rustls-pki-types and key-type deps, adds
  `uselesskey-rustls.workspace = true`, and routes its features to
  `uselesskey-rustls/*`.
- The shim's `tests/{integration,deterministic,snapshots_rustls_pki}.rs`
  and snapshot files move under `crates/uselesskey-rustls/tests/`.
  Snapshot file names and contents are preserved (same deterministic
  seed `uselesskey-rustls-pki-snap-seed-v1`); only the Rust import
  paths are rewritten from `uselesskey_core_rustls_pki::*` to
  `uselesskey_rustls::*`.
- `xtask::PUBLISH_CRATES` moves `uselesskey-core-rustls-pki` to a
  post-`uselesskey-rustls` slot under a "rustls compatibility shim"
  comment, matching `uselesskey-core-hmac-spec` after the hmac fold.
- `xtask::plan::dependents()` makes `uselesskey-core-rustls-pki` a
  leaf and adds it as a `uselesskey-rustls` dependent (so a rustls
  source change still triggers a shim rebuild).
- `docs/explanation/architecture.md`,
  `docs/metadata/workspace-docs.json`, and
  `docs/reference/support-matrix.md` describe the crate as a
  compatibility shim.

Both `uselesskey-rustls` and `uselesskey-core-rustls-pki` bump to
0.7.2 so the shim's re-export of `uselesskey_rustls::srp::pki`
resolves against a registry version that ships the new path:
`cargo publish --dry-run -p uselesskey-core-rustls-pki` would otherwise
resolve against the published v0.7.1 of `uselesskey-rustls`, which
does not have `srp::pki`, and fail with `E0432: unresolved imports`.

Downstream consumers (`uselesskey`, `uselesskey-bdd-steps`,
`uselesskey-interop-tests`) keep their existing `version = "0.7.1"`
constraint — cargo treats it as `^0.7.1`, which accepts v0.7.2.

This is PR-2 of the v0.8.0 SRP collapse lane. The shim crate stays
published for v0.7.x compat and is scheduled for removal in a later
v0.8.0 PR.

* docs(rustls): bump version snippets to 0.7.2 for the rustls fold

The `uselesskey-rustls` v0.7.2 bump (PR-2 of the v0.8.0 SRP collapse
lane) outpaces the workspace-wide `release_version: "0.7.1"` field
in `docs/metadata/workspace-docs.json`, which docs-sync uses to render
all dependency snippets uniformly. The preflight `doc-versions` lane
checks each rendered snippet against the per-crate
`Cargo.toml` version, so a uniform `0.7.1` snippet for
`uselesskey-rustls` would fail against its bumped manifest.

Add an optional `version` override to `SnippetDependency`, route it
through `render_single_dependency_snippet`, and set the override to
`"0.7.2"` on the `uselesskey-rustls` snippet entry. The other deps
in the same snippets continue to render against the workspace-wide
`release_version` field. Regenerate the README and how-to dependency
blocks accordingly.

This same pattern can be reused on subsequent SRP-fold PRs where a
single fold-target crate bumps ahead of the rest of the workspace.

* xtask(docs-sync): add per-dep version override test

Adds a unit test exercising the new optional `version` field on
`SnippetDependency`, locking in the SRP-fold pattern where a single
crate has been bumped ahead of the workspace-wide `release_version`
(e.g. v0.8.0 SRP folds where one crate goes to 0.7.2 while the rest
of the workspace stays on 0.7.1) so future regressions on the
override path are caught in `cargo test -p xtask`.

Also fixes the existing snippet-rendering test to provide the new
`version: None` field after the struct literal added the field.
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