diff --git a/version/cobra_test.go b/version/cobra_test.go index db2f745f..5636abfd 100644 --- a/version/cobra_test.go +++ b/version/cobra_test.go @@ -109,15 +109,15 @@ func TestOpts(t *testing.T) { var meshEmptyVersion = MeshInfo{} var meshInfoSingleVersion = MeshInfo{ - {"Pilot", BuildInfo{"1.2.0", "gitSHA123", "go1.10", "Clean", "tag"}}, - {"Injector", BuildInfo{"1.2.0", "gitSHAabc", "go1.10.1", "Modified", "tag"}}, - {"Citadel", BuildInfo{"1.2.0", "gitSHA321", "go1.11.0", "Clean", "tag"}}, + {"Pilot", BuildInfo{"1.2.0", "gitSHA123", "go1.10", "1.10.0", "Clean", "tag"}}, + {"Injector", BuildInfo{"1.2.0", "gitSHAabc", "go1.10.1", "1.10.0", "Modified", "tag"}}, + {"Citadel", BuildInfo{"1.2.0", "gitSHA321", "go1.11.0", "1.10.0", "Clean", "tag"}}, } var meshInfoMultiVersion = MeshInfo{ - {"Pilot", BuildInfo{"1.0.0", "gitSHA123", "go1.10", "Clean", "1.0.0"}}, - {"Injector", BuildInfo{"1.0.1", "gitSHAabc", "go1.10.1", "Modified", "1.0.1"}}, - {"Citadel", BuildInfo{"1.2", "gitSHA321", "go1.11.0", "Clean", "1.2"}}, + {"Pilot", BuildInfo{"1.0.0", "gitSHA123", "go1.10", "1.10.0", "Clean", "1.0.0"}}, + {"Injector", BuildInfo{"1.0.1", "gitSHAabc", "go1.10.1", "1.10.0", "Modified", "1.0.1"}}, + {"Citadel", BuildInfo{"1.2", "gitSHA321", "go1.11.0", "1.10.0", "Clean", "1.2"}}, } func mockRemoteMesh(meshInfo *MeshInfo, err error) GetRemoteVersionFunc { @@ -171,7 +171,7 @@ func TestVersion(t *testing.T) { args: strings.Split("version --remote=false --short=false", " "), expectedRegexp: regexp.MustCompile("version.BuildInfo{Version:\"unknown\", GitRevision:\"unknown\", " + "GolangVersion:\"go1.([0-9+?(\\.)?]+)(rc[0-9]?)?(beta[0-9]?)?\", " + - "BuildStatus:\"unknown\", GitTag:\"unknown\"}"), + "VendorVersion:\"unknown\", BuildStatus:\"unknown\", GitTag:\"unknown\"}"), }, { // case 1 client-side only, short output args: strings.Split("version -s --remote=false", " "), @@ -181,6 +181,7 @@ func TestVersion(t *testing.T) { args: strings.Split("version --remote=false -o yaml", " "), expectedRegexp: regexp.MustCompile("clientVersion:\n" + " golang_version: go1.([0-9+?(\\.)?]+)(rc[0-9]?)?(beta[0-9]?)?\n" + + " vendor_revision: unknown\n" + " revision: unknown\n" + " status: unknown\n" + " tag: unknown\n" + @@ -193,6 +194,7 @@ func TestVersion(t *testing.T) { " \"version\": \"unknown\",\n" + " \"revision\": \"unknown\",\n" + " \"golang_version\": \"go1.([0-9+?(\\.)?]+)(rc[0-9]?)?(beta[0-9]?)?\",\n" + + " \"vendor_version\": \"unknown\",\n" + " \"status\": \"unknown\",\n" + " \"tag\": \"unknown\"\n" + " }\n" + @@ -204,7 +206,7 @@ func TestVersion(t *testing.T) { remoteMesh: &meshInfoMultiVersion, expectedRegexp: regexp.MustCompile("client version: version.BuildInfo{Version:\"unknown\", GitRevision:\"unknown\", " + "GolangVersion:\"go1.([0-9+?(\\.)?]+)(rc[0-9]?)?(beta[0-9]?)?\", " + - "BuildStatus:\"unknown\", GitTag:\"unknown\"}\n" + + "VendorVersion:\"unknown\", BuildStatus:\"unknown\", GitTag:\"unknown\"}\n" + printMeshVersion(&meshInfoMultiVersion, rawOutputMock)), }, { // case 5 remote, short output @@ -217,6 +219,7 @@ func TestVersion(t *testing.T) { remoteMesh: &meshInfoMultiVersion, expectedRegexp: regexp.MustCompile("clientVersion:\n" + " golang_version: go1.([0-9+?(\\.)?]+)(rc[0-9]?)?(beta[0-9]?)?\n" + + " vendor_version: unknown\n" + " revision: unknown\n" + " status: unknown\n" + " tag: unknown\n" + @@ -230,6 +233,7 @@ func TestVersion(t *testing.T) { " \"version\": \"unknown\",\n" + " \"revision\": \"unknown\",\n" + " \"golang_version\": \"go1.([0-9+?(\\.)?]+)(rc[0-9]?)?(beta[0-9]?)?\",\n" + + " \"vendor_version\": \"unknown\",\n" + " \"status\": \"unknown\",\n" + " \"tag\": \"unknown\"\n" + " },\n" + diff --git a/version/version.go b/version/version.go index bb36d5ab..c0536b7a 100644 --- a/version/version.go +++ b/version/version.go @@ -24,11 +24,12 @@ import ( // The following fields are populated at build time using -ldflags -X. // Note that DATE is omitted for reproducible builds var ( - buildVersion = "unknown" - buildGitRevision = "unknown" - buildStatus = "unknown" - buildTag = "unknown" - buildHub = "unknown" + buildVersion = "unknown" + buildGitRevision = "unknown" + buildVendorVersion = "unknown" + buildStatus = "unknown" + buildTag = "unknown" + buildHub = "unknown" ) // BuildInfo describes version information about the binary build. @@ -36,6 +37,7 @@ type BuildInfo struct { Version string `json:"version"` GitRevision string `json:"revision"` GolangVersion string `json:"golang_version"` + VendorVersion string `json:"vendor_version"` BuildStatus string `json:"status"` GitTag string `json:"tag"` } @@ -84,6 +86,8 @@ func NewBuildInfoFromOldString(oldOutput string) (BuildInfo, error) { res.GitRevision = value case "GolangVersion": res.GolangVersion = value + case "VendorVersion": + res.VendorVersion = value case "BuildStatus": res.BuildStatus = value case "GitTag": @@ -130,6 +134,7 @@ func init() { Version: buildVersion, GitRevision: buildGitRevision, GolangVersion: runtime.Version(), + VendorVersion: buildVendorVersion, BuildStatus: buildStatus, GitTag: buildTag, } diff --git a/version/version_test.go b/version/version_test.go index 204554b1..0cb196ee 100644 --- a/version/version_test.go +++ b/version/version_test.go @@ -29,37 +29,39 @@ func TestNewBuildInfoFromOldString(t *testing.T) { }{ { "Correct input 1", - `Version: 1.0.0 + `Version: 1.11.6 GitRevision: 3a136c90ec5e308f236e0d7ebb5c4c5e405217f4 -GolangVersion: go1.10.1 +GolangVersion: go1.16.1 +VendorVersion: 1.10.0 BuildStatus: Clean GitTag: tag `, false, - BuildInfo{ - Version: "1.0.0", + BuildInfo{Version: "1.11.6", GitRevision: "3a136c90ec5e308f236e0d7ebb5c4c5e405217f4", - GolangVersion: "go1.10.1", + GolangVersion: "go1.16.1", + VendorVersion: "1.10.0", BuildStatus: "Clean", GitTag: "tag", }, }, { "Legacy input 1", - `Version: 1.0.0 + `Version: 1.11.6 GitRevision: 3a136c90ec5e308f236e0d7ebb5c4c5e405217f4 User: root@71a9470ea93c Host: foo Hub: docker.io/istio -GolangVersion: go1.10.1 +GolangVersion: go1.16.1 +VendorVersion: 1.10.0 BuildStatus: Clean GitTag: tag `, false, - BuildInfo{ - Version: "1.0.0", + BuildInfo{Version: "1.11.6", GitRevision: "3a136c90ec5e308f236e0d7ebb5c4c5e405217f4", - GolangVersion: "go1.10.1", + GolangVersion: "go1.16.1", + VendorVersion: "1.10.0", BuildStatus: "Clean", GitTag: "tag", }, @@ -97,7 +99,7 @@ GitTag: tag func TestBuildInfo(t *testing.T) { versionedString := fmt.Sprintf(`version.BuildInfo{Version:"unknown", GitRevision:"unknown", `+ - `GolangVersion:"%s", BuildStatus:"unknown", GitTag:"unknown"}`, + `GolangVersion:"%s", VendorVersion:"unknown", BuildStatus:"unknown", GitTag:"unknown"}`, runtime.Version()) cases := []struct { @@ -106,19 +108,16 @@ func TestBuildInfo(t *testing.T) { want string longWant string }{ - { - "all specified", - BuildInfo{ - Version: "VER", - GitRevision: "GITREV", - GolangVersion: "GOLANGVER", - BuildStatus: "STATUS", - GitTag: "TAG", - }, + {"all specified", BuildInfo{ + Version: "VER", + GitRevision: "GITREV", + GolangVersion: "GOLANGVER", + VendorVersion: "VENDORVER", + BuildStatus: "STATUS", + GitTag: "TAG"}, "VER-GITREV-STATUS", `version.BuildInfo{Version:"VER", GitRevision:"GITREV", GolangVersion:"GOLANGVER", ` + - `BuildStatus:"STATUS", GitTag:"TAG"}`, - }, + `VendorVersion:"VENDORVER", BuildStatus:"STATUS", GitTag:"TAG"}`}, {"init", Info, "unknown-unknown-unknown", versionedString}, }