Add --version / version with baked-in git commit

ldflags inject version, commit, and build date; a version subcommand
also reports go version and platform. Ends the which-binary-is-this
guessing after deploys.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
Levi Woodard
2026-07-01 19:47:44 -05:00
parent eb05c48db8
commit 477246d574
3 changed files with 34 additions and 1 deletions

View File

@@ -1,7 +1,15 @@
BINARY := rtsp-streamer
PKG := ./cmd/rtsp-streamer
BINDIR := bin
LDFLAGS := -s -w
# Build metadata baked into the binary (see `rtsp-streamer version`).
VERSION ?= $(shell git describe --tags --always --dirty 2>/dev/null || echo dev)
COMMIT ?= $(shell git rev-parse --short HEAD 2>/dev/null || echo none)
DATE ?= $(shell date -u +%Y-%m-%dT%H:%M:%SZ)
LDFLAGS := -s -w \
-X main.version=$(VERSION) \
-X main.commit=$(COMMIT) \
-X main.date=$(DATE)
# Install location. Override with `make install PREFIX=/opt`.
PREFIX ?= /usr/local

View File

@@ -5,6 +5,7 @@ import (
"fmt"
"os"
"os/signal"
"runtime"
"sort"
"syscall"
"text/tabwriter"
@@ -17,6 +18,21 @@ import (
"github.com/spf13/cobra"
)
// versionCmd prints detailed build and runtime info.
func versionCmd() *cobra.Command {
return &cobra.Command{
Use: "version",
Short: "Print version, git commit, and build info",
Run: func(cmd *cobra.Command, _ []string) {
fmt.Printf("rtsp-streamer %s\n", version)
fmt.Printf(" commit: %s\n", commit)
fmt.Printf(" built: %s\n", date)
fmt.Printf(" go: %s\n", runtime.Version())
fmt.Printf(" platform: %s/%s\n", runtime.GOOS, runtime.GOARCH)
},
}
}
// daemonCmd runs the video wall. This is what systemd (via sway) launches.
func daemonCmd() *cobra.Command {
return &cobra.Command{

View File

@@ -17,10 +17,18 @@ var (
logLevel string
)
// Build metadata, injected via -ldflags -X at build time (see Makefile).
var (
version = "dev"
commit = "none"
date = "unknown"
)
func main() {
root := &cobra.Command{
Use: "rtsp-streamer",
Short: "Full-screen RTSP camera wall for UniFi Protect",
Version: fmt.Sprintf("%s (commit %s, built %s)", version, commit, date),
SilenceUsage: true,
SilenceErrors: true,
}
@@ -34,6 +42,7 @@ func main() {
statusCmd(),
tuiCmd(),
configCmd(),
versionCmd(),
)
if err := root.Execute(); err != nil {