Add version resolver (tag → strip-v / fall back to short SHA)
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
parent
f34061954f
commit
2115507d52
20
internal/version/version.go
Normal file
20
internal/version/version.go
Normal file
|
|
@ -0,0 +1,20 @@
|
||||||
|
package version
|
||||||
|
|
||||||
|
import "regexp"
|
||||||
|
|
||||||
|
var semverTag = regexp.MustCompile(`^refs/tags/v(\d+\.\d+\.\d+)$`)
|
||||||
|
|
||||||
|
// Resolve returns the version string to use in artifact names.
|
||||||
|
// Precedence: override > matching semver tag > short SHA.
|
||||||
|
func Resolve(override, ref, sha string) string {
|
||||||
|
if override != "" {
|
||||||
|
return override
|
||||||
|
}
|
||||||
|
if m := semverTag.FindStringSubmatch(ref); m != nil {
|
||||||
|
return m[1]
|
||||||
|
}
|
||||||
|
if len(sha) > 7 {
|
||||||
|
return sha[:7]
|
||||||
|
}
|
||||||
|
return sha
|
||||||
|
}
|
||||||
32
internal/version/version_test.go
Normal file
32
internal/version/version_test.go
Normal file
|
|
@ -0,0 +1,32 @@
|
||||||
|
package version_test
|
||||||
|
|
||||||
|
import (
|
||||||
|
"testing"
|
||||||
|
|
||||||
|
"github.com/leonmika/wails-release/internal/version"
|
||||||
|
)
|
||||||
|
|
||||||
|
func TestResolve(t *testing.T) {
|
||||||
|
cases := []struct {
|
||||||
|
name string
|
||||||
|
override string
|
||||||
|
ref string
|
||||||
|
sha string
|
||||||
|
want string
|
||||||
|
}{
|
||||||
|
{"override wins", "9.9.9", "refs/tags/v1.2.3", "abcdefg1234", "9.9.9"},
|
||||||
|
{"clean tag strips v", "", "refs/tags/v1.2.3", "abcdefg1234", "1.2.3"},
|
||||||
|
{"prerelease tag falls back to sha", "", "refs/tags/v1.2.3-rc1", "abcdefg1234", "abcdefg"},
|
||||||
|
{"non-tag ref falls back to sha", "", "refs/heads/main", "abcdefg1234", "abcdefg"},
|
||||||
|
{"empty ref falls back to sha", "", "", "abcdefg1234", "abcdefg"},
|
||||||
|
{"short sha shorter than 7 returned verbatim", "", "", "abc", "abc"},
|
||||||
|
}
|
||||||
|
for _, c := range cases {
|
||||||
|
t.Run(c.name, func(t *testing.T) {
|
||||||
|
got := version.Resolve(c.override, c.ref, c.sha)
|
||||||
|
if got != c.want {
|
||||||
|
t.Fatalf("got %q, want %q", got, c.want)
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
||||||
Loading…
Reference in a new issue