diff --git a/.gitea/workflows/build-and-package.yaml b/.gitea/workflows/build-and-package.yaml index 90e0389..f1d7fb2 100644 --- a/.gitea/workflows/build-and-package.yaml +++ b/.gitea/workflows/build-and-package.yaml @@ -15,6 +15,7 @@ env: LICENSE: MIT DESCRIPTION: "Effortless conversion from compose files (docker, podman) to Helm Charts" URL: "https://katenary.io" + VERSION: ${{ gitea.ref_name }} jobs: build-packages: @@ -35,7 +36,8 @@ jobs: steps: - name: Extract version run: | - VERSION="${GITEA_REFNAME#releases/} + VERSION="${VERSION#releases/}" + echo "Exporting variable VERSION=$VERSION" echo "VERSION=$VERSION" >> $GITEA_OUTPUT echo "VERSION=$VERSION" >> $GITEA_ENV @@ -61,6 +63,7 @@ jobs: - name: Compile binary if: matrix.goos == 'linux' || matrix.goos == 'freebsd' || matrix.goos == 'darwin' run: |- + echo "Building binary version $VERSION" mkdir -p dist GOARCH=${{ matrix.goarch }} GOOS=${{ matrix.goos }}\ go build -ldflags="-X 'repo.katenary.io/katenary/katenary/internal/generator.Version=$VERSION'" \ diff --git a/.gitea/workflows/build-oci.yaml b/.gitea/workflows/build-oci.yaml index 0e5d430..a003b54 100644 --- a/.gitea/workflows/build-oci.yaml +++ b/.gitea/workflows/build-oci.yaml @@ -9,6 +9,7 @@ env: REGISTRY: repo.katenary.io IMAGE_NAME: ${{ gitea.repository }} STORAGE_DRIVER: vfs + VERSION: ${{ gitea.ref_name }} jobs: build: @@ -19,7 +20,8 @@ jobs: steps: - name: Extract version run: | - VERSION="${GITEA_REFNAME#releases/} + VERSION="${VERSION#releases/}" + echo "Exporting variable VERSION=$VERSION" echo "VERSION=$VERSION" >> $GITEA_OUTPUT echo "VERSION=$VERSION" >> $GITEA_ENV @@ -42,6 +44,7 @@ jobs: - name: Build and tag run: |- + echo "Building image $REGISTRY/${IMAGE_NAME,,}:$VERSION / latest" buildah build --isolation=chroot --build-arg VERSION=$VERSION -t katenary -f ./oci/katenary/Containerfile . buildah tag katenary $REGISTRY/${IMAGE_NAME,,}:$VERSION buildah tag katenary $REGISTRY/${IMAGE_NAME,,}:latest diff --git a/internal/generator/version.go b/internal/generator/version.go index 309c955..471264c 100644 --- a/internal/generator/version.go +++ b/internal/generator/version.go @@ -3,6 +3,7 @@ package generator import ( "regexp" "runtime/debug" + "strings" ) // Version is the version of katenary. It is set at compile time. @@ -14,8 +15,15 @@ var Version = "master" // changed at compile time func GetVersion() string { // try to get the semantic version from the Version variable (theorically set at compile time) if reg := regexp.MustCompile(`^v?\d+.\d+.\d+.*|^release-.*`); reg.MatchString(Version) { + Version = strings.Replace(Version, "release-", "v", 1) + if Version[0] != 'v' { + Version = "v" + Version + } return Version } + if reg := regexp.MustCompile(`^releases/.*`); reg.MatchString(Version) { + return strings.Replace(Version, "releases/", "v", 1) + } // OK... let's try to get the version from the build info // get the version from the build info (when installed with go install) diff --git a/internal/generator/version_test.go b/internal/generator/version_test.go index 9b153c7..b280df9 100644 --- a/internal/generator/version_test.go +++ b/internal/generator/version_test.go @@ -6,29 +6,53 @@ import ( ) func TestVersion(t *testing.T) { + expected := "v1.0.0" + + errorMessage := func(value, expected any) string { + return "Expected version to be " + expected.(string) + ", got " + value.(string) + } + + // first, let's test the default behavior + // when we compile from source, without setting the Version variable, + + // by default, when we are developing, the Version variable is set to "master" // 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) + errorMessage(v, "(devel)") } // 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) + if !strings.Contains(v, expected) { + errorMessage(v, expected) } // 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) + if !strings.Contains(v, expected) { + errorMessage(v, expected) } // we can also compile a release branch Version = "release-1.0.0" v = GetVersion() - if !strings.Contains(v, "release-1.0.0") { - t.Errorf("Expected version to be set, got %s", v) + if !strings.Contains(v, expected) { + errorMessage(v, expected) + } + + // for releases-* tags + Version = "release-1.0.0" + v = GetVersion() + if !strings.Contains(v, expected) { + errorMessage(v, expected) + } + + // and for releases/* tags + Version = "releases/1.0.0" + v = GetVersion() + if !strings.Contains(v, expected) { + errorMessage(v, expected) } } diff --git a/makefiles/build.mk b/makefiles/build.mk index 68da02b..573533c 100644 --- a/makefiles/build.mk +++ b/makefiles/build.mk @@ -1,5 +1,5 @@ ## BUILD -GO_BUILD=go build -ldflags="-X 'repo.katenary.io/katenary/katenary/internal/generator.Version=$(VERSION)'" -trimpath -o $(OUTPUT) ./cmd/katenary +GO_BUILD=go build -ldflags="-X 'katenary.io/internal/generator.Version=$(VERSION)'" -trimpath -o $(OUTPUT) ./cmd/katenary # Simply build the binary for the current OS and architecture build: pull katenary diff --git a/makefiles/containers.mk b/makefiles/containers.mk index dfe4f34..41f0daa 100644 --- a/makefiles/containers.mk +++ b/makefiles/containers.mk @@ -45,8 +45,10 @@ builder-oci-image: @$(CTN) build -t go-builder:$(GOVERSION) ./oci/builder \ --build-arg GOVERSION=$(GOVERSION) 1>/dev/null katenary-oci: - $(CTN) build -f oci/katenary/Containerfile -t katenary:$(VERSION) \ + VERSION=$(VERSION) \ + VERSION=$${VERSION#releases/}; \ + $(CTN) build -f oci/katenary/Containerfile -t katenary:$$VERSION \ --build-arg GOVERSION=$(GOVERSION) \ --build-arg VERSION=$(VERSION) \ ./ - $(CTN) tag katenary:$(VERSION) katenary:latest + $(CTN) tag katenary:$$VERSION katenary:latest diff --git a/oci/katenary/Containerfile b/oci/katenary/Containerfile index aab0e13..9fd4d4c 100644 --- a/oci/katenary/Containerfile +++ b/oci/katenary/Containerfile @@ -13,7 +13,8 @@ COPY internal /go/src/repo.katenary.io/katenary/katenary/internal WORKDIR /go/src/repo.katenary.io/katenary/katenary ENV CGO_ENABLED=0 RUN set -xe; \ - go build -ldflags="-X 'repo.katenary.io/katenary/katenary/internal/generator.Version=v${VERSION}'" -trimpath -o katenary ./cmd/katenary + export VERSION=${VERSION#releases/}; \ + go build -ldflags="-X 'katenary.io/internal/generator.Version=v${VERSION}'" -trimpath -o katenary ./cmd/katenary FROM scratch