diff --git a/cli/version/compatibility.go b/cli/version/compatibility.go index 951ca4c398ee3..e08928c5a662c 100644 --- a/cli/version/compatibility.go +++ b/cli/version/compatibility.go @@ -1,11 +1,5 @@ package version -import ( - "fmt" - - "github.com/Masterminds/semver" -) - const ( untaggedBuild = "for untagged builds, server and cli versions should match" taggedBuild = "cli version (major.minor) should be equal or ahead of server version, please update cli" @@ -43,11 +37,7 @@ func (v *Version) CheckCLIServerCompatibility() (compatible bool, reason string) if v.Server != "" && v.ServerSemver != nil { // cli is also tagged build if v.CLI != "" && v.CLISemver != nil { - c, err := semver.NewConstraint(fmt.Sprintf(">=%s", v.ServerSemver.String())) - if err != nil { - return false, "parsing server as constraint failed" - } - if c.Check(v.CLISemver) { + if (v.CLISemver.Major() >= v.ServerSemver.Major()) && (v.CLISemver.Minor() >= v.ServerSemver.Minor()) { return true, taggedBuild } return false, taggedBuild diff --git a/cli/version/compatibility_test.go b/cli/version/compatibility_test.go index 5de30093a030c..f88de88796204 100644 --- a/cli/version/compatibility_test.go +++ b/cli/version/compatibility_test.go @@ -17,6 +17,10 @@ func TestCheckCLIServerCompatibility(t *testing.T) { {"no cli and server version", "", "", false, noCLIVersion}, {"tagged version exact match", "v1.2.4", "v1.2.4", true, taggedBuild}, {"tagged version major.minor match", "v1.3.4", "v1.3.1", true, taggedBuild}, + {"tagged version with server pre-release, major.minor match", "v1.3.4", "v1.3.4-alpha13", true, taggedBuild}, + {"tagged version with cli pre-release major.minor match", "v1.3.4-alpha13", "v1.3.4", true, taggedBuild}, + {"tagged version with cli and server pre-release major.minor match", "v1.3.4-alpha13", "v1.3.4-alpha13", true, taggedBuild}, + {"tagged version with cli and server pre-release major.minor match", "v1.3.1-alpha13", "v1.3.4-alpha16", true, taggedBuild}, {"tagged version major.minor mismatch, server ahead", "v2.1.8", "v7.2.9", false, taggedBuild}, {"tagged version major.minor mismatch, server behind, different major", "v2.1.8", "v1.1.1", true, taggedBuild}, {"tagged version major.minor mismatch, server behind, same major", "v2.1.8", "v2.0.1", true, taggedBuild},