@@ -20,6 +20,8 @@ SHELL := /usr/bin/env bash
2020
2121.DEFAULT_GOAL := help
2222
23+ VERSION ?= $(shell cat clusterctl-settings.json | jq .config.nextVersion -r)
24+
2325# Use GOPROXY environment variable if set
2426GOPROXY := $(shell go env GOPROXY)
2527ifeq (,$(strip $(GOPROXY ) ) )
@@ -31,8 +33,11 @@ export GOPROXY
3133export GO111MODULE := on
3234
3335# Directories
34- BIN_DIR := bin
35- TOOLS_DIR := hack/tools
36+
37+ ROOT_DIR: =$(shell dirname $(realpath $(firstword $(MAKEFILE_LIST ) ) ) )
38+
39+ BIN_DIR := $(ROOT_DIR ) /bin
40+ TOOLS_DIR := $(ROOT_DIR ) /hack/tools
3641TOOLS_BIN_DIR := $(TOOLS_DIR ) /bin
3742
3843# Binaries
@@ -52,6 +57,25 @@ WEBHOOK_ROOT ?= $(MANIFEST_ROOT)/webhook
5257RBAC_ROOT ?= $(MANIFEST_ROOT ) /rbac
5358GC_KIND ?= true
5459
60+ RELEASE_DIR := out
61+ BUILD_DIR := .build
62+ OVERRIDES_DIR := $(HOME ) /.cluster-api/overrides/infrastructure-vsphere/$(VERSION )
63+
64+ # Define Docker related variables. Releases should modify and double check these vars.
65+ REGISTRY ?= gcr.io/$(shell gcloud config get-value project)
66+ PROD_REGISTRY := gcr.io/cluster-api-provider-vsphere/release
67+ IMAGE_NAME ?= manager
68+ DEV_CONTROLLER_IMG ?= $(REGISTRY ) /vsphere-$(IMAGE_NAME )
69+ RELEASE_CONTROLLER_IMG := gcr.io/cluster-api-provider-vsphere/release/$(IMAGE_NAME )
70+ DEV_TAG ?= dev
71+ ARCH ?= amd64
72+ DEV_MANIFEST_IMG =$(DEV_CONTROLLER_IMG ) -$(ARCH )
73+ ALL_ARCH = amd64 arm arm64 ppc64le s390x
74+ # Allow overriding the imagePullPolicy
75+ PULL_POLICY ?= Always
76+
77+
78+
5579# # --------------------------------------
5680# # Help
5781# # --------------------------------------
@@ -179,24 +203,82 @@ generate-manifests: $(CONTROLLER_GEN) ## Generate manifests e.g. CRD, RBAC etc.
179203# # Release
180204# # --------------------------------------
181205
182- .PHONY : release-manifests
183- release-manifests : # # Builds the manifests to publish with a release
206+ $(RELEASE_DIR ) :
207+ @mkdir -p $(RELEASE_DIR )
208+
209+
210+ $(BUILD_DIR ) :
211+ @mkdir -p $(BUILD_DIR )
212+
213+ $(OVERRIDES_DIR ) :
214+ @mkdir -p $(OVERRIDES_DIR )
215+
216+ .PHONY : dev-version-check
217+ dev-version-check :
184218ifndef VERSION
185- $(error VERSION is undefined )
219+ $(error VERSION must be set )
186220endif
187- @mkdir -p out
188- cd config/manager/; ../../"$(KUSTOMIZE)" edit set image gcr.io/cluster-api-provider-vsphere/release/manager:"$(VERSION)"
189- "$(KUSTOMIZE)" build config/default > out/infrastructure-components.yaml
221+
222+
223+ .PHONY : release-version-check
224+ release-version-check :
225+ ifeq ($(VERSION ) , 0.0.0)
226+ $(error VERSION must be >0.0.0 for release)
227+ endif
228+
229+ .PHONY : release-manifests
230+ release-manifests :
231+ $(MAKE ) manifests STAGE=release MANIFEST_DIR=$(RELEASE_DIR ) PULL_POLICY=IfNotPresent IMAGE=$(RELEASE_CONTROLLER_IMG ) :$(VERSION )
232+
233+ .PHONY : release-overrides
234+ release-overrides :
235+ $(MAKE ) manifests STAGE=release MANIFEST_DIR=$(OVERRIDES_DIR ) PULL_POLICY=IfNotPresent IMAGE=$(RELEASE_CONTROLLER_IMG ) :$(VERSION )
236+
237+ .PHONY : dev-manifests
238+ dev-manifests :
239+ $(MAKE ) manifests STAGE=dev MANIFEST_DIR=$(OVERRIDES_DIR ) PULL_POLICY=Always IMAGE=$(DEV_CONTROLLER_IMG ) :$(DEV_TAG )
240+
241+ .PHONY : manifests
242+ manifests : $(STAGE ) -version-check $(STAGE ) -flavors $(MANIFEST_DIR ) $(BUILD_DIR ) $(KUSTOMIZE )
243+ rm -rf $(BUILD_DIR ) /config
244+ cp -R config $(BUILD_DIR )
245+ sed -i' ' -e ' s@imagePullPolicy: .*@imagePullPolicy: ' " $( PULL_POLICY) " ' @' $(BUILD_DIR ) /config/manager/manager_pull_policy.yaml
246+ sed -i' ' -e ' s@image: .*@image: ' " $( IMAGE) " ' @' $(BUILD_DIR ) /config/manager/manager_image_patch.yaml
247+ " $( KUSTOMIZE) " build $(BUILD_DIR ) /config > $(MANIFEST_DIR ) /infrastructure-components.yaml
248+
190249# # --------------------------------------
191250# # Cleanup / Verification
192251# # --------------------------------------
193252
253+ .PHONY : flavors
254+ flavors : $(FLAVOR_DIR )
255+ go run ./packaging/flavorgen -f multi-host > $(FLAVOR_DIR ) /cluster-template.yaml
256+ go run ./packaging/flavorgen -f single-host > $(FLAVOR_DIR ) /cluster-template-singlehostcontrolplane.yaml
257+
258+ .PHONY : release-flavors # # Create release flavor manifests
259+ release-flavors : release-version-check
260+ $(MAKE ) flavors FLAVOR_DIR=$(RELEASE_DIR )
261+
262+ .PHONY : dev-flavors # # Create release flavor manifests
263+ dev-flavors :
264+ $(MAKE ) flavors FLAVOR_DIR=$(OVERRIDES_DIR )
265+
266+ .PHONY : overrides # # Generates flavors as clusterctl overrides
267+ overrides : version-check $(OVERRIDES_DIR )
268+ go run ./packaging/flavorgen -f multi-host > $(OVERRIDES_DIR ) /cluster-template.yaml
269+ go run ./packaging/flavorgen -f single-host > $(OVERRIDES_DIR ) /cluster-template-singlehostcontrolplane.yaml
270+
194271.PHONY : clean
195272clean : # # Run all the clean targets
196273 $(MAKE ) clean-bin
197274 $(MAKE ) clean-temporary
198275 $(MAKE ) clean-release
199276 $(MAKE ) clean-examples
277+ $(MAKE ) clean-build
278+
279+ .PHONY : clean-build
280+ clean-build :
281+ rm -rf $(BUILD_DIR )
200282
201283.PHONY : clean-bin
202284clean-bin : # # Remove all generated binaries
@@ -238,3 +320,15 @@ verify-crds: ## Verifies the committed CRDs are up-to-date
238320check : # # Verify and lint the project
239321 $(MAKE ) verify
240322 $(MAKE ) lint
323+
324+ # # --------------------------------------
325+ # # Docker
326+ # # --------------------------------------
327+
328+ .PHONY : docker-build
329+ docker-build : # # Build the docker image for controller-manager
330+ docker build --pull --build-arg ARCH=$(ARCH ) . -t $(DEV_CONTROLLER_IMG ) :$(DEV_TAG )
331+
332+ .PHONY : docker-push
333+ docker-push : # # Push the docker image
334+ docker push $(DEV_CONTROLLER_IMG ) :$(DEV_TAG )
0 commit comments