From 09dbf35a6a0b045e96c0124dafa9f3bd54729315 Mon Sep 17 00:00:00 2001 From: Sebastian Mark Date: Sun, 10 Nov 2024 09:26:27 +0100 Subject: [PATCH] feat!: introduce `ChronoTomatoVersion` - set version from `runtime/debug.Main.Version` - use latest git tag as fallback - allow version to be overwritten via ldflags - this will break `go build .` and `go install .` --- cmd/client/app.go | 9 +++++++++ internal/metadata/version.go | 29 +++++++++++++++++++++++++++++ 2 files changed, 38 insertions(+) create mode 100644 internal/metadata/version.go diff --git a/cmd/client/app.go b/cmd/client/app.go index 6a87b53..2c81581 100644 --- a/cmd/client/app.go +++ b/cmd/client/app.go @@ -2,8 +2,11 @@ package client import ( "flag" + "fmt" + "os" "git.smsvc.net/pomodoro/ChronoTomato/internal/helper" + "git.smsvc.net/pomodoro/ChronoTomato/internal/metadata" "git.smsvc.net/pomodoro/ChronoTomato/internal/websocket" ChronoTomato "git.smsvc.net/pomodoro/ChronoTomato/pkg/models" GoTomato "git.smsvc.net/pomodoro/GoTomato/pkg/models" @@ -68,9 +71,15 @@ func Start() { parameter_url = flag.String("url", "", "GoTomato Server URL (eg ws://localhost:8080/ws)") parameter_password = flag.String("password", "", "Control password for pomodoro session") parameter_configfile = flag.String("config", defaultConfigFile, "Path to config file") + showVersion = flag.Bool("version", false, "Show Version") ) flag.Parse() + if *showVersion { + fmt.Println("ChronoTomato", metadata.ChronoTomatoVersion) + os.Exit(0) + } + // read passed config file or try to use default config if *parameter_configfile != defaultConfigFile { config = helper.ParseConfig(*parameter_configfile) diff --git a/internal/metadata/version.go b/internal/metadata/version.go new file mode 100644 index 0000000..a451f85 --- /dev/null +++ b/internal/metadata/version.go @@ -0,0 +1,29 @@ +package metadata + +import ( + "os/exec" + "runtime/debug" + "strings" +) + +var ChronoTomatoVersion = "" + +func getLatestTag() string { + bytes, _ := exec.Command("git", "describe", "--tags").Output() + output := strings.TrimSpace(string(bytes)) + return output +} + +// set GoTomatoVersion from runtime/debug.Main.Version +// use latest git tag as fallback +// can be overwritten via ldflags (e,g. by goreleaser) +func init() { + if ChronoTomatoVersion == "" { + info, _ := debug.ReadBuildInfo() + if info.Main.Version != "(devel)" { + ChronoTomatoVersion = info.Main.Version + } else { + ChronoTomatoVersion = getLatestTag() + } + } +}