Skip to content

ci: fail main when library code is merged but never released - #21

Merged
VickyXAI merged 1 commit into
mainfrom
ci/release-gate
Aug 4, 2026
Merged

ci: fail main when library code is merged but never released#21
VickyXAI merged 1 commit into
mainfrom
ci/release-gate

Conversation

@VickyXAI

@VickyXAI VickyXAI commented Aug 4, 2026

Copy link
Copy Markdown
Contributor

Why

This has bitten twice, in the last hour, on the same repo:

PR merged VERSION after consumers got
#9 — Solana paid GETs stuck at 0.19.1 the broken version
#17 — paid-GET caching stuck at 0.19.3 the version that re-pays

Both PRs said "VERSION/CHANGELOG intentionally untouched — left for /ship". /ship never ran. The Go module proxy only serves tags, so merged is not released: the repo looked fixed while every consumer stayed broken.

The second miss was caught by a human noticing v0.19.3 was 4 commits behind main. That is not a control.

What it checks

On push to main, two conditions fail the job:

  1. VERSION bumped, no matching tag — a release started and abandoned partway.
  2. Non-test .go files changed since the latest tag — library code users cannot go get.

The error output names the unreleased files and lists the commits, so the fix is obvious from the log alone.

Backtested against real history

Not hypothetical — I ran the logic against actual commits in this repo:

commit state result
origin/main today 0.19.4, fully released PASS
eee32bf release 0.19.2 PASS
942a267 #9 merged, unreleased FAIL(the 1st real miss)
26d2809 #17 merged, unreleased FAIL(the 2nd real miss)

It catches exactly the two moments it was written for, and stays quiet otherwise.

Deliberately not gated

Expected to be red sometimes

Between merging library code and cutting the release, this job will be red. That red is the point: it is the repo saying users don't have this yet. It goes green when you release. The workflow comment says so, so nobody "fixes" it by deleting it.

Follows the commenting style of brand-numbers.yml, which likewise explains why the check exists rather than just what it runs.

bash -n clean.

Twice now a user-visible fix merged, VERSION stayed put, no tag was
pushed, and go get kept serving the broken version:

  #9  (Solana paid GETs)  merged -> VERSION stuck at 0.19.1
  #17 (paid-GET caching)  merged -> VERSION stuck at 0.19.3

Both PRs said "VERSION/CHANGELOG left for /ship" and /ship never ran. The
Go module proxy only serves tags, so merged is not released — the repo
looked fixed while every consumer stayed broken. Remembering has now
failed twice; this makes the state visible instead.

Two conditions fail the job:

  - VERSION bumped with no matching tag (a release started and abandoned)
  - non-test .go files changed since the latest tag (code users cannot get)

Backtested against real history: passes on every release commit and on
today's main, fails on both 942a267 and 26d2809 — the two commits where
the miss actually happened.

Test-only, docs, CI and config diffs are excluded; they ship nothing to
consumers. PRs are not gated, since this repo's convention is that PRs
leave VERSION alone.

The job is expected to be red between merging library code and cutting
the release. That red is the signal.
@VickyXAI
VickyXAI merged commit 9fb4470 into main Aug 4, 2026
1 check passed
@VickyXAI
VickyXAI deleted the ci/release-gate branch August 4, 2026 04:54
VickyXAI pushed a commit that referenced this pull request Aug 4, 2026
Ships the no-wallet guard hoist from #19 (closes #15). Also on main since
0.19.4, neither shipping library code: #20 corrects the README FAQ that
told Solana users the Go SDK was Base-only, and #21 adds the release gate
that flagged this very commit as missing.

First release caught by that gate rather than by a human noticing the tag
had fallen behind.
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