From d7b19a4930772df4af623b5f234945dc43153d32 Mon Sep 17 00:00:00 2001 From: Davide Imola Date: Fri, 5 Mar 2021 21:02:41 +0100 Subject: [PATCH] build: using Docker build args for build metadata (#217) --- Dockerfile | 20 +++++++++----------- Makefile | 16 +++++++++++++++- 2 files changed, 24 insertions(+), 12 deletions(-) diff --git a/Dockerfile b/Dockerfile index 1e00430f..380b2b5f 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,6 +1,13 @@ # Build the manager binary FROM golang:1.13 as builder +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 COPY go.mod go.mod @@ -15,20 +22,11 @@ COPY version.go version.go COPY api/ api/ COPY controllers/ controllers/ COPY pkg/ pkg/ -COPY .git .git # Build -RUN git config --get remote.origin.url > /tmp/GIT_REPO && \ - git rev-parse --short HEAD > /tmp/GIT_HEAD_COMMIT && \ - git describe --abbrev=0 --tags > /tmp/GIT_LAST_TAG && \ - git rev-parse --short $(cat /tmp/GIT_LAST_TAG) > /tmp/GIT_TAG_COMMIT && \ - git diff $(cat /tmp/GIT_HEAD_COMMIT) $(cat /tmp/GIT_TAG_COMMIT) --quiet > /tmp/GIT_MODIFIED1 || echo '.dev' > /tmp/GIT_MODIFIED1 && \ - git diff --quiet > /tmp/GIT_MODIFIED2 || echo '.dirty' > /tmp/GIT_MODIFIED2 && \ - cat /tmp/GIT_MODIFIED1 /tmp/GIT_MODIFIED2 | tr -d '\n' > /tmp/GIT_MODIFIED && \ - date '+%Y-%m-%dT%H:%M:%S' > /tmp/BUILD_DATE &&\ - CGO_ENABLED=0 GOOS=linux GOARCH=amd64 GO111MODULE=on go build \ +RUN CGO_ENABLED=0 GOOS=linux GOARCH=amd64 GO111MODULE=on go build \ -gcflags "-N -l" \ - -ldflags "-X main.GitRepo=$(cat /tmp/GIT_REPO) -X main.GitTag=$(cat /tmp/GIT_LAST_TAG) -X main.GitCommit=$(cat /tmp/GIT_HEAD_COMMIT) -X main.GitDirty=$(cat /tmp/GIT_MODIFIED) -X main.BuildTime=$(cat /tmp/BUILD_DATE)" \ + -ldflags "-X main.GitRepo=$GIT_REPO -X main.GitTag=$GIT_LAST_TAG -X main.GitCommit=$GIT_HEAD_COMMIT -X main.GitDirty=$GIT_MODIFIED -X main.BuildTime=$BUILD_DATE" \ -o manager # Use distroless as minimal base image to package the manager binary diff --git a/Makefile b/Makefile index 1c9c55ee..b279f343 100644 --- a/Makefile +++ b/Makefile @@ -24,6 +24,15 @@ else GOBIN=$(shell go env GOBIN) endif +# 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 ?= $$(date '+%Y-%m-%dT%H:%M:%S') + all: manager # Run tests @@ -75,7 +84,12 @@ generate: controller-gen # Build the docker image docker-build: test - 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) # Push the docker image docker-push: