mirror of
https://github.com/safing/portbase
synced 2025-04-21 17:59:09 +00:00
Fix and improve parsing of git tag based version metadata
This commit is contained in:
parent
c6fa7a8b8d
commit
e888e08b66
1 changed files with 47 additions and 26 deletions
|
@ -14,26 +14,47 @@ var (
|
||||||
name string
|
name string
|
||||||
license string
|
license string
|
||||||
|
|
||||||
version = "dev build"
|
version = "dev build"
|
||||||
buildSource = "unknown"
|
versionNumber = "0.0.0"
|
||||||
buildTime = "unknown"
|
buildSource = "unknown"
|
||||||
|
buildTime = "unknown"
|
||||||
|
|
||||||
info *Info
|
info *Info
|
||||||
loadInfo sync.Once
|
loadInfo sync.Once
|
||||||
)
|
)
|
||||||
|
|
||||||
func init() {
|
func init() {
|
||||||
// Convert version string space placeholders.
|
// Replace space placeholders.
|
||||||
version = strings.ReplaceAll(version, "_", " ")
|
|
||||||
buildSource = strings.ReplaceAll(buildSource, "_", " ")
|
buildSource = strings.ReplaceAll(buildSource, "_", " ")
|
||||||
buildTime = strings.ReplaceAll(buildTime, "_", " ")
|
buildTime = strings.ReplaceAll(buildTime, "_", " ")
|
||||||
|
|
||||||
|
// Convert version string from git tag to expected format.
|
||||||
|
version = strings.TrimSpace(strings.ReplaceAll(strings.TrimPrefix(version, "v"), "_", " "))
|
||||||
|
versionNumber = strings.TrimSpace(strings.TrimSuffix(version, "dev build"))
|
||||||
|
if versionNumber == "" {
|
||||||
|
versionNumber = "0.0.0"
|
||||||
|
}
|
||||||
|
|
||||||
|
// Get build info.
|
||||||
|
buildInfo, _ := debug.ReadBuildInfo()
|
||||||
|
buildSettings := make(map[string]string)
|
||||||
|
for _, setting := range buildInfo.Settings {
|
||||||
|
buildSettings[setting.Key] = setting.Value
|
||||||
|
}
|
||||||
|
|
||||||
|
// Add "dev build" to version if repo is dirty.
|
||||||
|
if buildSettings["vcs.modified"] == "true" &&
|
||||||
|
!strings.HasSuffix(version, "dev build") {
|
||||||
|
version += " dev build"
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Info holds the programs meta information.
|
// Info holds the programs meta information.
|
||||||
type Info struct { //nolint:maligned
|
type Info struct { //nolint:maligned
|
||||||
Name string
|
Name string
|
||||||
Version string
|
Version string
|
||||||
License string
|
VersionNumber string
|
||||||
|
License string
|
||||||
|
|
||||||
Source string
|
Source string
|
||||||
BuildTime string
|
BuildTime string
|
||||||
|
@ -66,16 +87,17 @@ func GetInfo() *Info {
|
||||||
}
|
}
|
||||||
|
|
||||||
info = &Info{
|
info = &Info{
|
||||||
Name: name,
|
Name: name,
|
||||||
Version: version,
|
Version: version,
|
||||||
License: license,
|
VersionNumber: versionNumber,
|
||||||
Source: buildSource,
|
License: license,
|
||||||
BuildTime: buildTime,
|
Source: buildSource,
|
||||||
CGO: buildSettings["CGO_ENABLED"] == "1",
|
BuildTime: buildTime,
|
||||||
Commit: buildSettings["vcs.revision"],
|
CGO: buildSettings["CGO_ENABLED"] == "1",
|
||||||
CommitTime: buildSettings["vcs.time"],
|
Commit: buildSettings["vcs.revision"],
|
||||||
Dirty: buildSettings["vcs.modified"] == "true",
|
CommitTime: buildSettings["vcs.time"],
|
||||||
BuildInfo: *buildInfo,
|
Dirty: buildSettings["vcs.modified"] == "true",
|
||||||
|
BuildInfo: *buildInfo,
|
||||||
}
|
}
|
||||||
|
|
||||||
if info.Commit == "" {
|
if info.Commit == "" {
|
||||||
|
@ -89,24 +111,23 @@ func GetInfo() *Info {
|
||||||
return info
|
return info
|
||||||
}
|
}
|
||||||
|
|
||||||
// Version returns the short version string.
|
// Version returns the annotated version.
|
||||||
func Version() string {
|
func Version() string {
|
||||||
info := GetInfo()
|
|
||||||
|
|
||||||
if info.Dirty {
|
|
||||||
return version + "*"
|
|
||||||
}
|
|
||||||
|
|
||||||
return version
|
return version
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// VersionNumber returns the version number only.
|
||||||
|
func VersionNumber() string {
|
||||||
|
return versionNumber
|
||||||
|
}
|
||||||
|
|
||||||
// FullVersion returns the full and detailed version string.
|
// FullVersion returns the full and detailed version string.
|
||||||
func FullVersion() string {
|
func FullVersion() string {
|
||||||
info := GetInfo()
|
info := GetInfo()
|
||||||
builder := new(strings.Builder)
|
builder := new(strings.Builder)
|
||||||
|
|
||||||
// Name and version.
|
// Name and version.
|
||||||
builder.WriteString(fmt.Sprintf("%s %s\n", info.Name, Version()))
|
builder.WriteString(fmt.Sprintf("%s %s\n", info.Name, version))
|
||||||
|
|
||||||
// Build info.
|
// Build info.
|
||||||
cgoInfo := "-cgo"
|
cgoInfo := "-cgo"
|
||||||
|
|
Loading…
Add table
Reference in a new issue