feat(cli): add git commit hash to version output

Users can now see the exact git commit used to build the binary,
which helps with debugging and deployment tracking.
This commit is contained in:
yinwm
2026-02-13 16:39:44 +08:00
parent 7fa70b8cdf
commit 5aa4dd2975
2 changed files with 21 additions and 6 deletions

View File

@@ -8,9 +8,10 @@ MAIN_GO=$(CMD_DIR)/main.go
# Version # Version
VERSION?=$(shell git describe --tags --always --dirty 2>/dev/null || echo "dev") VERSION?=$(shell git describe --tags --always --dirty 2>/dev/null || echo "dev")
GIT_COMMIT=$(shell git rev-parse --short=8 HEAD 2>/dev/null || echo "unknown")
BUILD_TIME=$(shell date +%FT%T%z) BUILD_TIME=$(shell date +%FT%T%z)
GO_VERSION=$(shell $(GO) version | awk '{print $$3}') GO_VERSION=$(shell $(GO) version | awk '{print $$3}')
LDFLAGS=-ldflags "-X main.version=$(VERSION) -X main.buildTime=$(BUILD_TIME) -X main.goVersion=$(GO_VERSION)" LDFLAGS=-ldflags "-X main.version=$(VERSION) -X main.gitCommit=$(GIT_COMMIT) -X main.buildTime=$(BUILD_TIME) -X main.goVersion=$(GO_VERSION)"
# Go variables # Go variables
GO?=go GO?=go

View File

@@ -36,6 +36,7 @@ import (
var ( var (
version = "dev" version = "dev"
gitCommit string
buildTime string buildTime string
goVersion string goVersion string
) )
@@ -43,7 +44,11 @@ var (
const logo = "🦞" const logo = "🦞"
func printVersion() { func printVersion() {
fmt.Printf("%s picoclaw %s\n", logo, version) fmt.Printf("%s picoclaw %s", logo, version)
if gitCommit != "" {
fmt.Printf(" (git: %s)", gitCommit)
}
fmt.Println()
if buildTime != "" { if buildTime != "" {
fmt.Printf(" Build: %s\n", buildTime) fmt.Printf(" Build: %s\n", buildTime)
} }
@@ -760,7 +765,16 @@ func statusCmd() {
configPath := getConfigPath() configPath := getConfigPath()
fmt.Printf("%s picoclaw Status\n\n", logo) fmt.Printf("%s picoclaw Status\n", logo)
fmt.Printf("Version: %s", version)
if gitCommit != "" {
fmt.Printf(" (git: %s)", gitCommit)
}
fmt.Println()
if buildTime != "" {
fmt.Printf("Build: %s\n", buildTime)
}
fmt.Println()
if _, err := os.Stat(configPath); err == nil { if _, err := os.Stat(configPath); err == nil {
fmt.Println("Config:", configPath, "✓") fmt.Println("Config:", configPath, "✓")