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.
This commit is contained in:
11
Makefile
11
Makefile
@ -3,6 +3,15 @@ BINARIES = $(patsubst cmd/%/,%,$(wildcard cmd/*/))
|
|||||||
|
|
||||||
.PHONY: all build test validate clean run $(BINARIES)
|
.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
|
all: build
|
||||||
|
|
||||||
|
|
||||||
@ -13,7 +22,7 @@ $(BINARY_DIR):
|
|||||||
mkdir -p $(BINARY_DIR)
|
mkdir -p $(BINARY_DIR)
|
||||||
|
|
||||||
$(BINARIES): %: $(BINARY_DIR)
|
$(BINARIES): %: $(BINARY_DIR)
|
||||||
go build -o $(BINARY_DIR)/$@ ./cmd/$@/
|
go build -ldflags '$(LDFLAGS)' -o $(BINARY_DIR)/$@ ./cmd/$@/
|
||||||
|
|
||||||
test:
|
test:
|
||||||
go test ./...
|
go test ./...
|
||||||
|
@ -14,9 +14,9 @@ import (
|
|||||||
"strconv"
|
"strconv"
|
||||||
|
|
||||||
_ "github.com/mattn/go-sqlite3"
|
_ "github.com/mattn/go-sqlite3"
|
||||||
)
|
|
||||||
|
|
||||||
const expectedSchemaVersion = 1
|
"git.omicron.one/omicron/linkshare/internal/version"
|
||||||
|
)
|
||||||
|
|
||||||
// DB represents a database connection
|
// DB represents a database connection
|
||||||
type DB struct {
|
type DB struct {
|
||||||
@ -123,13 +123,13 @@ func (db *DB) CheckSchemaVersion() error {
|
|||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
version, err := db.GetSchemaVersion()
|
version_, err := db.GetSchemaVersion()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
if version < expectedSchemaVersion {
|
if version_ < version.SchemaVersion {
|
||||||
return ErrSchemaOutdated
|
return ErrSchemaOutdated
|
||||||
} else if version > expectedSchemaVersion {
|
} else if version_ > version.SchemaVersion {
|
||||||
return ErrSchemaUnsupported
|
return ErrSchemaUnsupported
|
||||||
}
|
}
|
||||||
return nil
|
return nil
|
||||||
|
17
internal/version/version.go
Normal file
17
internal/version/version.go
Normal file
@ -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)
|
||||||
|
}
|
Reference in New Issue
Block a user