Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add vendor_version for build info #368

Draft
wants to merge 1 commit into
base: master
Choose a base branch
from
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
20 changes: 12 additions & 8 deletions version/cobra_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -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 {
Expand Down Expand Up @@ -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", " "),
Expand All @@ -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" +
Expand All @@ -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" +
Expand All @@ -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
Expand All @@ -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" +
Expand All @@ -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" +
Expand Down
15 changes: 10 additions & 5 deletions version/version.go
Original file line number Diff line number Diff line change
Expand Up @@ -24,18 +24,20 @@ 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.
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"`
}
Expand Down Expand Up @@ -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":
Expand Down Expand Up @@ -130,6 +134,7 @@ func init() {
Version: buildVersion,
GitRevision: buildGitRevision,
GolangVersion: runtime.Version(),
VendorVersion: buildVendorVersion,
BuildStatus: buildStatus,
GitTag: buildTag,
}
Expand Down
43 changes: 21 additions & 22 deletions version/version_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -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",
},
Expand Down Expand Up @@ -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 {
Expand All @@ -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},
}
Expand Down