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 {
need, latest, url, err = check(ctx, v) func() {
if err != nil { defer func() {
log.Errorf("check update error: %v", err) if err := recover(); err != nil {
} log.Errorf("check update panic: %v", err)
}
}()
need, latest, url, err = check(ctx, v)
if err != nil {
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,24 +152,46 @@ func CompVersion(v1, v2 string) (int, error) {
return VersionLess, nil return VersionLess, nil
} }
} }
if len(v1s) > len(v2s) { sub1 = sub1[1:]
sub2 = sub2[1:]
if len(sub1) == 0 && len(sub2) != 0 {
return VersionGreater, nil return VersionGreater, nil
} else if len(v1s) < len(v2s) { } else if len(sub1) != 0 && len(sub2) == 0 {
return VersionLess, nil return VersionLess, nil
} else { }
sub1 = sub1[1:] switch {
sub2 = sub2[1:] case strings.HasPrefix(sub1[0], "beta"):
if len(sub1) == 2 && len(sub2) == 2 { switch {
if sub1[0] == "beta" && sub2[0] == "alpha" { case strings.HasPrefix(sub2[0], "beta"):
return VersionGreater, nil return CompVersion(sub1[0], sub2[0])
} else if sub1[0] == "alpha" && sub2[0] == "beta" { case strings.HasPrefix(sub2[0], "alpha"):
return VersionLess, nil return VersionGreater, nil
} case strings.HasPrefix(sub2[0], "rc"):
return CompVersion(sub1[1], sub2[1]) return VersionGreater, nil
} else { }
return VersionEqual, fmt.Errorf("invalid version: %s, %s", v1, v2) 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) {

@ -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