@@ -5,10 +5,70 @@ import (
5
5
"fmt"
6
6
"os"
7
7
"os/signal"
8
+ "strconv"
8
9
"strings"
9
10
"syscall"
11
+
12
+ "github.com/pubgo/funk/typex"
13
+ semver "github.com/hashicorp/go-version"
14
+ "github.com/pubgo/funk/assert"
15
+ "github.com/samber/lo"
10
16
)
11
17
18
+ func GetGitTags () []* semver.Version {
19
+ var tagText = strings .TrimSpace (string (assert .Exit1 (ShellOutput ("git" , "tag" ))))
20
+ var tags = strings .Split (tagText , "\n " )
21
+ var versions = make ([]* semver.Version , 0 , len (tags ))
22
+
23
+ for _ , tag := range tags {
24
+ tag = strings .TrimSpace (tag )
25
+ vv , err := semver .NewSemver (tag )
26
+ if err != nil {
27
+ continue
28
+ }
29
+ versions = append (versions , vv )
30
+ }
31
+ return versions
32
+ }
33
+
34
+ func GetNextTag (pre string ) * semver.Version {
35
+ var tags = GetGitTags ()
36
+ var maxVer = GetGitMaxTag (tags )
37
+ var preData = fmt .Sprintf ("-%s." , pre )
38
+ var curMaxVer = typex .DoBlock1 (func () * semver.Version {
39
+ preTags := lo .Filter (tags , func (item * semver.Version , index int ) bool { return strings .Contains (item .String (), preData ) })
40
+ var curMaxVer = lo .MaxBy (preTags , func (a * semver.Version , b * semver.Version ) bool { return a .Compare (b ) > 0 })
41
+ return curMaxVer
42
+ })
43
+
44
+ var ver string
45
+ if curMaxVer != nil && curMaxVer .GreaterThan (maxVer ) {
46
+ ver = strings .ReplaceAll (curMaxVer .Prerelease (), fmt .Sprintf ("%s." , pre ), "" )
47
+ ver = fmt .Sprintf ("v%s-%s.%d" , curMaxVer .Core ().String (), pre , assert .Must1 (strconv .Atoi (ver ))+ 1 )
48
+ } else {
49
+ ver = fmt .Sprintf ("v%s-%s.1" , maxVer .Core ().String (), pre )
50
+ }
51
+ return assert .Exit1 (semver .NewSemver (ver ))
52
+ }
53
+
54
+ func GetGitMaxTag (tags []* semver.Version ) * semver.Version {
55
+ var maxVer = semver .Must (semver .NewVersion ("v0.0.0" ))
56
+
57
+ for _ , tag := range tags {
58
+ if strings .Contains (tag .String (), "-" ) {
59
+ continue
60
+ }
61
+
62
+ if maxVer .Compare (tag ) >= 0 {
63
+ continue
64
+ }
65
+
66
+ maxVer = tag
67
+ }
68
+
69
+ return maxVer
70
+ }
71
+
12
72
func UsageDesc (format string , args ... interface {}) string {
13
73
s := fmt .Sprintf (format , args ... )
14
74
return strings .ToUpper (s [0 :1 ]) + s [1 :]
0 commit comments