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
|
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:
|
builds:
|
||||||
- id: uncloud
|
- id: uncloud
|
||||||
main: ./cmd/uncloud
|
main: ./cmd/uncloud
|
||||||
|
|||||||
@@ -38,10 +38,11 @@ const (
|
|||||||
)
|
)
|
||||||
|
|
||||||
var (
|
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 is used when no version is specified (treated as 0.0.0).
|
||||||
zeroVersion = semver.MustParse("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.
|
// Pre-parsed minimum versions for comparison.
|
||||||
minClientVersion = semver.MustParse(MinClientVersion)
|
minClientVersion = semver.MustParse(MinClientVersion)
|
||||||
minServerVersion = semver.MustParse(MinServerVersion)
|
minServerVersion = semver.MustParse(MinServerVersion)
|
||||||
@@ -55,6 +56,15 @@ var (
|
|||||||
WarnWriter io.Writer = os.Stderr
|
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 {
|
func extractVersion(md metadata.MD, key string) *semver.Version {
|
||||||
if md == nil {
|
if md == nil {
|
||||||
return zeroVersion
|
return zeroVersion
|
||||||
|
|||||||
@@ -12,6 +12,47 @@ import (
|
|||||||
"google.golang.org/grpc/status"
|
"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) {
|
func TestExtractVersion(t *testing.T) {
|
||||||
tests := []struct {
|
tests := []struct {
|
||||||
name string
|
name string
|
||||||
|
|||||||
Reference in New Issue
Block a user