Files
qfixpt/src/app/version/version.go
2026-03-11 10:54:11 -03:00

119 lines
2.7 KiB
Go

// Package version defines current build app information
package version
import (
"fmt"
"os"
"runtime"
"strings"
)
//go:generate go-enum -f=$GOFILE --lower --marshal
// AppName stores the Application Name
const (
AppName = "qfixpt"
poweredBy = "Powered by Quantex Technologies"
quantexEnvironment = "QUANTEX_ENVIRONMENT"
)
var (
// See tools/build.sh script to see how these variables are set
versionBase = "0.1" //nolint:gochecknoglobals // Should be global cos this is set on the build with version info
buildHash string //nolint:gochecknoglobals // Idem
buildBranch string //nolint:gochecknoglobals // Idem
builtTime string //nolint:gochecknoglobals // Idem
hostname string //nolint:gochecknoglobals // Idem
)
// EnvironmentType environments
// ENUM(
// prod
// open-demo
// demo
// dev
// )
type EnvironmentType int //nolint:recvcheck // The methods of this are autogenerated
var environment EnvironmentType //nolint:gochecknoglobals // Just keept this global to avoid having to create an instance
func init() {
aux := os.Getenv(quantexEnvironment)
if aux == "" {
panic("QUANTEX_ENVIRONMENT is not set")
}
env, err := ParseEnvironmentType(aux)
if err != nil {
panic("Invalid QUANTEX_ENVIRONMENT value: " + aux + " " + err.Error())
}
environment = env
}
// Base returns the version base name
func Base() string {
return versionBase
}
// BuildHash returns the build hash
func BuildHash() string {
return buildHash
}
// BuildBranch returns the build branch
func BuildBranch() string {
return buildBranch
}
// Hostname returns the build time
func Hostname() string {
return hostname
}
// Name returns the version name
func Name() string {
bh := buildHash
if len(buildHash) >= 8 {
bh = buildHash[0:8]
}
return versionBase + "-" + bh
}
// BuiltTime returns the build time
func BuiltTime() string {
return builtTime
}
// Environment returns service environment
func Environment() EnvironmentType {
return environment
}
// Environment returns service environment
func BuildFullInfo() string {
bt := strings.Replace(builtTime, "-", " ", -1)
bh := buildHash
if len(buildHash) >= 8 {
bh = buildHash[0:8]
}
return fmt.Sprintf("v%s-%s-%s, built on %s ", versionBase, buildBranch, bh, bt)
}
// Info returns the complete version information
func Info() string {
sb := strings.Builder{}
// revive:disable No need to handle errors here
sb.WriteString(fmt.Sprintf("v%s \n", versionBase))
sb.WriteString(fmt.Sprintln(" Build ", BuildFullInfo()))
sb.WriteString(fmt.Sprintln(" ", poweredBy, ""))
sb.WriteString(fmt.Sprintf(" Go %s \n", runtime.Version()))
sb.WriteString(fmt.Sprintf(" Environment %s \n", environment))
sb.WriteString(fmt.Sprintf(" Built from %s \n", hostname))
// revive:enable
return sb.String()
}