-
-
Notifications
You must be signed in to change notification settings - Fork 1.1k
/
version.go
104 lines (76 loc) · 2.58 KB
/
version.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
package utils
import (
"fmt"
"strings"
)
// BuildTag is replaced by LDFLAGS at build time with the latest tag at or before the current commit.
var BuildTag = "unknown"
// BuildState is replaced by LDFLAGS at build time with `tagged` or `untagged` depending on if the commit is tagged, and
// `clean` or `dirty` depending on the working tree state. For example if the commit was tagged and the working tree
// was dirty it would be "tagged dirty". This is used to determine the version string output mode.
var BuildState = "untagged dirty"
// BuildExtra is replaced by LDFLAGS at build time with a blank string by default. People porting Authelia can use this
// to add a suffix to their versions.
var BuildExtra = ""
// BuildDate is replaced by LDFLAGS at build time with the date the build started.
var BuildDate = ""
// BuildCommit is replaced by LDFLAGS at build time with the current commit.
var BuildCommit = "unknown"
// BuildBranch is replaced by LDFLAGS at build time with the current branch.
var BuildBranch = "master"
// BuildNumber is replaced by LDFLAGS at build time with the CI build number.
var BuildNumber = "0"
// Version returns the Authelia version.
//
// The format of the string is dependent on the values in BuildState. If tagged and clean are present it returns the
// BuildTag i.e. v1.0.0. If dirty and tagged are present it returns <BuildTag>-dirty. Otherwise, the following is the
// format: untagged-<BuildTag>-dirty-<BuildExtra> (<BuildBranch>, <BuildCommit>).
func Version() (versionString string) {
return VersionAdv(BuildTag, BuildState, BuildCommit, BuildBranch, BuildExtra)
}
// VersionAdv takes inputs to generate the version.
func VersionAdv(tag, state, commit, branch, extra string) (version string) {
b := strings.Builder{}
states := strings.Split(state, " ")
isClean := IsStringInSlice(clean, states)
isTagged := IsStringInSlice(tagged, states)
if isClean && isTagged {
b.WriteString(tag)
if extra != "" {
b.WriteRune('-')
b.WriteString(extra)
}
return b.String()
}
if isTagged && !isClean {
b.WriteString(tag)
b.WriteString("-dirty")
return b.String()
}
if !isTagged {
b.WriteString("untagged-")
}
b.WriteString(tag)
if !isClean {
b.WriteString("-dirty")
}
if extra != "" {
b.WriteRune('-')
b.WriteString(extra)
}
b.WriteString(fmt.Sprintf(" (%s, %s)", branch, commitShort(commit)))
return b.String()
}
func commitShort(commitLong string) (commit string) {
if commitLong == "" {
return unknown
}
b := strings.Builder{}
for i, r := range commitLong {
b.WriteRune(r)
if i >= 6 {
break
}
}
return b.String()
}