package version import ( "strings" "github.com/prometheus/client_golang/prometheus" ) var ( // commitFromGit is a constant representing the source version that // generated this build. It should be set during build via -ldflags. commitFromGit string // versionFromGit is a constant representing the version tag that // generated this build. It should be set during build via -ldflags. versionFromGit string // major version majorFromGit string // minor version minorFromGit string // build date in ISO8601 format, output of $(date -u +'%Y-%m-%dT%H:%M:%SZ') buildDate string ) // Info contains versioning information. // TODO: Add []string of api versions supported? It's still unclear // how we'll want to distribute that information. type Info struct { Major string `json:"major"` Minor string `json:"minor"` GitCommit string `json:"gitCommit"` GitVersion string `json:"gitVersion"` BuildDate string `json:"buildDate"` } // Get returns the overall codebase version. It's for detecting // what code a binary was built from. func Get() Info { return Info{ Major: majorFromGit, Minor: minorFromGit, GitCommit: commitFromGit, GitVersion: versionFromGit, BuildDate: buildDate, } } // String returns info as a human-friendly version string. func (info Info) String() string { version := info.GitVersion if version == "" { version = "unknown" } return version } // LastSemanticVersion attempts to return a semantic version from the GitVersion - which // is either <semver>+<commit> or <semver> on release boundaries. func (info Info) LastSemanticVersion() string { version := info.GitVersion parts := strings.Split(version, "+") return parts[0] } func init() { buildInfo := prometheus.NewGaugeVec( prometheus.GaugeOpts{ Name: "openshift_build_info", Help: "A metric with a constant '1' value labeled by major, minor, git commit & git version from which OpenShift was built.", }, []string{"major", "minor", "gitCommit", "gitVersion"}, ) buildInfo.WithLabelValues(majorFromGit, minorFromGit, commitFromGit, versionFromGit).Set(1) prometheus.MustRegister(buildInfo) }