From d27b19cc53091a0177212928182a17687d0b944a Mon Sep 17 00:00:00 2001 From: "CJACK." Date: Sat, 21 Mar 2026 00:43:09 +0800 Subject: [PATCH] fix: show vercel preview commit version instead of dev --- internal/version/version.go | 56 ++++++++++++++++++++++++++++++++ internal/version/version_test.go | 15 +++++++++ 2 files changed, 71 insertions(+) diff --git a/internal/version/version.go b/internal/version/version.go index 5f29a0e..03542b9 100644 --- a/internal/version/version.go +++ b/internal/version/version.go @@ -31,6 +31,12 @@ func Current() (value string, source string) { sourceVal = "file:VERSION" return } + + if vv := versionFromVercelEnv(); vv != "" { + currentVal = vv + sourceVal = "env:vercel" + return + } currentVal = "dev" sourceVal = "default" }) @@ -80,9 +86,59 @@ func Tag(v string) string { if v == "" || v == "dev" { return v } + if v[0] < '0' || v[0] > '9' { + return v + } return "v" + v } +func versionFromVercelEnv() string { + if tag := normalize(strings.TrimSpace(os.Getenv("VERCEL_GIT_COMMIT_TAG"))); tag != "" { + return tag + } + ref := strings.TrimSpace(os.Getenv("VERCEL_GIT_COMMIT_REF")) + sha := strings.TrimSpace(os.Getenv("VERCEL_GIT_COMMIT_SHA")) + if len(sha) > 7 { + sha = sha[:7] + } + ref = sanitizeVersionLabel(ref) + sha = sanitizeVersionLabel(sha) + if ref == "" && sha == "" { + return "" + } + if ref != "" && sha != "" { + return "preview-" + ref + "." + sha + } + if ref != "" { + return "preview-" + ref + } + return "preview-" + sha +} + +func sanitizeVersionLabel(in string) string { + in = strings.TrimSpace(strings.ToLower(in)) + if in == "" { + return "" + } + var b strings.Builder + b.Grow(len(in)) + prevDash := false + for i := 0; i < len(in); i++ { + c := in[i] + if (c >= 'a' && c <= 'z') || (c >= '0' && c <= '9') { + b.WriteByte(c) + prevDash = false + continue + } + if !prevDash { + b.WriteByte('-') + prevDash = true + } + } + out := strings.Trim(b.String(), "-") + return out +} + func Compare(a, b string) int { pa := parse(normalize(a)) pb := parse(normalize(b)) diff --git a/internal/version/version_test.go b/internal/version/version_test.go index c42d115..03f7e95 100644 --- a/internal/version/version_test.go +++ b/internal/version/version_test.go @@ -22,3 +22,18 @@ func TestCompare(t *testing.T) { t.Fatal("expected greater") } } + +func TestTagKeepsPreviewStyle(t *testing.T) { + if got := Tag("preview-dev.abcd123"); got != "preview-dev.abcd123" { + t.Fatalf("expected preview tag unchanged, got %q", got) + } +} + +func TestVersionFromVercelEnv(t *testing.T) { + t.Setenv("VERCEL_GIT_COMMIT_TAG", "") + t.Setenv("VERCEL_GIT_COMMIT_REF", "dev") + t.Setenv("VERCEL_GIT_COMMIT_SHA", "abcdef123456") + if got := versionFromVercelEnv(); got != "preview-dev.abcdef1" { + t.Fatalf("unexpected vercel preview version: %q", got) + } +}