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 a604cd7223
commit 411ec69579
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

@ -35,15 +35,20 @@ import (
) )
var ( var (
version = "dev" version = "dev"
buildTime string gitCommit string
goVersion string buildTime string
goVersion string
) )
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, "✓")