github.com/hernad/nomad@v1.6.112/version/version.go (about) 1 // Copyright (c) HashiCorp, Inc. 2 // SPDX-License-Identifier: MPL-2.0 3 4 package version 5 6 import ( 7 "bytes" 8 "fmt" 9 "time" 10 ) 11 12 var ( 13 // BuildDate is the time of the git commit used to build the program, 14 // in RFC3339 format. It is filled in by the compiler via makefile. 15 BuildDate string 16 17 // The git commit that was compiled. This will be filled in by the compiler. 18 GitCommit string 19 GitDescribe string 20 21 // The main version number that is being run at the moment. 22 Version = "1.6.112" 23 24 // A pre-release marker for the version. If this is "" (empty string) 25 // then it means that it is a final release. Otherwise, this is a pre-release 26 // such as "dev" (in development), "beta", "rc1", etc. 27 VersionPrerelease = "" 28 29 // VersionMetadata is metadata further describing the build type. 30 VersionMetadata = "" 31 ) 32 33 // VersionInfo 34 type VersionInfo struct { 35 BuildDate time.Time 36 Revision string 37 Version string 38 VersionPrerelease string 39 VersionMetadata string 40 } 41 42 func (v *VersionInfo) Copy() *VersionInfo { 43 if v == nil { 44 return nil 45 } 46 47 nv := *v 48 return &nv 49 } 50 51 func GetVersion() *VersionInfo { 52 ver := Version 53 rel := VersionPrerelease 54 md := VersionMetadata 55 if GitDescribe != "" { 56 ver = GitDescribe 57 } 58 if GitDescribe == "" && rel == "" && VersionPrerelease != "" { 59 rel = "dev" 60 } 61 62 // on parse error, will be zero value time.Time{} 63 built, _ := time.Parse(time.RFC3339, BuildDate) 64 65 return &VersionInfo{ 66 BuildDate: built, 67 Revision: GitCommit, 68 Version: ver, 69 VersionPrerelease: rel, 70 VersionMetadata: md, 71 } 72 } 73 74 func (c *VersionInfo) VersionNumber() string { 75 version := c.Version 76 77 if c.VersionPrerelease != "" { 78 version = fmt.Sprintf("%s-%s", version, c.VersionPrerelease) 79 } 80 81 if c.VersionMetadata != "" { 82 version = fmt.Sprintf("%s+%s", version, c.VersionMetadata) 83 } 84 85 return version 86 } 87 88 func (c *VersionInfo) FullVersionNumber(rev bool) string { 89 var versionString bytes.Buffer 90 91 fmt.Fprintf(&versionString, "Nomad v%s", c.Version) 92 if c.VersionPrerelease != "" { 93 fmt.Fprintf(&versionString, "-%s", c.VersionPrerelease) 94 } 95 96 if c.VersionMetadata != "" { 97 fmt.Fprintf(&versionString, "+%s", c.VersionMetadata) 98 } 99 100 if !c.BuildDate.IsZero() { 101 fmt.Fprintf(&versionString, "\nBuildDate %s", c.BuildDate.Format(time.RFC3339)) 102 } 103 104 if rev && c.Revision != "" { 105 fmt.Fprintf(&versionString, "\nRevision %s", c.Revision) 106 } 107 108 return versionString.String() 109 }