Feat: docker tags and version chack

pull/40/head
zijiren233 2 years ago
parent cbc87d8879
commit 55e7749b25

@ -18,6 +18,9 @@ jobs:
uses: docker/metadata-action@v5 uses: docker/metadata-action@v5
with: with:
images: synctvorg/synctv images: synctvorg/synctv
tags: |
type=semver,pattern={{version}}
type=semver,pattern={{major}}.{{minor}}
- name: Set up QEMU - name: Set up QEMU
uses: docker/setup-qemu-action@v3 uses: docker/setup-qemu-action@v3

@ -51,10 +51,18 @@ func InitCheckUpdate(ctx context.Context) error {
t := time.NewTicker(time.Hour * 6) t := time.NewTicker(time.Hour * 6)
defer t.Stop() defer t.Stop()
for range t.C { for range t.C {
func() {
defer func() {
if err := recover(); err != nil {
log.Errorf("check update panic: %v", err)
}
}()
need, latest, url, err = check(ctx, v) need, latest, url, err = check(ctx, v)
if err != nil { if err != nil {
log.Errorf("check update error: %v", err) log.Errorf("check update error: %v", err)
} }
}()
} }
}() }()

@ -142,6 +142,9 @@ func CompVersion(v1, v2 string) (int, error) {
if err != nil { if err != nil {
return VersionEqual, err return VersionEqual, err
} }
if len(v1s) != len(v2s) {
return VersionEqual, fmt.Errorf("invalid version: %s, %s", v1, v2)
}
for i := 0; i < len(v1s) && i < len(v2s); i++ { for i := 0; i < len(v1s) && i < len(v2s); i++ {
if v1s[i] > v2s[i] { if v1s[i] > v2s[i] {
return VersionGreater, nil return VersionGreater, nil
@ -149,25 +152,47 @@ func CompVersion(v1, v2 string) (int, error) {
return VersionLess, nil return VersionLess, nil
} }
} }
if len(v1s) > len(v2s) {
return VersionGreater, nil
} else if len(v1s) < len(v2s) {
return VersionLess, nil
} else {
sub1 = sub1[1:] sub1 = sub1[1:]
sub2 = sub2[1:] sub2 = sub2[1:]
if len(sub1) == 2 && len(sub2) == 2 { if len(sub1) == 0 && len(sub2) != 0 {
if sub1[0] == "beta" && sub2[0] == "alpha" {
return VersionGreater, nil return VersionGreater, nil
} else if sub1[0] == "alpha" && sub2[0] == "beta" { } else if len(sub1) != 0 && len(sub2) == 0 {
return VersionLess, nil return VersionLess, nil
} }
return CompVersion(sub1[1], sub2[1]) switch {
} else { case strings.HasPrefix(sub1[0], "beta"):
return VersionEqual, fmt.Errorf("invalid version: %s, %s", v1, v2) switch {
case strings.HasPrefix(sub2[0], "beta"):
return CompVersion(sub1[0], sub2[0])
case strings.HasPrefix(sub2[0], "alpha"):
return VersionGreater, nil
case strings.HasPrefix(sub2[0], "rc"):
return VersionGreater, nil
} }
case strings.HasPrefix(sub1[0], "alpha"):
switch {
case strings.HasPrefix(sub2[0], "beta"):
return VersionLess, nil
case strings.HasPrefix(sub2[0], "alpha"):
return CompVersion(sub1[0], sub2[0])
case strings.HasPrefix(sub2[0], "rc"):
return VersionGreater, nil
}
case strings.HasPrefix(sub1[0], "rc"):
switch {
case strings.HasPrefix(sub2[0], "beta"):
return VersionLess, nil
case strings.HasPrefix(sub2[0], "alpha"):
return VersionLess, nil
case strings.HasPrefix(sub2[0], "rc"):
return CompVersion(sub1[0], sub2[0])
} }
} }
if len(sub1) == 2 && len(sub2) == 2 {
return CompVersion(sub1[1], sub2[1])
}
return VersionEqual, fmt.Errorf("invalid version: %s, %s", v1, v2)
}
func SplitVersion(v string) ([]int, error) { func SplitVersion(v string) ([]int, error) {
var vs []int var vs []int

@ -59,6 +59,10 @@ func FuzzCompVersion(f *testing.F) {
f.Add("v1.0.0", "v1.0.1") f.Add("v1.0.0", "v1.0.1")
f.Add("v0.2.9", "v1.5.2") f.Add("v0.2.9", "v1.5.2")
f.Add("v0.3.0-beta-1", "v0.3.0-alpha-2") f.Add("v0.3.0-beta-1", "v0.3.0-alpha-2")
f.Add("v0.3.1-beta.1", "v0.3.1-alpha.2")
f.Add("v0.2.9", "v0.3.1-alpha.2")
f.Add("v0.2.9", "v0.3.1-alpha-2")
f.Add("v0.3.1", "v0.3.1-alpha.2")
f.Fuzz(func(t *testing.T, a, b string) { f.Fuzz(func(t *testing.T, a, b string) {
t.Logf("a: %s, b: %s", a, b) t.Logf("a: %s, b: %s", a, b)
_, err := utils.CompVersion(a, b) _, err := utils.CompVersion(a, b)

Loading…
Cancel
Save