From 55e7749b259fad118d58235157a562b60ba04e60 Mon Sep 17 00:00:00 2001 From: zijiren233 Date: Sat, 2 Dec 2023 12:47:33 +0800 Subject: [PATCH] Feat: docker tags and version chack --- .github/workflows/release_docker.yml | 3 ++ internal/bootstrap/update.go | 16 ++++++--- utils/utils.go | 53 ++++++++++++++++++++-------- utils/utils_test.go | 4 +++ 4 files changed, 58 insertions(+), 18 deletions(-) diff --git a/.github/workflows/release_docker.yml b/.github/workflows/release_docker.yml index 28c4e0e..611b30c 100644 --- a/.github/workflows/release_docker.yml +++ b/.github/workflows/release_docker.yml @@ -18,6 +18,9 @@ jobs: uses: docker/metadata-action@v5 with: images: synctvorg/synctv + tags: | + type=semver,pattern={{version}} + type=semver,pattern={{major}}.{{minor}} - name: Set up QEMU uses: docker/setup-qemu-action@v3 diff --git a/internal/bootstrap/update.go b/internal/bootstrap/update.go index 2ddf78c..2684923 100644 --- a/internal/bootstrap/update.go +++ b/internal/bootstrap/update.go @@ -51,10 +51,18 @@ func InitCheckUpdate(ctx context.Context) error { t := time.NewTicker(time.Hour * 6) defer t.Stop() for range t.C { - need, latest, url, err = check(ctx, v) - if err != nil { - log.Errorf("check update error: %v", err) - } + func() { + defer func() { + 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) + } + }() + } }() diff --git a/utils/utils.go b/utils/utils.go index fc178c7..55e2043 100644 --- a/utils/utils.go +++ b/utils/utils.go @@ -142,6 +142,9 @@ func CompVersion(v1, v2 string) (int, error) { if err != nil { 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++ { if v1s[i] > v2s[i] { return VersionGreater, nil @@ -149,24 +152,46 @@ func CompVersion(v1, v2 string) (int, error) { return VersionLess, nil } } - if len(v1s) > len(v2s) { + sub1 = sub1[1:] + sub2 = sub2[1:] + if len(sub1) == 0 && len(sub2) != 0 { return VersionGreater, nil - } else if len(v1s) < len(v2s) { + } else if len(sub1) != 0 && len(sub2) == 0 { return VersionLess, nil - } else { - sub1 = sub1[1:] - sub2 = sub2[1:] - if len(sub1) == 2 && len(sub2) == 2 { - if sub1[0] == "beta" && sub2[0] == "alpha" { - return VersionGreater, nil - } else if sub1[0] == "alpha" && sub2[0] == "beta" { - return VersionLess, nil - } - return CompVersion(sub1[1], sub2[1]) - } else { - return VersionEqual, fmt.Errorf("invalid version: %s, %s", v1, v2) + } + switch { + case strings.HasPrefix(sub1[0], "beta"): + 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) { diff --git a/utils/utils_test.go b/utils/utils_test.go index 34c85a2..e6e8a71 100644 --- a/utils/utils_test.go +++ b/utils/utils_test.go @@ -59,6 +59,10 @@ func FuzzCompVersion(f *testing.F) { f.Add("v1.0.0", "v1.0.1") f.Add("v0.2.9", "v1.5.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) { t.Logf("a: %s, b: %s", a, b) _, err := utils.CompVersion(a, b)