diff --git a/Makefile b/Makefile index 1df17f4a0..cefbd34c0 100644 --- a/Makefile +++ b/Makefile @@ -4,10 +4,8 @@ APP_NAME := $(IMAGE_NAME) GOLANGCI_LINT_VERSION := v1.44.2 -VERSION_GO := $(shell go version) -VERSION_DATE := $(shell date -Ru) -VERSION_TAG := $(shell git describe --tags --always) -COMMON_BUILD_FLAGS := -trimpath -mod=readonly -ldflags="-extldflags '-static' -s -w -X 'main.version=$(VERSION_TAG) ($(VERSION_GO)) [$(VERSION_DATE)]'" +VERSION := $(shell git describe --exact-match HEAD 2>/dev/null || git describe --tags --always) +COMMON_BUILD_FLAGS := -trimpath -mod=readonly -ldflags="-extldflags '-static' -s -w -X 'main.version=$(VERSION)'" FUZZ_FLAGS := -fuzztime=120s diff --git a/main.go b/main.go index 019278b7f..dd795c75f 100644 --- a/main.go +++ b/main.go @@ -9,7 +9,10 @@ package main import ( + "fmt" "math/rand" + "runtime/debug" + "strconv" "time" "github.com/9seconds/mtg/v2/internal/cli" @@ -26,6 +29,32 @@ func main() { panic(err) } + if buildInfo, ok := debug.ReadBuildInfo(); ok { + vcsCommit := "" + vcsDate := time.Now() + vcsDirty := "" + + for _, setting := range buildInfo.Settings { + switch setting.Key { + case "vcs.time": + vcsDate, _ = time.Parse(time.RFC3339, setting.Value) + case "vcs.revision": + vcsCommit = setting.Value + case "vcs.modified": + if isDirty, _ := strconv.ParseBool(setting.Value); isDirty { + vcsDirty = " [dirty]" + } + } + } + + version = fmt.Sprintf("%s (%s: %s on %s%s)", + version, + buildInfo.GoVersion, + vcsDate.Format(time.RFC3339), + vcsCommit, + vcsDirty) + } + cli := &cli.CLI{} ctx := kong.Parse(cli, kong.Vars{ "version": version,