Skip to content

feat: add version checking to CLI #2643

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 18 commits into from
Jun 29, 2022
Prev Previous commit
Next Next commit
Revert "use semver"
This reverts commit 9a9bae1.
  • Loading branch information
sreya committed Jun 24, 2022
commit cc6baed55547304448a995eb8fadeab8632d6e34
19 changes: 17 additions & 2 deletions buildinfo/buildinfo.go
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ package buildinfo
import (
"fmt"
"runtime/debug"
"strings"
"sync"
"time"

Expand Down Expand Up @@ -60,11 +61,25 @@ func Version() string {
func VersionsMatch(v1, v2 string) bool {
// Developer versions are disregarded...hopefully they know what they are
// doing.
if semver.Prerelease(v1) != "" || semver.Prerelease(v2) != "" {
if strings.HasPrefix(v1, develPrefix) || strings.HasPrefix(v2, develPrefix) {
return true
}

return semver.Compare(semver.MajorMinor(v1), semver.MajorMinor(v2)) == 0
v1Toks := strings.Split(v1, ".")
v2Toks := strings.Split(v2, ".")

// Versions should be formatted as "<major>.<minor>.<patch>".
// We assume malformed versions are evidence of a bug and return false.
if len(v1Toks) < 3 || len(v2Toks) < 3 {
return false
}

// Slice off the patch suffix. Patch versions should be non-breaking
// changes.
v1MajorMinor := strings.Join(v1Toks[:2], ".")
v2MajorMinor := strings.Join(v2Toks[:2], ".")

return v1MajorMinor == v2MajorMinor
}

// ExternalURL returns a URL referencing the current Coder version.
Expand Down
7 changes: 7 additions & 0 deletions buildinfo/buildinfo_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -48,6 +48,13 @@ func TestBuildInfo(t *testing.T) {
v2: "v1.2.3",
expectMatch: true,
},
// Test that we return false if a version is malformed.
{
name: "MalformedIgnored",
v1: "v1.2.3",
v2: "v1.2",
expectMatch: false,
},
// Test that we return true if a developer version is detected.
// Developers do not need to be warned of mismatched versions.
{
Expand Down