Skip to content

Commit e70b67c

Browse files
committed
fix: barry quick fix, 2025-04-27 18:24:42
1 parent 1bc7f51 commit e70b67c

File tree

1 file changed

+224
-0
lines changed

1 file changed

+224
-0
lines changed

utils/test.go

Lines changed: 224 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,224 @@
1+
package utils
2+
3+
import (
4+
"fmt"
5+
"github.com/pubgo/dix"
6+
"github.com/pubgo/funk/assert"
7+
"github.com/pubgo/lava/cmds/app"
8+
"github.com/urfave/cli/v3"
9+
"os"
10+
"os/exec"
11+
"regexp"
12+
"strconv"
13+
"strings"
14+
)
15+
16+
import (
17+
"context"
18+
"fmt"
19+
"os"
20+
"os/exec"
21+
"regexp"
22+
"strconv"
23+
"strings"
24+
25+
"github.com/go-git/go-git/v5"
26+
"github.com/go-git/go-git/v5/plumbing"
27+
"github.com/gofiber/fiber/v2/log"
28+
"github.com/pubgo/dix"
29+
"github.com/pubgo/funk/assert"
30+
"github.com/pubgo/lava/cmds/app"
31+
"github.com/urfave/cli/v3"
32+
"golang.org/x/mod/semver"
33+
)
34+
35+
func GetGitMaxTag(reg *regexp.Regexp) string {
36+
{
37+
cmdParams := []string{
38+
"fetch",
39+
}
40+
cmd := exec.Command("git", cmdParams...)
41+
fmt.Println(cmd.String())
42+
cmd.Stdout = os.Stdout
43+
cmd.Stderr = os.Stderr
44+
err := cmd.Run()
45+
assert.Exit(err)
46+
}
47+
48+
r, err := git.PlainOpen(".")
49+
if err != nil {
50+
assert.Exit(err)
51+
}
52+
tags, err := r.Tags()
53+
if err != nil {
54+
assert.Exit(err)
55+
}
56+
57+
var maxVer = "v0.0.0"
58+
59+
if err = tags.ForEach(func(tag *plumbing.Reference) error {
60+
tagName := tag.Name().Short()
61+
if !semver.IsValid(tagName) {
62+
return nil
63+
}
64+
if !reg.Match([]byte(tagName)) {
65+
return nil
66+
}
67+
if semver.Compare(maxVer, tagName) >= 0 {
68+
return nil
69+
}
70+
maxVer = tagName
71+
return nil
72+
}); err != nil {
73+
assert.Exit(err)
74+
}
75+
76+
return maxVer
77+
}
78+
79+
func createTag(env, tag, msg string) *cli.Command {
80+
return &cli.Command{
81+
Name: env,
82+
Flags: []cli.Flag{
83+
&cli.StringFlag{
84+
Name: "msg",
85+
Aliases: []string{"m"},
86+
Usage: "commit message",
87+
Destination: &msg,
88+
Required: false,
89+
Value: env,
90+
},
91+
},
92+
Action: func(ctx context.Context, command *cli.Command) error {
93+
var err error
94+
regexpr := fmt.Sprintf("^v[0-9]+\\.[0-9]+\\.[0-9]+(-%s\\.[0-9]+)?$", tag)
95+
maxVer := GetGitMaxTag(regexp.MustCompile(regexpr))
96+
97+
log.Info("max tag is ", maxVer)
98+
99+
p := semver.Prerelease(maxVer)
100+
if p == "" {
101+
parts := strings.SplitN(maxVer, ".", 3)
102+
patch := assert.Must1(strconv.Atoi(parts[2]))
103+
patch += 1
104+
maxVer = fmt.Sprintf("%s.%s.%d-%s.1", parts[0], parts[1], patch, tag)
105+
} else {
106+
v, _ := strconv.ParseInt(strings.TrimPrefix(p, "-"+tag+"."), 10, 64)
107+
v += 1
108+
maxVer = fmt.Sprintf("%s-%s.%d", maxVer[:len(maxVer)-len(p)], tag, v)
109+
}
110+
111+
log.Info("new tag is ", maxVer)
112+
113+
{
114+
cmdParams := []string{
115+
"tag",
116+
"-a",
117+
maxVer,
118+
"-m",
119+
msg,
120+
}
121+
cmd := exec.Command("git", cmdParams...)
122+
fmt.Println(cmd.String())
123+
cmd.Stdout = os.Stdout
124+
cmd.Stderr = os.Stderr
125+
err = cmd.Run()
126+
assert.Exit(err)
127+
}
128+
129+
{
130+
cmdParams := []string{
131+
"push",
132+
"origin",
133+
maxVer,
134+
}
135+
cmd := exec.Command("git", cmdParams...)
136+
fmt.Println(cmd.String())
137+
cmd.Stdout = os.Stdout
138+
cmd.Stderr = os.Stderr
139+
err = cmd.Run()
140+
assert.Exit(err)
141+
}
142+
143+
return nil
144+
},
145+
}
146+
}
147+
148+
func New(_ *dix.Dix) *cli.Command {
149+
var msg string
150+
151+
return &cli.Command{
152+
Name: "git",
153+
Commands: []*cli.Command{
154+
createTag("demo", "demo", "demo"),
155+
createTag("dev", "alpha", "dev"),
156+
createTag("test", "beta", "test"),
157+
{
158+
Name: "release",
159+
Flags: []cli.Flag{
160+
&cli.StringFlag{
161+
Name: "msg",
162+
Aliases: []string{"m"},
163+
Usage: "commit message",
164+
Destination: &msg,
165+
Required: false,
166+
Value: "release",
167+
},
168+
},
169+
Action: func(ctx context.Context, command *cli.Command) error {
170+
var err error
171+
maxVer := GetGitMaxTag(regexp.MustCompile("^v[0-9]+\\.[0-9]+\\.[0-9]+$"))
172+
173+
parts := strings.SplitN(maxVer, ".", 3)
174+
patch := assert.Must1(strconv.Atoi(parts[2]))
175+
patch += 1
176+
maxVer = fmt.Sprintf("%s.%s.%d", parts[0], parts[1], patch)
177+
178+
log.Info("new tag is ", maxVer)
179+
180+
{
181+
cmdParams := []string{
182+
"tag",
183+
"-a",
184+
maxVer,
185+
"-m",
186+
msg,
187+
}
188+
cmd := exec.Command("git", cmdParams...)
189+
fmt.Println(cmd.String())
190+
cmd.Stdout = os.Stdout
191+
cmd.Stderr = os.Stderr
192+
err = cmd.Run()
193+
assert.Exit(err)
194+
}
195+
196+
{
197+
cmdParams := []string{
198+
"push",
199+
"origin",
200+
maxVer,
201+
}
202+
cmd := exec.Command("git", cmdParams...)
203+
fmt.Println(cmd.String())
204+
cmd.Stdout = os.Stdout
205+
cmd.Stderr = os.Stderr
206+
err = cmd.Run()
207+
assert.Exit(err)
208+
}
209+
210+
return nil
211+
},
212+
},
213+
},
214+
}
215+
}
216+
217+
func main() {
218+
di := app.NewBuilder()
219+
{
220+
di.Provide(New)
221+
}
222+
223+
app.Run(di)
224+
}

0 commit comments

Comments
 (0)