diff --git a/Makefile b/Makefile index 2faf0fb..f7d2690 100644 --- a/Makefile +++ b/Makefile @@ -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 diff --git a/cmd/rtsp-streamer/commands.go b/cmd/rtsp-streamer/commands.go index 250d55c..d46d682 100644 --- a/cmd/rtsp-streamer/commands.go +++ b/cmd/rtsp-streamer/commands.go @@ -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{ diff --git a/cmd/rtsp-streamer/main.go b/cmd/rtsp-streamer/main.go index da42360..70a5eba 100644 --- a/cmd/rtsp-streamer/main.go +++ b/cmd/rtsp-streamer/main.go @@ -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 {