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",