From 78d9942710bc37b441de1521b8627d10631d00f5 Mon Sep 17 00:00:00 2001 From: Eden Zimbelman Date: Tue, 27 Oct 2026 15:46:23 -0700 Subject: [PATCH] fix: ignore development version suffixes when checking for updates Development builds use "git describe" versions such as v4.11.0-9-g154975a, and feature builds are tagged as v4.11.0-example-feature. Both are cut on top of the v4.11.0 release, but semver orders them before it, so the update check suggested "upgrading" to the release they're built from. The prerelease suffix of the current version is now ignored when comparing, since our versioning doesn't increment the version before attaching rc or feature tags. Newer stable releases are still suggested. Co-Authored-By: Claude --- internal/update/semver.go | 6 +++++- internal/update/semver_test.go | 15 +++++++++++++++ 2 files changed, 20 insertions(+), 1 deletion(-) diff --git a/internal/update/semver.go b/internal/update/semver.go index 564c3dc5..32d864d3 100644 --- a/internal/update/semver.go +++ b/internal/update/semver.go @@ -15,12 +15,15 @@ package update import ( + "strings" + "golang.org/x/mod/semver" "github.com/slackapi/slack-cli/internal/slackerror" ) -// SemVerGreaterThan returns true if release is greater than current +// SemVerGreaterThan returns true if release is greater than current, ignoring +// prerelease and development suffixes of current func SemVerGreaterThan(release string, current string) (bool, error) { r := ensureVPrefix(release) c := ensureVPrefix(current) @@ -32,6 +35,7 @@ func SemVerGreaterThan(release string, current string) (bool, error) { return false, slackerror.New(slackerror.ErrInvalidSemVer). WithMessage("Value %s is not a semantic version", current) } + c = strings.TrimSuffix(semver.Canonical(c), semver.Prerelease(c)) return semver.Compare(r, c) > 0, nil } diff --git a/internal/update/semver_test.go b/internal/update/semver_test.go index 348a0cd4..fe005038 100644 --- a/internal/update/semver_test.go +++ b/internal/update/semver_test.go @@ -63,6 +63,21 @@ func Test_Update_SemVerGreaterThan(t *testing.T) { v2: "2.0.1", expected: false, }, + "same release of a development build is not greater": { + v1: "v4.11.0", + v2: "v4.11.0-9-g154975a", + expected: false, + }, + "newer release of a development build is greater": { + v1: "v4.12.0", + v2: "v4.11.0-9-g154975a", + expected: true, + }, + "same release of a feature build is not greater": { + v1: "v4.11.0", + v2: "v4.11.0-example-feature", + expected: false, + }, "invalid first version errors": { v1: "dev", v2: "2.0.1",