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) +}