From d7e6dc3649eadc27bdfdac77785b6bbf77d30b79 Mon Sep 17 00:00:00 2001 From: Robin Jarry Date: Fri, 12 Aug 2022 12:24:52 +0200 Subject: [PATCH] aerc: add build info to version string Example: $ aerc -v aerc 0.11.0 +notmuch (go1.18.4 amd64 linux) Also include that version information in the debug and panic logs. debug.ReadBuildInfo() is only available in go 1.18+. Add a new variable set at build time to store $GOFLAGS. Suggested-by: Tim Culverhouse Signed-off-by: Robin Jarry Acked-by: Moritz Poldrack --- Makefile | 1 + aerc.go | 18 ++++++++++++++++-- logging/panic-logger.go | 6 +++++- 3 files changed, 22 insertions(+), 3 deletions(-) diff --git a/Makefile b/Makefile index c799682..551fb1e 100644 --- a/Makefile +++ b/Makefile @@ -14,6 +14,7 @@ BUILD_OPTS?=-trimpath # ignore environment variable GO_LDFLAGS:= GO_LDFLAGS+=-X main.Version=$(VERSION) +GO_LDFLAGS+=-X main.Flags=$(GOFLAGS) GO_LDFLAGS+=-X git.sr.ht/~rjarry/aerc/config.shareDir=$(SHAREDIR) GO_LDFLAGS+=$(GO_EXTRA_LDFLAGS) diff --git a/aerc.go b/aerc.go index 6e6c1d1..804befd 100644 --- a/aerc.go +++ b/aerc.go @@ -5,7 +5,9 @@ import ( "errors" "fmt" "os" + "runtime" "sort" + "strings" "time" "git.sr.ht/~sircmpwn/getopt" @@ -89,6 +91,17 @@ func getCompletions(aerc *widgets.Aerc, cmd string) []string { // set at build time var Version string +var Flags string + +func buildInfo() string { + info := Version + if strings.Contains(Flags, "notmuch") { + info += " +notmuch" + } + info += fmt.Sprintf(" (%s %s %s)", + runtime.Version(), runtime.GOARCH, runtime.GOOS) + return info +} func usage(msg string) { fmt.Fprintln(os.Stderr, msg) @@ -124,9 +137,10 @@ func main() { usage("error: " + err.Error()) return } + logging.BuildInfo = buildInfo() for _, opt := range opts { if opt.Option == 'v' { - fmt.Println("aerc " + Version) + fmt.Println("aerc " + logging.BuildInfo) return } } @@ -149,7 +163,7 @@ func main() { if !isatty.IsTerminal(os.Stdout.Fd()) { logging.Init() } - logging.Infof("Starting up") + logging.Infof("Starting up version %s", logging.BuildInfo) conf, err := config.LoadConfigFromFile(nil) if err != nil { diff --git a/logging/panic-logger.go b/logging/panic-logger.go index 9f57f65..11b1803 100644 --- a/logging/panic-logger.go +++ b/logging/panic-logger.go @@ -9,7 +9,10 @@ import ( "time" ) -var UICleanup = func() {} +var ( + UICleanup = func() {} + BuildInfo string +) // PanicHandler tries to restore the terminal. A stack trace is written to // aerc-crash.log and then passed on if a panic occurs. @@ -41,6 +44,7 @@ func PanicHandler() { fmt.Fprintln(panicLog, time.Now().Format("2006-01-02T15:04:05.000000-0700")) fmt.Fprintln(panicLog, strings.Repeat("#", 80)) fmt.Fprintf(outputs, "%s\n", panicMessage) + fmt.Fprintf(outputs, "Version: %s\n", BuildInfo) fmt.Fprintf(panicLog, "Error: %v\n\n", r) panicLog.Write(debug.Stack()) //nolint:errcheck // we are already in a panic, so not much we can do here fmt.Fprintf(os.Stderr, "\nThis error was also written to: %s\n", filename)