github.com/grafviktor/keep-my-secret@v0.9.10-0.20230908165355-19f35cce90e5/internal/version/version.go (about) 1 // Package version is a singleton module which stores project build information. 2 package version 3 4 import ( 5 "fmt" 6 ) 7 8 type buildInfo struct { 9 buildNumber string 10 buildDate string 11 buildCommit string 12 } 13 14 var bi buildInfo 15 16 func init() { 17 valueIsNotAvailable := "N/A" 18 19 bi = buildInfo{ 20 buildNumber: valueIsNotAvailable, 21 buildDate: valueIsNotAvailable, 22 buildCommit: valueIsNotAvailable, 23 } 24 } 25 26 // Set should be called from the main function to make application version details available for other app modules 27 func Set(buildVersion, buildDate, buildCommit string) { 28 if len(buildVersion) > 0 { 29 bi.buildNumber = buildVersion 30 } 31 32 if len(buildDate) > 0 { 33 bi.buildDate = buildDate 34 } 35 36 if len(buildCommit) > 0 { 37 bi.buildCommit = buildCommit 38 } 39 } 40 41 // BuildVersion sets version of the application 42 func BuildVersion() string { 43 return bi.buildNumber 44 } 45 46 // BuildDate sets date of the build 47 func BuildDate() string { 48 return bi.buildDate 49 } 50 51 // BuildCommit sets last commit id 52 func BuildCommit() string { 53 return bi.buildCommit 54 } 55 56 // PrintConsole prints application version details including build information in the terminal 57 func PrintConsole() { 58 fmt.Printf("Build version: %s\n", BuildVersion()) 59 fmt.Printf("Build date: %s\n", BuildDate()) 60 fmt.Printf("Build commit: %s\n", BuildCommit()) 61 }