@@ -37,24 +37,61 @@ export GOPRIVATE = github.com/microsoft
3737# Directories.
3838ROOT_DIR: =$(shell dirname $(realpath $(firstword $(MAKEFILE_LIST ) ) ) )
3939TOOLS_DIR := hack/tools
40- TOOLS_BIN_DIR := $(TOOLS_DIR ) /bin
40+ TOOLS_BIN_DIR := $(abspath $( TOOLS_DIR ) /bin)
4141BIN_DIR := bin
4242
43+ # set --output-base used for conversion-gen which needs to be different for in GOPATH and outside GOPATH dev
44+ OUTPUT_BASE := --output-base=$(ROOT_DIR )
45+
46+
4347# Binaries.
4448CLUSTERCTL := $(BIN_DIR ) /clusterctl
45- CONTROLLER_GEN := $(TOOLS_BIN_DIR ) /controller-gen
46- ENVSUBST := $(TOOLS_BIN_DIR ) /envsubst
47- GOLANGCI_LINT := $(TOOLS_BIN_DIR ) /golangci-lint
48- MOCKGEN := $(TOOLS_BIN_DIR ) /mockgen
49- CONVERSION_GEN := $(TOOLS_BIN_DIR ) /conversion-gen
50- KUBECTL =$(TOOLS_BIN_DIR ) /kubectl
5149KUBE_APISERVER =$(TOOLS_BIN_DIR ) /kube-apiserver
5250ETCD =$(TOOLS_BIN_DIR ) /etcd
51+ GO_INSTALL = ./scripts/go_install.sh
52+
53+ # Binaries.
54+ CONTROLLER_GEN_VER := v0.6.1
55+ CONTROLLER_GEN_BIN := controller-gen
56+ CONTROLLER_GEN := $(TOOLS_BIN_DIR ) /$(CONTROLLER_GEN_BIN ) -$(CONTROLLER_GEN_VER )
57+
58+ CONVERSION_GEN_VER := v0.20.2
59+ CONVERSION_GEN_BIN := conversion-gen
60+ CONVERSION_GEN := $(TOOLS_BIN_DIR ) /$(CONVERSION_GEN_BIN ) -$(CONVERSION_GEN_VER )
61+
62+
63+ GOLANGCI_LINT_VER := v1.41.1
64+ GOLANGCI_LINT_BIN := golangci-lint
65+ GOLANGCI_LINT := $(TOOLS_BIN_DIR ) /$(GOLANGCI_LINT_BIN ) -$(GOLANGCI_LINT_VER )
66+
67+ KUSTOMIZE_VER := v4.1.3
68+ KUSTOMIZE_BIN := kustomize
69+ KUSTOMIZE := $(TOOLS_BIN_DIR ) /$(KUSTOMIZE_BIN ) -$(KUSTOMIZE_VER )
70+
71+ MOCKGEN_VER := v1.6.0
72+ MOCKGEN_BIN := mockgen
73+ MOCKGEN := $(TOOLS_BIN_DIR ) /$(MOCKGEN_BIN ) -$(MOCKGEN_VER )
74+
75+ RELEASE_NOTES_VER := v0.9.0
76+ RELEASE_NOTES_BIN := release-notes
77+ RELEASE_NOTES := $(TOOLS_BIN_DIR ) /$(RELEASE_NOTES_BIN ) -$(RELEASE_NOTES_VER )
78+
79+ GO_APIDIFF_VER := v0.1.0
80+ GO_APIDIFF_BIN := go-apidiff
81+ GO_APIDIFF := $(TOOLS_BIN_DIR ) /$(GO_APIDIFF_BIN )
82+
83+ GINKGO_VER := v1.16.4
84+ GINKGO_BIN := ginkgo
85+ GINKGO := $(TOOLS_BIN_DIR ) /$(GINKGO_BIN ) -$(GINKGO_VER )
86+
87+ KUBECTL_VER := v1.21.4
88+ KUBECTL_BIN := kubectl
89+ KUBECTL := $(TOOLS_BIN_DIR ) /$(KUBECTL_BIN ) -$(KUBECTL_VER )
5390
5491# Version
5592MAJOR_VER ?= 0
56- MINOR_VER ?= 3
57- PATCH_VER ?= 10 -alpha
93+ MINOR_VER ?= 4
94+ PATCH_VER ?= 0 -alpha
5895
5996# Define Docker related variables. Releases should modify and double check these vars.
6097REGISTRY ?= mocimages.azurecr.io
@@ -129,20 +166,37 @@ manager: ## Build manager binary.
129166$(CLUSTERCTL ) : go.mod # # Build clusterctl binary.
130167 go build -o $(BIN_DIR ) /clusterctl sigs.k8s.io/cluster-api/cmd/clusterctl
131168
132- $(CONTROLLER_GEN ) : $(TOOLS_DIR ) /go.mod # Build controller-gen from tools folder.
133- cd $(TOOLS_DIR ) ; go build -tags=tools -o $(BIN_DIR ) /controller-gen sigs.k8s.io/controller-tools/cmd/controller-gen
169+ $(CONTROLLER_GEN ) : # # Build controller-gen from tools folder.
170+ GOBIN=$(TOOLS_BIN_DIR ) $(GO_INSTALL ) sigs.k8s.io/controller-tools/cmd/controller-gen $(CONTROLLER_GEN_BIN ) $(CONTROLLER_GEN_VER )
171+
172+ $(CONVERSION_GEN ) : # # Build conversion-gen.
173+ GOBIN=$(TOOLS_BIN_DIR ) $(GO_INSTALL ) k8s.io/code-generator/cmd/conversion-gen $(CONVERSION_GEN_BIN ) $(CONVERSION_GEN_VER )
174+
175+ $(ENVSUBST ) : # # Build envsubst from tools folder.
176+ rm -f $(TOOLS_BIN_DIR ) /$(ENVSUBST_BIN ) *
177+ mkdir -p $(TOOLS_DIR ) && cd $(TOOLS_DIR ) && go build -tags=tools -o $(ENVSUBST ) github.com/drone/envsubst/v2/cmd/envsubst
178+ ln -sf $(ENVSUBST ) $(TOOLS_BIN_DIR ) /$(ENVSUBST_BIN )
134179
135- $( ENVSUBST ) : $(TOOLS_DIR ) /go.mod # Build envsubst from tools folder.
136- cd $(TOOLS_DIR ) ; go build -tags=tools -o $( BIN_DIR ) /envsubst github.com/a8m/envsubst/cmd/envsubst
180+ .PHONY : $(ENVSUBST_BIN )
181+ $( ENVSUBST_BIN ) : $(ENVSUBST ) # # Build envsubst from tools folder.
137182
138- $(GOLANGCI_LINT ) : $( TOOLS_DIR ) /go.mod # Build golangci-lint from tools folder.
139- cd $( TOOLS_DIR ) ; go build -tags=tools -o $( BIN_DIR ) /golangci-lint github.com/golangci/golangci-lint/cmd/golangci-lint
183+ $(GOLANGCI_LINT ) : # # Build golangci-lint from tools folder.
184+ GOBIN= $( TOOLS_BIN_DIR ) $( GO_INSTALL ) github.com/golangci/golangci-lint/cmd/golangci-lint $( GOLANGCI_LINT_BIN ) $( GOLANGCI_LINT_VER )
140185
141- $(MOCKGEN ) : $( TOOLS_DIR ) /go.mod # Build mockgen from tools folder.
142- cd $( TOOLS_DIR ) ; go build -tags=tools -o $( BIN_DIR ) /mockgen github.com/golang/mock/mockgen
186+ $(KUSTOMIZE ) : # # Build kustomize from tools folder.
187+ GOBIN= $( TOOLS_BIN_DIR ) $( GO_INSTALL ) sigs.k8s.io/kustomize/kustomize/v4 $( KUSTOMIZE_BIN ) $( KUSTOMIZE_VER )
143188
144- $(CONVERSION_GEN ) : $(TOOLS_DIR ) /go.mod
145- cd $(TOOLS_DIR ) ; go build -tags=tools -o $(BIN_DIR ) /conversion-gen k8s.io/code-generator/cmd/conversion-gen
189+ $(MOCKGEN ) : # # Build mockgen from tools folder.
190+ GOBIN=$(TOOLS_BIN_DIR ) $(GO_INSTALL ) github.com/golang/mock/mockgen $(MOCKGEN_BIN ) $(MOCKGEN_VER )
191+
192+ $(RELEASE_NOTES ) : # # Build release notes.
193+ GOBIN=$(TOOLS_BIN_DIR ) $(GO_INSTALL ) k8s.io/release/cmd/release-notes $(RELEASE_NOTES_BIN ) $(RELEASE_NOTES_VER )
194+
195+ $(GO_APIDIFF ) : # # Build go-apidiff.
196+ GOBIN=$(TOOLS_BIN_DIR ) $(GO_INSTALL ) github.com/joelanford/go-apidiff $(GO_APIDIFF_BIN ) $(GO_APIDIFF_VER )
197+
198+ $(GINKGO ) : # # Build ginkgo.
199+ GOBIN=$(TOOLS_BIN_DIR ) $(GO_INSTALL ) github.com/onsi/ginkgo/ginkgo $(GINKGO_BIN ) $(GINKGO_VER )
146200
147201$(RELEASE_NOTES ) : $(TOOLS_DIR ) /go.mod
148202 cd $(TOOLS_DIR ) && go build -tags tools -o $(BIN_DIR ) /release-notes sigs.k8s.io/cluster-api/hack/tools/release
@@ -182,14 +236,15 @@ generate-go: $(CONTROLLER_GEN) $(MOCKGEN) $(CONVERSION_GEN) ## Runs Go related g
182236
183237 $(CONVERSION_GEN) \
184238 --input-dirs=./api/v1alpha3 \
185- --output-file-base=zz_generated.conversion \
239+ --output-file-base=zz_generated.conversion $(OUTPUT_BASE) \
186240 --go-header-file=./hack/boilerplate/boilerplate.generatego.txt
187-
241+
188242.PHONY : generate-manifests
189243generate-manifests : $(CONTROLLER_GEN ) # # Generate manifests e.g. CRD, RBAC etc.
190244 $(CONTROLLER_GEN ) \
191245 paths=./api/... \
192246 crd:crdVersions=v1 \
247+ rbac:roleName=manager-role \
193248 output:crd:dir=$(CRD_ROOT ) \
194249 output:webhook:dir=$(WEBHOOK_ROOT ) \
195250 webhook
@@ -256,12 +311,12 @@ docker-push-manifest: ## Push the fat manifest docker image.
256311.PHONY : set-manifest-image
257312set-manifest-image :
258313 $(info Updating kustomize image patch file for manager resource)
259- sed -i' ' -e ' s@image: .*@image: ' " ${MANIFEST_IMG} :$( MANIFEST_TAG) " ' @' ./config/manager /manager_image_patch.yaml
314+ sed -i' ' -e ' s@image: .*@image: ' " ${MANIFEST_IMG} :$( MANIFEST_TAG) " ' @' ./config/default /manager_image_patch.yaml
260315
261316.PHONY : set-manifest-pull-policy
262317set-manifest-pull-policy :
263318 $(info Updating kustomize pull policy file for manager resource)
264- sed -i' ' -e ' s@imagePullPolicy: .*@imagePullPolicy: ' " $( PULL_POLICY) " ' @' ./config/manager /manager_pull_policy.yaml
319+ sed -i' ' -e ' s@imagePullPolicy: .*@imagePullPolicy: ' " $( PULL_POLICY) " ' @' ./config/default /manager_pull_policy.yaml
265320
266321# # --------------------------------------
267322# # Release
@@ -286,7 +341,7 @@ release: clean-release ## Builds and push container images using the latest git
286341
287342.PHONY : release-manifests
288343release-manifests : $(RELEASE_DIR ) # # Builds the manifests to publish with a release
289- kustomize build config > $(RELEASE_DIR ) /infrastructure-components.yaml
344+ kustomize build config/default > $(RELEASE_DIR ) /infrastructure-components.yaml
290345
291346.PHONY : release-binary
292347release-binary : $(RELEASE_DIR )
0 commit comments