mirror of
https://github.com/psviderski/uncloud.git
synced 2026-08-26 11:03:34 +00:00
fix(nightly): inject correct semver 0.<next-minor>.0-nightly-abc1234 for nightly builds
This commit is contained in:
@@ -11,6 +11,14 @@ before:
|
||||
|
||||
report_sizes: true
|
||||
|
||||
git:
|
||||
# Skip the stale 'nightly' tag so {{.Version}} resolves to the latest semver tag for --snapshot builds.
|
||||
ignore_tags:
|
||||
- nightly
|
||||
snapshot:
|
||||
# Semver-compliant nightly version, e.g. "0.19.0-nightly-abc1234" when the latest tag is v0.18.0.
|
||||
version_template: "{{ incminor .Version }}-nightly-{{.ShortCommit}}"
|
||||
|
||||
builds:
|
||||
- id: uncloud
|
||||
main: ./cmd/uncloud
|
||||
|
||||
@@ -38,10 +38,11 @@ const (
|
||||
)
|
||||
|
||||
var (
|
||||
// currentVersion is the version of this binary (CLI or daemon).
|
||||
currentVersion = semver.MustParse(version.String())
|
||||
// zeroVersion is used when no version is specified (treated as 0.0.0).
|
||||
zeroVersion = semver.MustParse("0.0.0")
|
||||
// currentVersion is the version of this binary (CLI or daemon). It's injected via an ldflag at build time.
|
||||
// Fall back to zeroVersion if the injected string isn't valid semver.
|
||||
currentVersion = parseVersionOrZero(version.String())
|
||||
// Pre-parsed minimum versions for comparison.
|
||||
minClientVersion = semver.MustParse(MinClientVersion)
|
||||
minServerVersion = semver.MustParse(MinServerVersion)
|
||||
@@ -55,6 +56,15 @@ var (
|
||||
WarnWriter io.Writer = os.Stderr
|
||||
)
|
||||
|
||||
// parseVersionOrZero parses v as a semver, returning zeroVersion if parsing fails.
|
||||
func parseVersionOrZero(v string) *semver.Version {
|
||||
parsed, err := semver.NewVersion(v)
|
||||
if err != nil {
|
||||
return zeroVersion
|
||||
}
|
||||
return parsed
|
||||
}
|
||||
|
||||
func extractVersion(md metadata.MD, key string) *semver.Version {
|
||||
if md == nil {
|
||||
return zeroVersion
|
||||
|
||||
@@ -12,6 +12,47 @@ import (
|
||||
"google.golang.org/grpc/status"
|
||||
)
|
||||
|
||||
func TestParseVersionOrZero(t *testing.T) {
|
||||
tests := []struct {
|
||||
name string
|
||||
input string
|
||||
expected string
|
||||
}{
|
||||
{
|
||||
name: "valid semver",
|
||||
input: "1.2.3",
|
||||
expected: "1.2.3",
|
||||
},
|
||||
{
|
||||
name: "valid semver with prerelease",
|
||||
input: "0.19.0-nightly-abc1234",
|
||||
expected: "0.19.0-nightly-abc1234",
|
||||
},
|
||||
{
|
||||
name: "dev version",
|
||||
input: "999.0.0-dev",
|
||||
expected: "999.0.0-dev",
|
||||
},
|
||||
{
|
||||
name: "invalid ldflag-injected string falls back to zero",
|
||||
input: "nightly-SNAPSHOT-abc1234",
|
||||
expected: "0.0.0",
|
||||
},
|
||||
{
|
||||
name: "empty string falls back to zero",
|
||||
input: "",
|
||||
expected: "0.0.0",
|
||||
},
|
||||
}
|
||||
|
||||
for _, tt := range tests {
|
||||
t.Run(tt.name, func(t *testing.T) {
|
||||
got := parseVersionOrZero(tt.input)
|
||||
assert.Equal(t, tt.expected, got.String())
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
func TestExtractVersion(t *testing.T) {
|
||||
tests := []struct {
|
||||
name string
|
||||
|
||||
Reference in New Issue
Block a user