Skip to content

ci(release): move the floating vN tag on publish - #12

Merged
vyncint merged 3 commits into
mainfrom
move-the-v1-tag-on-release
Aug 22, 2026
Merged

ci(release): move the floating vN tag on publish#12
vyncint merged 3 commits into
mainfrom
move-the-v1-tag-on-release

Conversation

@vyncint

@vyncint vyncint commented Aug 22, 2026

Copy link
Copy Markdown
Owner

v1 has been sitting on 1.0.2 through both 1.1.0 and 1.2.0.

The README tells users to write vyncint/launchbound/action@v1, so that tag is the contract for everyone who followed the documentation. Moving it was a manual step, and a manual step in a release is a step that gets skipped.

The effect was not cosmetic. The only difference in the action between 1.0.2 and 1.2.0 is the default reconverge-version:

-    default: "0.1.11"
+    default: "0.3.0"

So every consumer on the documented ref — including vyncint/launchbound-action-demo, which exists to exercise this action — has been gating with reconverge 0.1.11, while pinning 0.3.0 was 1.2.0's entire subject. And reconverge's behaviour did move across that range: vyncint/simt-diff has recorded four corpus entries changing from warning to confirmed since 0.1.6.

The fix

A float-major-tag job that runs after a successful publish and only on a tag push, so the floating tag can never point at a release that did not reach crates.io. The workflow's trigger requires three numeric components (v[0-9]*.[0-9]*.[0-9]*), so pushing v1 cannot re-enter the workflow.

Derivation checked for v1.2.0 → v1, v10.3.1 → v10, v2.0.0-rc1 → v2.

v1 still needs moving once by hand for the releases that already shipped; this only prevents the next one.

Caught by

A new drift check in launchbound-action-demo that compares action/action.yml at @v1 against the newest release tag — the one question the demo could not ask, because it uses @v1 on purpose (a demo should exercise what users copy).

The README tells users to write `vyncint/launchbound/action@v1`, which
makes that tag the contract for everyone who followed the documentation.
Moving it was a manual step, and a manual step in a release is a step
that gets skipped: v1 sat on 1.0.2 through both 1.1.0 and 1.2.0.

The effect was not cosmetic. The only thing that changed in the action
between 1.0.2 and 1.2.0 is the default reconverge-version, 0.1.11 to
0.3.0 -- so every consumer on the documented ref, including the demo
repository that exists to exercise this action, kept gating with the old
analyzer while 1.2.0's entire subject was moving that pin.

Runs after a successful publish only, and only on a tag push, so the
floating tag can never point at a release that did not reach crates.io.
The workflow's trigger requires three numeric components, so pushing v1
cannot re-enter it.

Signed-off-by: Vyncint Ng <115854244+vyncint@users.noreply.github.com>
Each tool has a repository that exercises it against a real subject, and
each of those resolves "latest" from crates.io on a schedule of its own --
so a new version is picked up without anything being edited, but only at
the next tick. That is up to a day for the daily checks and up to a week
for the weekly ones.

A repository_dispatch on publish starts the deep run immediately. It is
best-effort on purpose: continue-on-error, and a missing token is a
notice rather than a failure. The schedules stay exactly as they were,
because a dispatch that never arrives -- an expired token, a release cut
by hand, a fork without the secret -- must cost latency and nothing else.
A published crate is published whether or not the notification landed.

Needs a PAT with contents: write on the testing repository, stored as
TESTING_REPO_DISPATCH_TOKEN. Without it the job says so and exits clean.

Signed-off-by: Vyncint Ng <115854244+vyncint@users.noreply.github.com>
zizmor audits at pedantic level, where a job without a `name:` is an
anonymous-definition finding.

Signed-off-by: Vyncint Ng <115854244+vyncint@users.noreply.github.com>
@vyncint
vyncint merged commit 55ad8dd into main Aug 22, 2026
8 checks passed
@vyncint
vyncint deleted the move-the-v1-tag-on-release branch August 22, 2026 06:01
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