@@ -17,58 +17,91 @@ limitations under the License.
17
17
package cmd
18
18
19
19
import (
20
+ "encoding/json"
20
21
"fmt"
22
+ "runtime"
21
23
"runtime/debug"
22
24
)
23
25
24
26
const unknown = "unknown"
25
27
26
- // var needs to be used instead of const as ldflags is used to fill this
27
- // information in the release process
28
+ // These are filled via ldflags during build
28
29
var (
29
30
kubeBuilderVersion = unknown
30
31
kubernetesVendorVersion = "1.33.0"
31
32
goos = unknown
32
33
goarch = unknown
33
- gitCommit = "$Format:%H$" // sha1 from git, output of $(git rev-parse HEAD)
34
-
35
- buildDate = "1970-01-01T00:00:00Z" // build date in ISO8601 format, output of $(date -u +'%Y-%m-%dT%H:%M:%SZ')
34
+ gitCommit = "$Format:%H$"
35
+ buildDate = "1970-01-01T00:00:00Z"
36
36
)
37
37
38
- // version contains all the information related to the CLI version
39
- type version struct {
38
+ // VersionInfo holds all CLI version-related information
39
+ type VersionInfo struct {
40
40
KubeBuilderVersion string `json:"kubeBuilderVersion"`
41
41
KubernetesVendor string `json:"kubernetesVendor"`
42
42
GitCommit string `json:"gitCommit"`
43
43
BuildDate string `json:"buildDate"`
44
- GoOs string `json:"goOs"`
44
+ GoOS string `json:"goOs"`
45
45
GoArch string `json:"goArch"`
46
46
}
47
47
48
- // versionString returns the Full CLI version
49
- func versionString () string {
48
+ // resolveBuildInfo ensures dynamic fields are populated
49
+ func resolveBuildInfo () {
50
50
if kubeBuilderVersion == unknown {
51
51
if info , ok := debug .ReadBuildInfo (); ok && info .Main .Version != "" {
52
52
kubeBuilderVersion = info .Main .Version
53
53
}
54
54
}
55
-
56
- return fmt . Sprintf ( "Version: %#v" , version {
57
- kubeBuilderVersion ,
58
- kubernetesVendorVersion ,
59
- gitCommit ,
60
- buildDate ,
61
- goos ,
62
- goarch ,
63
- })
55
+ if goos == unknown {
56
+ goos = runtime . GOOS
57
+ }
58
+ if goarch == unknown {
59
+ goarch = runtime . GOARCH
60
+ }
61
+ if gitCommit == "$Format:%H$" || gitCommit == "" {
62
+ gitCommit = unknown
63
+ }
64
64
}
65
65
66
- // getKubebuilderVersion returns only the CLI version string
67
- func getKubebuilderVersion () string {
68
- if kubeBuilderVersion == unknown {
69
- if info , ok := debug .ReadBuildInfo (); ok && info .Main .Version != "" {
70
- kubeBuilderVersion = info .Main .Version
71
- }
66
+ // getVersionInfo returns populated VersionInfo
67
+ func getVersionInfo () VersionInfo {
68
+ resolveBuildInfo ()
69
+ return VersionInfo {
70
+ KubeBuilderVersion : kubeBuilderVersion ,
71
+ KubernetesVendor : kubernetesVendorVersion ,
72
+ GitCommit : gitCommit ,
73
+ BuildDate : buildDate ,
74
+ GoOS : goos ,
75
+ GoArch : goarch ,
72
76
}
77
+ }
78
+
79
+ // versionString returns a human-friendly string version
80
+ func versionString () string {
81
+ v := getVersionInfo ()
82
+ return fmt .Sprintf (`KubeBuilder Version: %s
83
+ Kubernetes Vendor: %s
84
+ Git Commit: %s
85
+ Build Date: %s
86
+ Go OS/Arch: %s/%s` ,
87
+ v .KubeBuilderVersion ,
88
+ v .KubernetesVendor ,
89
+ v .GitCommit ,
90
+ v .BuildDate ,
91
+ v .GoOS ,
92
+ v .GoArch ,
93
+ )
94
+ }
95
+
96
+ // getKubeBuilderVersion returns just the CLI version
97
+ func getKubeBuilderVersion () string {
98
+ resolveBuildInfo ()
73
99
return kubeBuilderVersion
74
100
}
101
+
102
+ // versionJSON returns version as JSON string
103
+ func versionJSON () string {
104
+ v := getVersionInfo ()
105
+ b , _ := json .MarshalIndent (v , "" , " " )
106
+ return string (b )
107
+ }
0 commit comments