blob: ea2441d28883f893d206d93cf910005bfb940b68 [file] [log] [blame]
// Package version is used to inject build time information via -X variables
package version
import (
"fmt"
"io/ioutil"
"strings"
"github.com/opencord/voltha-lib-go/v3/pkg/log"
)
// Default build-time variable.
// These values can (should) be overridden via ldflags when built with
// `make`
var (
version = "unknown-version"
goVersion = "unknown-goversion"
vcsRef = "unknown-vcsref"
vcsDirty = "unknown-vcsdirty"
buildTime = "unknown-buildtime"
os = "unknown-os"
arch = "unknown-arch"
)
// InfoType is a collection of build time environment variables
type InfoType struct {
Version string `json:"version"`
GoVersion string `json:"goversion"`
VcsRef string `json:"vcsref"`
VcsDirty string `json:"vcsdirty"`
BuildTime string `json:"buildtime"`
Os string `json:"os"`
Arch string `json:"arch"`
}
// VersionInfo is an instance of build time environment variables populated at build time via -X arguments
var VersionInfo InfoType
func init() {
VersionInfo = InfoType{
Version: version,
VcsRef: vcsRef,
VcsDirty: vcsDirty,
GoVersion: goVersion,
Os: os,
Arch: arch,
BuildTime: buildTime,
}
_, _ = log.AddPackage(log.CONSOLE, log.DebugLevel, nil)
}
func (v InfoType) String(indent string) string {
builder := strings.Builder{}
builder.WriteString(fmt.Sprintf("%sVersion: %s\n", indent, VersionInfo.Version))
builder.WriteString(fmt.Sprintf("%sGoVersion: %s\n", indent, VersionInfo.GoVersion))
builder.WriteString(fmt.Sprintf("%sVCS Ref: %s\n", indent, VersionInfo.VcsRef))
builder.WriteString(fmt.Sprintf("%sVCS Dirty: %s\n", indent, VersionInfo.VcsDirty))
builder.WriteString(fmt.Sprintf("%sBuilt: %s\n", indent, VersionInfo.BuildTime))
builder.WriteString(fmt.Sprintf("%sOS/Arch: %s/%s\n", indent, VersionInfo.Os, VersionInfo.Arch))
return builder.String()
}
func GetCodeVersion() string {
if VersionInfo.Version == "unknown-version" {
content, err := ioutil.ReadFile("VERSION")
if err == nil {
return (string(content))
} else {
log.Error("VERSION-file not readable")
return VersionInfo.Version
}
} else {
return VersionInfo.Version
}
}