feat(ci): ship binaries for every binary crate, not just resq-cli - #217
Merged
Merged
Conversation
resq-bin, resq-clean, resq-flame and resq-perf each declare a [[bin]] and each got a tag and a GitHub Release on every publish — carrying `assets: 0`. They are installable tools that shipped no installable artifact. Verified on the v0.1.22 releases cut today. Two things had to change together. release.yml only ever released resq-cli: the guard rejected any other tag and the build hardcoded `-p resq-cli` and `bin="resq"`. It now derives the crate from the tag and the binary name from `cargo metadata`. The metadata lookup is not incidental — resq-cli's [[bin]] is `resq`, so deriving the binary from the crate name would look correct and break for exactly one crate. release-plz.toml is the half that makes it possible. The four siblings were inheriting the [workspace] default `git_release_enable = true`, so release-plz created AND published their releases itself. Published releases are immutable here, so release.yml could never have attached anything to them however the guard was written. They now set `git_release_enable = false` like resq-cli, handing the draft -> upload -> publish lifecycle to release.yml. The dispatch hop in release-plz.yml selects the same five crates, so a library crate never dispatches a binary build. resq-cli keeps its historical doubled asset name (resq-cli-resq-cli-v…). Renaming mid-stream would break hardcoded download URLs at an arbitrary version boundary and immutable releases cannot be retrofitted to match; the newly onboarded crates have no such history and start clean. Unchanged: the dry_run default of true, the -f dry_run=false dispatch, persist-credentials: false, fetch-depth: 0.
|
Warning Review limit reachedNext included review available in 44 minutes. View limit detailsLimit details: You’ve used the included review currently available. You've used all free OSS reviews for now. Wait for the free limit to reset to keep reviewing this public repository. Review configuration: ⚙️ Run configurationConfiguration used: defaults Review profile: CHILL Plan: Advanced Run ID: 📒 Files selected for processing (3)
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. Comment |
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.
Why
resq-bin,resq-clean,resq-flameandresq-perfeach declare a[[bin]], and each has received a git tag and a GitHub Release on every publish — every one carryingassets: 0. They are installable tools that have never shipped an installable artifact. Confirmed on thev0.1.22releases cut today.Two halves, and both are required
release.ymlonly ever released resq-cli. The guard rejected any tag not matchingresq-cli-v*, and the build hardcoded-p resq-cliandbin="resq". It now derives the crate from the tag and looks the binary name up fromcargo metadata.That lookup is not incidental.
resq-cli's[[bin]]isresq, notresq-cli— so deriving the binary from the crate name would read as obviously correct and then fail at thecp, for exactly one crate:[[bin]]resq-cliresqresq-bin/resq-clean/resq-flame/resq-perfrelease-plz.tomlis the half that makes it possible. The four siblings were inheriting the[workspace]defaultgit_release_enable = true, so release-plz created and published their releases itself. Releases are immutable in this org, sorelease.ymlcould never have attached assets to them no matter how the guard was written — the fix had to start here. They now carrygit_release_enable = falselikeresq-cli, handing the draft → upload → publish lifecycle torelease.yml.release-plz.yml's dispatch hop selects the same five crates, so a library crate never dispatches a binary build.Three places now encode the same list — the
guardallowlist,release-plz.toml, and the jq filter. Each carries a comment pointing at the other two, and the failure modes are spelled out: a crate missing from the filter gets a bare release with no binaries; a crate in the filter but not inrelease-plz.tomlgets published by release-plz first and then fails loudly inrelease.ymlrather than silently shipping nothing.On the asset name
resq-clikeeps its historical doubled name (resq-cli-resq-cli-v…). Renaming mid-stream would break any hardcoded download URL at an arbitrary version boundary, and immutable releases cannot be retrofitted to match. The newly onboarded crates have no such history and start with the clean<tag>-<target>form. The asymmetry is commented at the point it happens.Deliberately unchanged
dry_rundefaulting totrue; the-f dry_run=falsedispatch;persist-credentials: false;fetch-depth: 0.Test plan
actionlintclean on both workflowsresq-tui,resq-dsa,resq-ai,v1.0.0, and malformed tagsresq-cli-v0.4.3 → resq-cli,resq-perf-v0.1.22 → resq-perfcargo metadatafor all five, including theresq-cli → resqcasereleasespayload — selectsresq-cli/resq-bin, excludesresq-tui/resq-dsacargo build -p resq-bin --bin resq-binsucceeds