@@ -14,26 +14,47 @@ var (
14
14
name string
15
15
license string
16
16
17
- version = "dev build"
18
- buildSource = "unknown"
19
- buildTime = "unknown"
17
+ version = "dev build"
18
+ versionNumber = "0.0.0"
19
+ buildSource = "unknown"
20
+ buildTime = "unknown"
20
21
21
22
info * Info
22
23
loadInfo sync.Once
23
24
)
24
25
25
26
func init () {
26
- // Convert version string space placeholders.
27
- version = strings .ReplaceAll (version , "_" , " " )
27
+ // Replace space placeholders.
28
28
buildSource = strings .ReplaceAll (buildSource , "_" , " " )
29
29
buildTime = strings .ReplaceAll (buildTime , "_" , " " )
30
+
31
+ // Convert version string from git tag to expected format.
32
+ version = strings .TrimSpace (strings .ReplaceAll (strings .TrimPrefix (version , "v" ), "_" , " " ))
33
+ versionNumber = strings .TrimSpace (strings .TrimSuffix (version , "dev build" ))
34
+ if versionNumber == "" {
35
+ versionNumber = "0.0.0"
36
+ }
37
+
38
+ // Get build info.
39
+ buildInfo , _ := debug .ReadBuildInfo ()
40
+ buildSettings := make (map [string ]string )
41
+ for _ , setting := range buildInfo .Settings {
42
+ buildSettings [setting .Key ] = setting .Value
43
+ }
44
+
45
+ // Add "dev build" to version if repo is dirty.
46
+ if buildSettings ["vcs.modified" ] == "true" &&
47
+ ! strings .HasSuffix (version , "dev build" ) {
48
+ version += " dev build"
49
+ }
30
50
}
31
51
32
52
// Info holds the programs meta information.
33
53
type Info struct { //nolint:maligned
34
- Name string
35
- Version string
36
- License string
54
+ Name string
55
+ Version string
56
+ VersionNumber string
57
+ License string
37
58
38
59
Source string
39
60
BuildTime string
@@ -66,16 +87,17 @@ func GetInfo() *Info {
66
87
}
67
88
68
89
info = & Info {
69
- Name : name ,
70
- Version : version ,
71
- License : license ,
72
- Source : buildSource ,
73
- BuildTime : buildTime ,
74
- CGO : buildSettings ["CGO_ENABLED" ] == "1" ,
75
- Commit : buildSettings ["vcs.revision" ],
76
- CommitTime : buildSettings ["vcs.time" ],
77
- Dirty : buildSettings ["vcs.modified" ] == "true" ,
78
- BuildInfo : * buildInfo ,
90
+ Name : name ,
91
+ Version : version ,
92
+ VersionNumber : versionNumber ,
93
+ License : license ,
94
+ Source : buildSource ,
95
+ BuildTime : buildTime ,
96
+ CGO : buildSettings ["CGO_ENABLED" ] == "1" ,
97
+ Commit : buildSettings ["vcs.revision" ],
98
+ CommitTime : buildSettings ["vcs.time" ],
99
+ Dirty : buildSettings ["vcs.modified" ] == "true" ,
100
+ BuildInfo : * buildInfo ,
79
101
}
80
102
81
103
if info .Commit == "" {
@@ -89,24 +111,23 @@ func GetInfo() *Info {
89
111
return info
90
112
}
91
113
92
- // Version returns the short version string .
114
+ // Version returns the annotated version.
93
115
func Version () string {
94
- info := GetInfo ()
95
-
96
- if info .Dirty {
97
- return version + "*"
98
- }
99
-
100
116
return version
101
117
}
102
118
119
+ // VersionNumber returns the version number only.
120
+ func VersionNumber () string {
121
+ return versionNumber
122
+ }
123
+
103
124
// FullVersion returns the full and detailed version string.
104
125
func FullVersion () string {
105
126
info := GetInfo ()
106
127
builder := new (strings.Builder )
107
128
108
129
// Name and version.
109
- builder .WriteString (fmt .Sprintf ("%s %s\n " , info .Name , Version () ))
130
+ builder .WriteString (fmt .Sprintf ("%s %s\n " , info .Name , version ))
110
131
111
132
// Build info.
112
133
cgoInfo := "-cgo"
0 commit comments