From 69801d1fb93e55b5ce1dea02bc00473284392ced Mon Sep 17 00:00:00 2001 From: Dario Tranchitella Date: Fri, 17 Jun 2022 14:28:26 +0200 Subject: [PATCH] feat: providing binary version and details --- Dockerfile | 10 +++++++++- Makefile | 16 +++++++++++++++- internal/version.go | 12 ++++++++++++ main.go | 9 +++++++++ 4 files changed, 45 insertions(+), 2 deletions(-) create mode 100644 internal/version.go diff --git a/Dockerfile b/Dockerfile index 27d60d6..d3dba5a 100644 --- a/Dockerfile +++ b/Dockerfile @@ -2,6 +2,12 @@ FROM golang:1.18 as builder ARG TARGETARCH +ARG GIT_HEAD_COMMIT +ARG GIT_TAG_COMMIT +ARG GIT_LAST_TAG +ARG GIT_MODIFIED +ARG GIT_REPO +ARG BUILD_DATE WORKDIR /workspace # Copy the Go Modules manifests @@ -18,7 +24,9 @@ COPY controllers/ controllers/ COPY internal/ internal/ # Build -RUN CGO_ENABLED=0 GOOS=linux GOARCH=$TARGETARCH go build -a -o manager main.go +RUN CGO_ENABLED=0 GOOS=linux GOARCH=$TARGETARCH go build \ + -ldflags "-X github.com/clastix/kamaji/internal.GitRepo=$GIT_REPO -X github.com/clastix/kamaji/internal.GitTag=$GIT_LAST_TAG -X github.com/clastix/kamaji/internal.GitCommit=$GIT_HEAD_COMMIT -X github.com/clastix/kamaji/internal.GitDirty=$GIT_MODIFIED -X github.com/clastix/kamaji/internal.BuildTime=$BUILD_DATE" \ + -a -o manager main.go # Use distroless as minimal base image to package the manager binary # Refer to https://github.com/GoogleContainerTools/distroless for more details diff --git a/Makefile b/Makefile index 83050de..bbfcd7c 100644 --- a/Makefile +++ b/Makefile @@ -106,6 +106,15 @@ test: ##@ Build +# Get information about git current status +GIT_HEAD_COMMIT ?= $$(git rev-parse --short HEAD) +GIT_TAG_COMMIT ?= $$(git rev-parse --short $(VERSION)) +GIT_MODIFIED_1 ?= $$(git diff $(GIT_HEAD_COMMIT) $(GIT_TAG_COMMIT) --quiet && echo "" || echo ".dev") +GIT_MODIFIED_2 ?= $$(git diff --quiet && echo "" || echo ".dirty") +GIT_MODIFIED ?= $$(echo "$(GIT_MODIFIED_1)$(GIT_MODIFIED_2)") +GIT_REPO ?= $$(git config --get remote.origin.url) +BUILD_DATE ?= $$(git log -1 --format="%at" | xargs -I{} date -d @{} +%Y-%m-%dT%H:%M:%S) + build: generate fmt vet ## Build manager binary. go build -o bin/manager main.go @@ -113,7 +122,12 @@ run: manifests generate fmt vet ## Run a controller from your host. go run ./main.go docker-build: ## Build docker image with the manager. - docker build -t ${IMG} . + docker build -t ${IMG} . --build-arg GIT_HEAD_COMMIT=$(GIT_HEAD_COMMIT) \ + --build-arg GIT_TAG_COMMIT=$(GIT_TAG_COMMIT) \ + --build-arg GIT_MODIFIED=$(GIT_MODIFIED) \ + --build-arg GIT_REPO=$(GIT_REPO) \ + --build-arg GIT_LAST_TAG=$(VERSION) \ + --build-arg BUILD_DATE=$(BUILD_DATE) docker-push: ## Push docker image with the manager. docker push ${IMG} diff --git a/internal/version.go b/internal/version.go new file mode 100644 index 0000000..337d181 --- /dev/null +++ b/internal/version.go @@ -0,0 +1,12 @@ +// Copyright 2022 Clastix Labs +// SPDX-License-Identifier: Apache-2.0 + +package internal + +var ( + GitRepo = "" + GitTag = "dev" + GitCommit = "" + GitDirty = "dirty" + BuildTime = "" +) diff --git a/main.go b/main.go index 32c6c77..760d867 100644 --- a/main.go +++ b/main.go @@ -17,8 +17,10 @@ limitations under the License. package main import ( + "fmt" "log" "os" + goRuntime "runtime" "k8s.io/apimachinery/pkg/runtime" utilruntime "k8s.io/apimachinery/pkg/util/runtime" @@ -29,6 +31,7 @@ import ( kamajiv1alpha1 "github.com/clastix/kamaji/api/v1alpha1" "github.com/clastix/kamaji/controllers" + "github.com/clastix/kamaji/internal" "github.com/clastix/kamaji/internal/config" ) @@ -50,6 +53,12 @@ func main() { log.Fatalf("Error reading configuration.") } + setupLog.Info(fmt.Sprintf("Kamaji version %s %s%s", internal.GitTag, internal.GitCommit, internal.GitDirty)) + setupLog.Info(fmt.Sprintf("Build from: %s", internal.GitRepo)) + setupLog.Info(fmt.Sprintf("Build date: %s", internal.BuildTime)) + setupLog.Info(fmt.Sprintf("Go Version: %s", goRuntime.Version())) + setupLog.Info(fmt.Sprintf("Go OS/Arch: %s/%s", goRuntime.GOOS, goRuntime.GOARCH)) + mgr, err := ctrl.NewManager(ctrl.GetConfigOrDie(), ctrl.Options{ Scheme: scheme, MetricsBindAddress: conf.GetString("metrics-bind-address"),