From 70a34b76fff77cb8ec025c6cf77737ce39c2bae1 Mon Sep 17 00:00:00 2001 From: Nigel Tatschner Date: Sun, 24 May 2026 14:45:21 +0100 Subject: [PATCH] fix(release): use bare_version for prerelease flag (tray- prefix has dash) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Every tray release since the release-tracks split (PR #91) was silently mis-flagged as 'pre-release' on the GitHub Releases page. Root cause: 'prerelease: ${{ contains(github.ref_name, '-') }}'. The check was designed for the pre-split 'vX.Y.Z[-channel.N]' tag schema where only pre-releases contained a hyphen. Post-split, the tag is 'tray-vX.Y.Z[-channel.N]' — the 'tray-' prefix itself contains a hyphen, so contains() returned true for EVERY tray release including bare-semver live ones. Consequence: the 'Latest' badge on GitHub's releases page stayed on the last correctly-flagged pre-split release ('v1.8.3', from 2026-05-23) all the way through tray-v1.8.5 and tray-v1.8.6 live cutovers. Users browsing the public releases page saw v1.8.3 as latest, with tray-v1.8.6 buried under the pre-release section. Fix: use needs.validate-tag.outputs.bare_version, which is the semver part with both 'tray-' AND leading 'v' stripped. Live releases produce '1.8.6' (no hyphen), pre-releases produce '1.8.6-rc.1' (hyphen). Also fixed manually outside this PR: gh release edit tray-v1.8.6 --prerelease=false --latest=true gh release edit tray-v1.8.5 --prerelease=false so the public Releases page shows the correct Latest badge now. The intervening pre-release tags stay flagged correctly. Surfaced 2026-05-24 by user observing 'the tray didnt get a release' on the GitHub UI after the v1.8.6 live cutover. --- .github/workflows/release.yml | 17 +++++++++++++---- 1 file changed, 13 insertions(+), 4 deletions(-) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 0d7adc5..b84d2de 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -378,10 +378,19 @@ jobs: tag_name: ${{ github.ref_name }} name: ${{ github.ref_name }} draft: true - # Anything with a hyphen (rc, beta, alpha, etc.) is a pre-release; - # only bare semver like tray-v0.2.0 gets marked Latest on the - # GH releases page. - prerelease: ${{ contains(github.ref_name, '-') }} + # Anything with a hyphen in the SEMVER part (rc, beta, alpha, + # etc.) is a pre-release; only bare semver like tray-v0.2.0 + # gets marked Latest on the GH releases page. + # + # Critical: check `bare_version` (the part after `tray-v`), + # NOT `github.ref_name`. The `tray-` prefix itself contains + # a hyphen, so `contains(github.ref_name, '-')` returned true + # for EVERY tray release including bare-semver live ones, + # silently mis-flagging every post-split tray release as + # pre-release. Latest-badge stuck on the pre-split v1.8.3 + # tag until tray-v1.8.6 (2026-05-24) — see + # release-yml-prerelease-flag fix below. + prerelease: ${{ contains(needs.validate-tag.outputs.bare_version, '-') }} # `generate_release_notes: false` — our per-component changelog # in release-body.md replaces GH's auto-generated notes, which # would otherwise leak platform-only commits into the tray