From 6e21a0798aad4ae97ae25349b2d7c070d2cebd4c Mon Sep 17 00:00:00 2001 From: Daniel Tomlinson Date: Sat, 11 Apr 2026 15:00:06 +0100 Subject: [PATCH] Enhances version info retrieval Improves the `version` command to automatically extract build details (version, commit, date) from Go's `debug.ReadBuildInfo` when `ldflags` are not provided. This allows users installing via `go install` to receive accurate version information without requiring a Makefile or explicit build flags. Updates the README to reflect this new capability. --- README.md | 2 ++ cmd/version.go | 35 +++++++++++++++++++++++++++++++---- 2 files changed, 33 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index 8d59ca9..a7d1a30 100644 --- a/README.md +++ b/README.md @@ -152,6 +152,8 @@ The Makefile automatically injects version information from git tags: - `Commit`: Short commit hash - `Date`: Build timestamp +**Note:** Version information is automatically included when installing via `go install` (no Makefile needed). The tool reads version info from Go's build metadata. + Check the version after installing: ```bash gitlocal version diff --git a/cmd/version.go b/cmd/version.go index a0b6b1f..41a37f7 100644 --- a/cmd/version.go +++ b/cmd/version.go @@ -2,12 +2,14 @@ package cmd import ( "fmt" + "runtime/debug" "github.com/spf13/cobra" ) var ( - // Version is set via -ldflags during build + // Version is set via -ldflags during build (for make install) + // Falls back to module version from go install Version = "dev" // Commit is set via -ldflags during build Commit = "unknown" @@ -20,9 +22,34 @@ var versionCmd = &cobra.Command{ Short: "Print version information", Long: `Display the version, commit hash, and build date of gitlocal.`, Run: func(cmd *cobra.Command, args []string) { - fmt.Printf("gitlocal version %s\n", Version) - fmt.Printf(" Commit: %s\n", Commit) - fmt.Printf(" Built: %s\n", Date) + version := Version + commit := Commit + date := Date + + // If installed via 'go install', read version from build info + if version == "dev" { + if info, ok := debug.ReadBuildInfo(); ok { + version = info.Main.Version + + // Extract commit and date from build settings + for _, setting := range info.Settings { + switch setting.Key { + case "vcs.revision": + if len(setting.Value) > 7 { + commit = setting.Value[:7] + } else { + commit = setting.Value + } + case "vcs.time": + date = setting.Value + } + } + } + } + + fmt.Printf("gitlocal version %s\n", version) + fmt.Printf(" Commit: %s\n", commit) + fmt.Printf(" Built: %s\n", date) }, }