Skip to content

Commit 766dee5

Browse files
authored
Align build steps - distinguish clean vs dev builds (#828)
Reducing the Dockerfile dependencies allows faster dev builds
1 parent aedde56 commit 766dee5

File tree

5 files changed

+17
-21
lines changed

5 files changed

+17
-21
lines changed

.github/workflows/push_image.yml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -37,8 +37,8 @@ jobs:
3737
run: echo "short_sha=$(git rev-parse --short HEAD)" >> $GITHUB_ENV
3838
- name: build images
3939
run: |
40-
MULTIARCH_TARGETS="${{ env.WF_MULTIARCH_TARGETS }}" IMAGE_ORG=${{ env.WF_ORG }} IMAGE=${{ env.WF_REGISTRY }}/${{ env.WF_IMAGE }}:${{ env.WF_VERSION }} make image-build
41-
MULTIARCH_TARGETS="${{ env.WF_MULTIARCH_TARGETS }}" IMAGE_ORG=${{ env.WF_ORG }} IMAGE=${{ env.WF_REGISTRY }}/${{ env.WF_IMAGE }}:${{ env.short_sha }} OCI_BUILD_OPTS="--label quay.expires-after=2w" make image-build
40+
MULTIARCH_TARGETS="${{ env.WF_MULTIARCH_TARGETS }}" IMAGE_ORG=${{ env.WF_ORG }} IMAGE=${{ env.WF_REGISTRY }}/${{ env.WF_IMAGE }}:${{ env.WF_VERSION }} CLEAN_BUILD=1 make image-build
41+
MULTIARCH_TARGETS="${{ env.WF_MULTIARCH_TARGETS }}" IMAGE_ORG=${{ env.WF_ORG }} IMAGE=${{ env.WF_REGISTRY }}/${{ env.WF_IMAGE }}:${{ env.short_sha }} CLEAN_BUILD=1 OCI_BUILD_OPTS="--label quay.expires-after=2w" make image-build
4242
- name: push images
4343
run: |
4444
MULTIARCH_TARGETS="${{ env.WF_MULTIARCH_TARGETS }}" IMAGE_ORG=${{ env.WF_ORG }} IMAGE=${{ env.WF_REGISTRY }}/${{ env.WF_IMAGE }}:${{ env.WF_VERSION }} make image-push

.github/workflows/push_image_pr.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@ jobs:
3838
- name: get short sha
3939
run: echo "short_sha=$(git rev-parse --short HEAD)" >> $GITHUB_ENV
4040
- name: build image
41-
run: OCI_BUILD_OPTS="--label quay.expires-after=2w" IMAGE_ORG=${{ env.WF_ORG }} IMAGE=${{ env.WF_REGISTRY }}/${{ env.WF_IMAGE }}:${{ env.short_sha }} make image-build
41+
run: OCI_BUILD_OPTS="--label quay.expires-after=2w" IMAGE_ORG=${{ env.WF_ORG }} IMAGE=${{ env.WF_REGISTRY }}/${{ env.WF_IMAGE }}:${{ env.short_sha }} CLEAN_BUILD=1 make image-build
4242
- name: push image
4343
run: IMAGE_ORG=${{ env.WF_ORG }} IMAGE=${{ env.WF_REGISTRY }}/${{ env.WF_IMAGE }}:${{ env.short_sha }} make image-push
4444
- name: build and push manifest

.github/workflows/release.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,7 @@ jobs:
4545
go-version: ${{ matrix.go }}
4646
- name: build operator
4747
run: |
48-
MULTIARCH_TARGETS="${{ env.WF_MULTIARCH_TARGETS }}" IMAGE_ORG=${{ env.WF_ORG }} IMAGE=${{ env.WF_REGISTRY }}/${{ env.WF_IMAGE }}:${{ env.tag }} make image-build
48+
MULTIARCH_TARGETS="${{ env.WF_MULTIARCH_TARGETS }}" IMAGE_ORG=${{ env.WF_ORG }} IMAGE=${{ env.WF_REGISTRY }}/${{ env.WF_IMAGE }}:${{ env.tag }} CLEAN_BUILD=1 make image-build
4949
- name: push operator
5050
run: |
5151
MULTIARCH_TARGETS="${{ env.WF_MULTIARCH_TARGETS }}" IMAGE_ORG=${{ env.WF_ORG }} IMAGE=${{ env.WF_REGISTRY }}/${{ env.WF_IMAGE }}:${{ env.tag }} make image-push

Dockerfile

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,10 @@ ARG TARGETARCH
22

33
# Build the manager binary
44
FROM docker.io/library/golang:1.22 as builder
5-
ARG BUILD_VERSION="unknown"
65

76
ARG TARGETARCH=amd64
7+
ARG LDFLAGS
8+
89
WORKDIR /opt/app-root
910

1011
# Copy the go manifests and source
@@ -15,10 +16,10 @@ COPY main.go main.go
1516
COPY apis/ apis/
1617
COPY controllers/ controllers/
1718
COPY pkg/ pkg/
18-
COPY config/ config/
19+
COPY config/crd/bases config/crd/bases
1920

2021
# Build
21-
RUN CGO_ENABLED=0 GOOS=linux GOARCH=$TARGETARCH GO111MODULE=on go build -ldflags "-X 'main.buildVersion=$BUILD_VERSION' -X 'main.buildDate=`date +%Y-%m-%d\ %H:%M`'" -mod vendor -a -o manager main.go
22+
RUN CGO_ENABLED=0 GOOS=linux GOARCH=$TARGETARCH GO111MODULE=on go build -ldflags "$LDFLAGS" -mod vendor -a -o manager main.go
2223

2324
# Create final image from minimal + built binary
2425
FROM --platform=linux/$TARGETARCH registry.access.redhat.com/ubi9/ubi-minimal:9.4

Makefile

Lines changed: 9 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,5 @@
11
# VERSION defines the project version for the deploy scripts, not for bundles
22
VERSION ?= main
3-
BUILD_DATE := $(shell date +%Y-%m-%d\ %H:%M)
4-
TAG_COMMIT := $(shell git rev-list --abbrev-commit --tags --max-count=1)
5-
TAG := $(shell git describe --abbrev=0 --tags ${TAG_COMMIT} 2>/dev/null || true)
6-
BUILD_SHA := $(shell git rev-parse --short HEAD)
7-
BUILD_VERSION := $(TAG:v%=%)
8-
ifneq ($(COMMIT), $(TAG_COMMIT))
9-
BUILD_VERSION := $(BUILD_VERSION)-$(BUILD_SHA)
10-
endif
11-
ifneq ($(shell git status --porcelain),)
12-
BUILD_VERSION := $(BUILD_VERSION)-dirty
13-
endif
143

154
# Go architecture and targets images to build
165
GOARCH ?= amd64
@@ -87,7 +76,6 @@ BUNDLE_CONFIG ?= config/openshift-olm
8776

8877
# Image URL to use all building/pushing image targets
8978
IMAGE ?= $(IMAGE_TAG_BASE):$(VERSION)
90-
OCI_BUILD_OPTS ?=
9179
# ENVTEST_K8S_VERSION refers to the version of kubebuilder assets to be downloaded by envtest binary.
9280
ENVTEST_K8S_VERSION = 1.23
9381
GOLANGCI_LINT_VERSION = v1.53.3
@@ -102,6 +90,13 @@ endif
10290
# Image building tool (docker / podman) - docker is preferred in CI
10391
OCI_BIN_PATH := $(shell which docker 2>/dev/null || which podman)
10492
OCI_BIN ?= $(shell basename ${OCI_BIN_PATH})
93+
OCI_BUILD_OPTS ?=
94+
95+
ifneq ($(CLEAN_BUILD),)
96+
BUILD_DATE := $(shell date +%Y-%m-%d\ %H:%M)
97+
BUILD_SHA := $(shell git rev-parse --short HEAD)
98+
LDFLAGS ?= -X 'main.buildVersion=${VERSION}-${BUILD_SHA}' -X 'main.buildDate=${BUILD_DATE}'
99+
endif
105100

106101
DATE=$(shell date -u +"%Y-%m-%dT%H:%M:%SZ")
107102

@@ -127,7 +122,7 @@ include .bingo/Variables.mk
127122
# build a single arch target provided as argument
128123
define build_target
129124
echo 'building image for arch $(1)'; \
130-
DOCKER_BUILDKIT=1 $(OCI_BIN) buildx build --load --build-arg TARGETARCH=$(1) ${OCI_BUILD_OPTS} -t ${IMAGE}-$(1) -f Dockerfile .;
125+
DOCKER_BUILDKIT=1 $(OCI_BIN) buildx build --load --build-arg LDFLAGS="${LDFLAGS}" --build-arg TARGETARCH=$(1) ${OCI_BUILD_OPTS} -t ${IMAGE}-$(1) -f Dockerfile .;
131126
endef
132127

133128
# push a single arch target image
@@ -336,7 +331,7 @@ coverage-report-html: ## Generate HTML coverage report
336331
go tool cover --html=./cover.out
337332

338333
build: fmt lint ## Build manager binary.
339-
GOARCH=${GOARCH} go build -ldflags "-X 'main.buildVersion=${BUILD_VERSION}' -X 'main.buildDate=${BUILD_DATE}'" -mod vendor -o bin/manager main.go
334+
GOARCH=${GOARCH} go build -mod vendor -o bin/manager main.go
340335

341336
##@ Images
342337

0 commit comments

Comments
 (0)