From e66d800881471a6bfa96af09fa7b33dadffeec0c Mon Sep 17 00:00:00 2001 From: omicron Date: Thu, 8 May 2025 15:54:13 +0200 Subject: [PATCH] Add version package and update the makefile The makefile will grab the version info from git and pass it to the linker so that version information based on tags, commits and commit times is available in the code. --- Makefile | 11 ++++++++++- internal/database/manager.go | 10 +++++----- internal/version/version.go | 17 +++++++++++++++++ 3 files changed, 32 insertions(+), 6 deletions(-) create mode 100644 internal/version/version.go diff --git a/Makefile b/Makefile index 900c766..c96713f 100644 --- a/Makefile +++ b/Makefile @@ -3,6 +3,15 @@ BINARIES = $(patsubst cmd/%/,%,$(wildcard cmd/*/)) .PHONY: all build test validate clean run $(BINARIES) +VERSION := $(shell git describe --tags --always --dirty) +COMMIT := $(shell git rev-parse --short HEAD) +COMMIT_DATETIME := $(shell git log -1 --format=%cd --date=iso8601) + +LDFLAGS := -X git.omicron.one/omicron/linkshare/internal/version.Version=$(VERSION) \ + -X git.omicron.one/omicron/linkshare/internal/version.GitCommit=$(COMMIT) \ + -X "git.omicron.one/omicron/linkshare/internal/version.CommitDateTime=$(COMMIT_DATETIME)" + + all: build @@ -13,7 +22,7 @@ $(BINARY_DIR): mkdir -p $(BINARY_DIR) $(BINARIES): %: $(BINARY_DIR) - go build -o $(BINARY_DIR)/$@ ./cmd/$@/ + go build -ldflags '$(LDFLAGS)' -o $(BINARY_DIR)/$@ ./cmd/$@/ test: go test ./... diff --git a/internal/database/manager.go b/internal/database/manager.go index 36af320..cd90837 100644 --- a/internal/database/manager.go +++ b/internal/database/manager.go @@ -14,9 +14,9 @@ import ( "strconv" _ "github.com/mattn/go-sqlite3" -) -const expectedSchemaVersion = 1 + "git.omicron.one/omicron/linkshare/internal/version" +) // DB represents a database connection type DB struct { @@ -123,13 +123,13 @@ func (db *DB) CheckSchemaVersion() error { if err != nil { return err } - version, err := db.GetSchemaVersion() + version_, err := db.GetSchemaVersion() if err != nil { return err } - if version < expectedSchemaVersion { + if version_ < version.SchemaVersion { return ErrSchemaOutdated - } else if version > expectedSchemaVersion { + } else if version_ > version.SchemaVersion { return ErrSchemaUnsupported } return nil diff --git a/internal/version/version.go b/internal/version/version.go new file mode 100644 index 0000000..51e5feb --- /dev/null +++ b/internal/version/version.go @@ -0,0 +1,17 @@ +package version + +import "fmt" + +var ( + Version = "dev" + GitCommit = "unknown" + CommitDateTime = "unknown" + SchemaVersion = 1 +) + +// PrintVersionInfo prints formatted version information to stdout +func Print() { + fmt.Printf("Version: %s\n", Version) + fmt.Printf("Git commit: %s %s\n", GitCommit, CommitDateTime) + fmt.Printf("Schema: v%d\n", SchemaVersion) +}