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) }, }