From 8582010d900ef5b5a92d22aa384e839a03cb61e8 Mon Sep 17 00:00:00 2001 From: Patrice Ferlet Date: Thu, 10 Jul 2025 15:15:25 +0200 Subject: [PATCH] fix(versionning): Fix version Version should be x.y.z for releases. It makes things homogenous for debian version (that needs a number as first char) and it is semantically better. At this time, the Makefile is OK. Maybe we don't need `PKG_VERSION` later. --- Makefile | 18 +++++++++++++----- generator/version.go | 12 +++++++++--- generator/version_test.go | 13 +++++++++++++ 3 files changed, 35 insertions(+), 8 deletions(-) diff --git a/Makefile b/Makefile index bb2886c..bccfe26 100644 --- a/Makefile +++ b/Makefile @@ -11,7 +11,6 @@ MAKEFLAGS += --no-builtin-rules CUR_SHA=$(shell git log -n1 --pretty='%h') CUR_BRANCH=$(shell git branch --show-current) VERSION=$(shell git describe --exact-match --tags $(CUR_SHA) 2>/dev/null || echo $(CUR_BRANCH)-$(CUR_SHA))# use by golang flags -PKG_VERSION=$(VERSION)# used for package name # Go build command and environment variables for target OS and architecture GOVERSION=1.24 @@ -21,7 +20,6 @@ GOOS=linux GOARCH=amd64 CGO_ENABLED=0 PREFIX=~/.local -BLD_CMD=go build -ldflags="-X 'katenary/generator.Version=$(VERSION)'" -o $(OUTPUT) ./cmd/katenary # Get the container (podman is preferred, but docker is also supported) # TODO: prpose nerdctl @@ -38,13 +36,16 @@ PKG_OCI_OPTS:=--rm -it \ # Set the version and package version, following build mode (default, release) MODE=default -RELEASE="" # If release mode ifeq ($(MODE),release) - PKG_VERSION=v$(VERSION) - VERSION:=release-$(VERSION) + PKG_VERSION:=$(VERSION) + VERSION:=$(VERSION) +else + PKG_VERSION=$(VERSION)# used for package name endif +BLD_CMD=go build -ldflags="-X 'katenary/generator.Version=$(VERSION)'" -o $(OUTPUT) ./cmd/katenary + # UPX compression UPX_OPTS = @@ -67,6 +68,13 @@ SIGNER=metal3d@gmail.com # Browser command to see coverage report after tests BROWSER=$(shell command -v epiphany || echo xdg-open) +check-version: + @echo "=> Checking version..." + @echo "Mode: $(MODE)" + @echo "Current version: $(VERSION)" + @echo "Package version: $(PKG_VERSION)" + @echo "Build command: $(BLD_CMD)" + all: build help: diff --git a/generator/version.go b/generator/version.go index b528773..310bbf2 100644 --- a/generator/version.go +++ b/generator/version.go @@ -1,8 +1,8 @@ package generator import ( + "regexp" "runtime/debug" - "strings" ) // Version is the version of katenary. It is set at compile time. @@ -12,13 +12,19 @@ var Version = "master" // changed at compile time // the version is set at compile time for the github release. But, it the user get // katneary using `go install`, the version should be different. func GetVersion() string { - if strings.HasPrefix(Version, "release-") { + // try to get the semantic version from the Version variable (theorically set at compile time) + reg := regexp.MustCompile(`^(.?\d+.\d+.\d+.*)|^release-.*`) + if reg.MatchString(Version) { return Version } - // get the version from the build info + + // OK... let's try to get the version from the build info + // get the version from the build info (when installed with go install) v, ok := debug.ReadBuildInfo() if ok { return v.Main.Version + "-" + v.GoVersion } + + // OK... none worked, so we return the default version return Version } diff --git a/generator/version_test.go b/generator/version_test.go index c65c2f3..9b153c7 100644 --- a/generator/version_test.go +++ b/generator/version_test.go @@ -8,11 +8,24 @@ import ( func TestVersion(t *testing.T) { // we build on "devel" branch v := GetVersion() + // by default, the version comes from build info and it's a development version if !strings.Contains(v, "(devel)") { t.Errorf("Expected version to be set, got %s", v) } // now, imagine we are on a release branch + Version = "1.0.0" + v = GetVersion() + if !strings.Contains(v, "1.0.0") { + t.Errorf("Expected version to be set, got %s", v) + } + // now, imagine we are on v1.0.0 + Version = "v1.0.0" + v = GetVersion() + if !strings.Contains(v, "v1.0.0") { + t.Errorf("Expected version to be set, got %s", v) + } + // we can also compile a release branch Version = "release-1.0.0" v = GetVersion() if !strings.Contains(v, "release-1.0.0") {