ci(release): stop the rolling release collecting a .deb per version - #296
Merged
Conversation
The rolling release held eighteen assets: seven .debs going back to 0.8.0 and five under the old product name, against six current builds. `--clobber` and `action-gh-release` replace an asset by name, and `cargo-deb` puts the version in the filename, so the .deb was the only artifact that could not overwrite itself. The rolling release now uploads a second copy under a fixed name, kept outside `dist/` so the tagged upload's `dist/*.deb` still means exactly one versioned file — a tag is a version and its assets should say so. A prune step clears what has already piled up, matching only the versioned debs and the old product name. Narrow on purpose: the four platform jobs upload into `latest` in parallel, so deleting anything outside a current set would race them. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
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 the rolling release actually holds
Eighteen assets, six of which are the current build:
It is described as "rolling build of
main— rebuilt and re-published on every push, so this is always the newest code". Someone landing there gets a .deb picker spanning four weeks and five files named after an app this is not called any more.Why
--clobberandaction-gh-releaseboth replace an asset by name, andcargo-debputs the version in the filename. Every other platform emits a fixed name and has been overwriting itself correctly all along; the .deb is the only one that could not.Fix
A stable name for the rolling copy. The build makes a second copy at
dist/rolling/HookEcho-amd64.deb, and the rolling release uploads that. It is deliberately outsidedist/, so the tagged upload'sdist/*.debstill means exactly one versioned file — a tag is a version, and its assets should say so.A prune step for what has already accumulated, matching two patterns and nothing else:
hookecho_<version>_amd64.deb— the versioned debs, now supersededHook_Echo-WX-*— the old product name, last built 2026-08-26Deliberately narrow rather than "delete anything not in the current set": the four platform jobs upload into
latestin parallel, so a set-based prune would race them and delete a build that had landed seconds earlier. These two patterns cannot match a live asset.Verification
The patterns were run against the live release:
12 matched, and exactly the six current assets survive.
python3 -c "import yaml; yaml.safe_load(...)"parses the workflow.The prune runs after the upload in the same job, so the newly uploaded
HookEcho-amd64.debis in place before the versioned one it replaces is removed.🤖 Generated with Claude Code