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  }