From e51bb1889d2405ea2ea9510bf891974821ee4d6a Mon Sep 17 00:00:00 2001 From: Bob Date: Tue, 26 May 2026 21:43:53 +0000 Subject: [PATCH] fix(ci): follow higher prerelease line when one already exists MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit If a prerelease for a version above the stable-bump target exists (e.g. v0.14.0b1 already published but latest_stable=v0.13.2 → patch bump would give v0.13.3), the workflow now detects the higher prerelease and continues that release line (v0.14.0b2) instead of creating a stale v0.13.3b1. Fixes ActivityWatch/activitywatch#1307 --- .github/workflows/dev-release.yml | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/.github/workflows/dev-release.yml b/.github/workflows/dev-release.yml index 10ea77242..bb130d016 100644 --- a/.github/workflows/dev-release.yml +++ b/.github/workflows/dev-release.yml @@ -85,6 +85,22 @@ jobs: fi next_base=$(bump_version "${latest_stable#v}" "$RELEASE_LINE") + + # If a prerelease for a version ahead of next_base already exists, continue + # that release line instead of starting a new one from the stable bump. + # e.g. latest_stable=v0.13.2 + patch → v0.13.3, but if v0.14.0b1 already + # exists we should produce v0.14.0b2, not v0.13.3b1. + highest_prerelease=$(git tag --sort=-version:refname | grep -E '^v[0-9]+\.[0-9]+\.[0-9]+b[0-9]+$' | head -1 || true) + if [ -n "$highest_prerelease" ]; then + hp_base="${highest_prerelease%%b*}" + hp_base="${hp_base#v}" + if [ "$(printf '%s\n%s\n' "$hp_base" "$next_base" | sort -V | tail -1)" = "$hp_base" ] && \ + [ "$hp_base" != "$next_base" ]; then + echo "Existing prerelease $highest_prerelease is ahead of computed v${next_base}; continuing that release line." + next_base="$hp_base" + fi + fi + prerelease_pattern="^v${next_base//./\\.}b[0-9]+$" last_prerelease=$(git tag --sort=-version:refname | grep -E "$prerelease_pattern" | head -1 || true)