ci(nightly): version betas as the next patch of the latest stable#51
Conversation
A nightly built after stable X.Y.Z used to be numbered X.Y.Z-beta.N, which semver-sorts *below* the stable it was built from — the version told the opposite of the truth. The beta base is now the next patch of the latest stable (stable 1.2.3 → nightly 1.2.4-beta.1), so nightlies sort above the stable they follow, and a later stable in turn sorts above all earlier nightlies. N still continues from the highest existing `-beta.*` tag for the base; every new stable moves the base and resets N. The base can never collide with an existing stable tag: if vX.Y.(Z+1) existed, it would itself be the latest stable. Update delivery is untouched: Sparkle orders items by the date-stamped `CFBundleVersion`, so beta followers already receive a newer stable (and keep their channel preference); this change only makes the marketing version tell the same story as the build order. Also fold in two doc corrections the change surfaced: the Release workflow's version input now says the auto-bump uses the latest *stable* tag (under the new scheme the newest tag is almost always a beta), and RELEASING.md's failure-recovery advice no longer suggests deleting a stale tag/release — releases are immutable, so a published tag name is burned forever, and `compute_version.sh` derives both the stable auto-bump and the beta base from live tags, meaning a deletion makes the next run recompute exactly the burned name and fail until a newer version moves past it. Signed-off-by: Kevin Cui <bh@bugs.cc>
|
No actionable comments were generated in the recent review. 🎉 ℹ️ Recent review info⚙️ Run configurationConfiguration used: Organization UI Review profile: CHILL Plan: Pro Run ID: 📒 Files selected for processing (4)
Summary by CodeRabbit
WalkthroughType: Documentation and script logic update Description: This change updates the beta versioning scheme so the beta base version is computed as the next patch of the latest stable tag (X.Y.(Z+1)-beta.N) rather than the latest stable version directly. Changes
Related PRs: None identified. Suggested labels: documentation, ci Suggested reviewers: None identified. Poem 🚥 Pre-merge checks | ✅ 4✅ Passed checks (4 passed)
✨ Finishing Touches✨ Simplify code
Comment |
A nightly built after stable
X.Y.Zused to be numberedX.Y.Z-beta.N, which semver-sorts below the stable it was built from — the version told the opposite of the truth. The beta base is now the next patch of the latest stable (stable1.2.3→ nightly1.2.4-beta.1), so nightlies sort above the stable they follow, and a later stable in turn sorts above all earlier nightlies (1.3.0 > 1.2.4-beta.N, and even1.2.4 > 1.2.4-beta.N— release beats pre-release).Nstill continues from the highest existing-beta.*tag for the base; every new stable moves the base and resetsN. The base can never collide with an existing stable tag: ifvX.Y.(Z+1)existed, it would itself be the latest stable.Update delivery is untouched: Sparkle orders appcast items by the date-stamped
CFBundleVersion, so beta followers already receive a newer stable when one ships (and keep their channel preference across the update) — this change only makes the marketing version tell the same story as the build order. Migration is clean too: the existing old-scheme tags (v1.5.1-beta.*) don't feed the new base, so the first nightly after this lands is simplyv1.6.1-beta.1. Verifiedcompute_version.shagainst throwaway repos covering the migration state, N continuation/reset,patch > 9version sorting, backfill rejection, and the re-publish guard.Two doc corrections the change surfaced are folded in: the Release workflow's version input now says the auto-bump uses the latest stable tag (under the new scheme the newest tag is almost always a beta), and RELEASING.md's failure-recovery advice no longer suggests deleting a stale tag/release — releases are immutable, so a published tag name is burned forever, and
compute_version.shderives both the stable auto-bump and the beta base from live tags, meaning a deletion makes the next run recompute exactly the burned name and fail until a newer version moves past it.