Skip to content

Commit 0885431

Browse files
authored
fix semver parse problem (Azure#18185)
1 parent 7c0cf63 commit 0885431

File tree

4 files changed

+18
-41
lines changed

4 files changed

+18
-41
lines changed

eng/tools/smoketests/cmd/models.go

Lines changed: 0 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,5 @@
11
package cmd
22

3-
import "fmt"
4-
53
type ConfigFile struct {
64
Packages []Package
75
}
@@ -17,22 +15,3 @@ type Module struct {
1715
Version string
1816
Replace string
1917
}
20-
21-
type SemVer struct {
22-
Major, Minor, Patch int
23-
}
24-
25-
func (s SemVer) Newer(s2 SemVer) bool {
26-
if s.Major > s2.Major {
27-
return true
28-
} else if s.Major == s2.Major && s.Minor > s2.Minor {
29-
return true
30-
} else if s.Major == s2.Major && s.Minor == s2.Minor && s.Patch > s2.Patch {
31-
return true
32-
}
33-
return false
34-
}
35-
36-
func (s SemVer) String() string {
37-
return fmt.Sprintf("v%d.%d.%d", s.Major, s.Minor, s.Patch)
38-
}

eng/tools/smoketests/cmd/root.go

Lines changed: 15 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -12,9 +12,9 @@ import (
1212
"path/filepath"
1313
"regexp"
1414
"runtime"
15-
"strconv"
1615
"strings"
1716

17+
"github.com/Masterminds/semver"
1818
"github.com/spf13/cobra"
1919
)
2020

@@ -106,40 +106,35 @@ func getAllTags() []string {
106106
return strings.Split(res, "\n")
107107
}
108108

109-
// Convert a string to an integer and handle errors
110-
func toInt(a string) int {
111-
r, err := strconv.Atoi(a)
112-
handle(err)
113-
return r
114-
}
115-
116109
// Create a new SemVer type
117-
func NewSemVerFromTag(s string) SemVer {
110+
func NewSemVerFromTag(s string) (*semver.Version, error) {
118111
path := strings.Split(s, "/")
119112
versionStr := path[len(path)-1]
120113
versionStr = strings.TrimLeft(versionStr, "v")
121-
parts := strings.Split(versionStr, ".")
122-
return SemVer{
123-
Major: toInt(parts[0]),
124-
Minor: toInt(parts[1]),
125-
Patch: toInt(parts[2]),
126-
}
114+
return semver.NewVersion(versionStr)
127115
}
128116

129117
// Find the most recent SemVer tag for a given package.
130118
func findLatestTag(p string, tags []string) (string, error) {
131-
var v SemVer
119+
var v *semver.Version
120+
var err error
132121
for i, tag := range tags {
133122
if strings.Contains(tag, p) {
134-
v = NewSemVerFromTag(tag)
123+
v, err = NewSemVerFromTag(tag)
124+
if err != nil {
125+
return "", fmt.Errorf("could not parse version for tag %s", tag)
126+
}
135127
for strings.Contains(tags[i+1], p) {
136-
newV := NewSemVerFromTag(tags[i+1])
137-
if newV.Newer(v) {
128+
newV, err := NewSemVerFromTag(tags[i+1])
129+
if err != nil {
130+
return "", fmt.Errorf("could not parse version for tag %s", tags[i+1])
131+
}
132+
if newV.GreaterThan(v) {
138133
v = newV
139134
}
140135
i += 1
141136
}
142-
return v.String(), nil
137+
return "v" + v.String(), nil
143138
}
144139
}
145140
return "", fmt.Errorf("could not find a version for module %s", p)

eng/tools/smoketests/go.mod

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ go 1.17
55
require github.com/spf13/cobra v1.4.0
66

77
require (
8+
github.com/Masterminds/semver v1.5.0
89
github.com/inconshreveable/mousetrap v1.0.0 // indirect
910
github.com/spf13/pflag v1.0.5 // indirect
1011
)

eng/tools/smoketests/go.sum

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
github.com/Masterminds/semver v1.5.0 h1:H65muMkzWKEuNDnfl9d70GUjFniHKHRbFPGBuZ3QEww=
2+
github.com/Masterminds/semver v1.5.0/go.mod h1:MB6lktGJrhw8PrUyiEoblNEGEQ+RzHPF078ddwwvV3Y=
13
github.com/cpuguy83/go-md2man/v2 v2.0.1/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o=
24
github.com/inconshreveable/mousetrap v1.0.0 h1:Z8tu5sraLXCXIcARxBp/8cbvlwVa7Z1NHg9XEKhtSvM=
35
github.com/inconshreveable/mousetrap v1.0.0/go.mod h1:PxqpIevigyE2G7u3NXJIT2ANytuPF1OarO4DADm73n8=

0 commit comments

Comments
 (0)