@@ -10,17 +10,16 @@ import (
10
10
"fmt"
11
11
"log"
12
12
"os/exec"
13
- "sort"
14
- "strconv"
13
+ "slices"
15
14
"strings"
16
15
17
- "github.com/Masterminds/semver/v3 "
16
+ "github.com/cockroachdb/version "
18
17
)
19
18
20
19
const remoteOrigin = "origin"
21
20
22
- func findVersions (text string ) []* semver .Version {
23
- var versions []* semver .Version
21
+ func findVersions (text string ) []version .Version {
22
+ var versions []version .Version
24
23
for _ , line := range strings .Split (text , "\n " ) {
25
24
trimmedLine := strings .TrimSpace (line )
26
25
if trimmedLine == "" {
@@ -30,7 +29,7 @@ func findVersions(text string) []*semver.Version {
30
29
if strings .Contains (trimmedLine , "-alpha.0000" ) {
31
30
continue
32
31
}
33
- version , err := semver . NewVersion (trimmedLine )
32
+ version , err := version . Parse (trimmedLine )
34
33
if err != nil {
35
34
fmt .Printf ("WARNING: cannot parse version '%s'\n " , trimmedLine )
36
35
continue
@@ -59,52 +58,36 @@ func findPreviousRelease(releaseSeries string, ignorePrereleases bool) (string,
59
58
return "" , fmt .Errorf ("zero versions found" )
60
59
}
61
60
if ignorePrereleases {
62
- var filteredVersions []* semver .Version
61
+ var filteredVersions []version .Version
63
62
for _ , v := range versions {
64
- if v . Prerelease () == "" {
63
+ if ! v . IsPrerelease () {
65
64
filteredVersions = append (filteredVersions , v )
66
65
}
67
66
}
68
67
versions = filteredVersions
69
68
}
70
- sort .Sort (semver .Collection (versions ))
71
- return versions [len (versions )- 1 ].Original (), nil
69
+ slices .SortFunc (versions , func (a , b version.Version ) int {
70
+ return a .Compare (b )
71
+ })
72
+ return versions [len (versions )- 1 ].String (), nil
72
73
}
73
74
74
75
// bumpVersion increases the patch release version (the last digit) of a given version.
75
76
// For pre-release versions, the pre-release part is bumped.
76
- func bumpVersion (version string ) (string , error ) {
77
+ func bumpVersion (versionStr string ) (version. Version , error ) {
77
78
// special case for versions like v23.2.0-alpha.00000000
78
- if strings .HasSuffix (version , "-alpha.00000000" ) {
79
+ if strings .HasSuffix (versionStr , "-alpha.00000000" ) {
79
80
// reset the version to something we can parse and bump
80
- version = strings .TrimSuffix (version , ".00000000" ) + ".0"
81
+ versionStr = strings .TrimSuffix (versionStr , ".00000000" ) + ".0"
81
82
}
82
- semanticVersion , err := semver . NewVersion ( version )
83
+ ver , err := version . Parse ( versionStr )
83
84
if err != nil {
84
- return "" , fmt .Errorf ("cannot parse version: %w" , err )
85
- }
86
- var nextVersion semver.Version
87
- if semanticVersion .Prerelease () == "" {
88
- // For regular releases we can use IncPatch without any modification
89
- nextVersion = semanticVersion .IncPatch ()
90
- } else {
91
- // For pre-releases (alpha, beta, rc), we need to implement our own bumper. It takes the last digit and increments it.
92
- pre := semanticVersion .Prerelease ()
93
- preType , digit , found := strings .Cut (pre , "." )
94
- if ! found {
95
- return "" , fmt .Errorf ("parsing prerelease %s" , semanticVersion .Original ())
96
- }
97
- preVersion , err := strconv .Atoi (digit )
98
- if err != nil {
99
- return "" , fmt .Errorf ("atoi prerelease error %s: %w" , semanticVersion .Original (), err )
100
- }
101
- preVersion ++
102
- nextVersion , err = semanticVersion .SetPrerelease (fmt .Sprintf ("%s.%d" , preType , preVersion ))
103
- if err != nil {
104
- return "" , fmt .Errorf ("bumping prerelease %s: %w" , semanticVersion .Original (), err )
105
- }
85
+ return version.Version {}, fmt .Errorf ("cannot parse version: %w" , err )
86
+ }
87
+ if ver .IsPrerelease () {
88
+ return ver .IncPreRelease ()
106
89
}
107
- return nextVersion . Original (), nil
90
+ return ver . IncPatch ()
108
91
}
109
92
110
93
// listRemoteBranches retrieves a list of remote branches using a pattern, assuming the remote name is `origin`.
0 commit comments