@@ -5,7 +5,7 @@ REGISTRY ?= docker.io/linode
55IMAGE_NAME ?= cluster-api-provider-linode
66CONTROLLER_IMAGE ?= $(REGISTRY ) /$(IMAGE_NAME )
77TAG ?= dev
8- ENVTEST_K8SVERSION ? = $(shell go list -m -f "{{ .Version }}" k8s.io/api | awk -F'[v.]' '{printf "1. % d", $$3}' )
8+ ENVTEST_K8S_VERSION : = $(shell go list -m -f '{{ .Version}}' k8s.io/client-go )
99VERSION ?= $(shell git describe --always --tag --dirty=-dev)
1010BUILD_ARGS := --build-arg VERSION=$(VERSION )
1111SHELL = /usr/bin/env bash -o pipefail
@@ -15,7 +15,7 @@ MDBOOK_DEV_HOST = 0.0.0.0
1515MDBOOK_DEV_PORT = 3000
1616E2E_SELECTOR ?= all
1717
18- # ENVTEST_K8SVERSION
18+ # ENVTEST_K8S_VERSION
1919# - refers to the version of kubebuilder assets to be downloaded by envtest binary.
2020# CONTAINER_TOOL
2121# - defines the container tool to be used for building images.
@@ -80,25 +80,25 @@ help: ## Display this help.
8080generate : generate-manifests generate-code generate-mock generate-api-docs
8181
8282.PHONY : generate-manifests
83- generate-manifests : tools # # Generate WebhookConfiguration, ClusterRole and CustomResourceDefinition objects.
84- controller-gen rbac:roleName=manager-role crd webhook paths=" ./..." output:crd:artifacts:config=config/crd/bases
83+ generate-manifests : controller-gen # # Generate WebhookConfiguration, ClusterRole and CustomResourceDefinition objects.
84+ $( CONTROLLER_GEN ) rbac:roleName=manager-role crd webhook paths=" ./..." output:crd:artifacts:config=config/crd/bases
8585
8686.PHONY : generate-code
87- generate-code : tools # # Generate code containing DeepCopy, DeepCopyInto, and DeepCopyObject method implementations.
87+ generate-code : controller-gen gowrap # # Generate code containing DeepCopy, DeepCopyInto, and DeepCopyObject method implementations.
8888 go generate ./...
89- controller-gen object:headerFile=" hack/boilerplate.go.txt" paths=" ./..."
89+ $( CONTROLLER_GEN ) object:headerFile=" hack/boilerplate.go.txt" paths=" ./..."
9090
9191.PHONY : generate-mock
92- generate-mock : tools # # Generate mocks for the Linode API client.
93- mockgen -source=./clients/clients.go -destination ./mock/client.go -package mock
92+ generate-mock : mockgen # # Generate mocks for the Linode API client.
93+ $( MOCKGEN ) -source=./clients/clients.go -destination ./mock/client.go -package mock
9494
9595.PHONY : generate-flavors # # Generate template flavors.
96- generate-flavors :
96+ generate-flavors : $( KUSTOMIZE )
9797 bash hack/generate-flavors.sh
9898
9999.PHONY : generate-api-docs
100- generate-api-docs : tools # # Generate API reference documentation.
101- crd-ref-docs \
100+ generate-api-docs : crd-ref-docs # # Generate API reference documentation.
101+ $( CRD_REF_DOCS ) \
102102 --config=./docs/.crd-ref-docs.yaml \
103103 --source-path=./api/ \
104104 --renderer=markdown \
@@ -123,23 +123,23 @@ vet: ## Run go vet against code.
123123 go vet ./...
124124
125125.PHONY : gosec
126- gosec : tools # # Run gosec against code.
127- gosec -exclude-dir=bin -exclude-generated ./...
126+ gosec : # # Run gosec against code.
127+ docker run --rm -w /workdir -v $( PWD ) :/workdir securego/ gosec:2.19.0 -exclude-dir=bin -exclude-generated ./...
128128
129129.PHONY : lint
130- lint : tools # # Run lint against code.
131- golangci-lint run -c .golangci.yml
130+ lint : # # Run lint against code.
131+ $( GOLANGCI_LINT ) run -c .golangci.yml
132132
133133.PHONY : lint
134134lint-api : golangci-lint-kal # # Run lint against code.
135135 $(GOLANGCI_LINT_KAL ) run -c .golangci-kal.yml
136136
137137.PHONY : nilcheck
138- nilcheck : tools # # Run nil check against code.
138+ nilcheck : nilaway # # Run nil check against code.
139139 go list ./... | xargs -I {} -d ' \n' nilaway -include-pkgs {} -exclude-file-docstrings " ignore_autogenerated" ./...
140140
141141.PHONY : vulncheck
142- vulncheck : tools # # Run vulnerability check against code.
142+ vulncheck : govulncheck # # Run vulnerability check against code.
143143 govulncheck ./...
144144
145145.PHONY : docs
@@ -153,23 +153,22 @@ docs:
153153# #@ Testing:
154154
155155.PHONY : test
156- test : generate fmt vet # # Run tests.
157- go env -w GOTOOLCHAIN=go1.25.0+auto
158- KUBEBUILDER_ASSETS=" $( shell setup-envtest use $( ENVTEST_K8SVERSION) --bin-dir $( CACHE_BIN) -p path) " go test -race -timeout 60s ` go list ./... | grep -v ./mock$$ ` -coverprofile cover.out.tmp
156+ test : generate fmt vet envtest # # Run tests.
157+ KUBEBUILDER_ASSETS=" $( shell $( ENVTEST) use ${ENVTEST_K8S_VERSION# v} --bin-dir $( CACHE_BIN) -p path) " go test -race -timeout 60s ` go list ./... | grep -v ./mock$$ ` -coverprofile cover.out.tmp
159158 grep -v " zz_generated.*" cover.out.tmp > cover.out
160159 rm cover.out.tmp
161160
162161.PHONY : e2etest
163- e2etest : generate local-release local-deploy
164- SSE_KEY=$$(openssl rand -base64 32 ) LOCALBIN=$(CACHE_BIN ) chainsaw test ./e2e --parallel 2 --selector $(E2E_SELECTOR ) $(E2E_FLAGS )
162+ e2etest : generate local-release local-deploy chainsaw s5cmd
163+ SSE_KEY=$$(openssl rand -base64 32 ) LOCALBIN=$(CACHE_BIN ) $( CHAINSAW ) test ./e2e --parallel 2 --selector $(E2E_SELECTOR ) $(E2E_FLAGS )
165164
166165.PHONY : local-deploy
167- local-deploy : tools kind-cluster
166+ local-deploy : kind-cluster tilt kustomize clusterctl
168167 $(TILT ) ci -f Tiltfile
169168
170169.PHONY : kind-cluster
171- kind-cluster : tools
172- ctlptl apply -f .tilt/ctlptl-config.yaml
170+ kind-cluster : kind ctlptl
171+ $( CTLPTL ) apply -f .tilt/ctlptl-config.yaml
173172
174173# #@ Test Upgrade:
175174
@@ -186,18 +185,18 @@ checkout-last-release:
186185 git checkout $(LAST_RELEASE )
187186
188187.PHONY : last-release-cluster
189- last-release-cluster : tools kind-cluster checkout-last-release local-release local-deploy
190- LOCALBIN=$(CACHE_BIN ) CLUSTERCTL_CONFIG=$(CLUSTERCTL_CONFIG ) SKIP_CUSTOM_DELETE=true chainsaw test --namespace $(COMMON_NAMESPACE ) --assert-timeout 600s --skip-delete ./e2e/capl-cluster-flavors/kubeadm-capl-cluster
188+ last-release-cluster : kind ctlptl tilt kustomize clusterctl chainsaw kind-cluster checkout-last-release local-release local-deploy
189+ LOCALBIN=$(CACHE_BIN ) CLUSTERCTL_CONFIG=$(CLUSTERCTL_CONFIG ) SKIP_CUSTOM_DELETE=true $( CHAINSAW ) test --namespace $(COMMON_NAMESPACE ) --assert-timeout 600s --skip-delete ./e2e/capl-cluster-flavors/kubeadm-capl-cluster
191190
192191.PHONY : test-upgrade
193192test-upgrade : last-release-cluster checkout-latest-commit
194193 $(MAKE ) local-release
195194 $(MAKE ) local-deploy
196- LOCALBIN=$(CACHE_BIN ) CLUSTERCTL_CONFIG=$(CLUSTERCTL_CONFIG ) chainsaw test --namespace $(COMMON_NAMESPACE ) --assert-timeout 800s ./e2e/capl-cluster-flavors/kubeadm-capl-cluster
195+ LOCALBIN=$(CACHE_BIN ) CLUSTERCTL_CONFIG=$(CLUSTERCTL_CONFIG ) $( CHAINSAW ) test --namespace $(COMMON_NAMESPACE ) --assert-timeout 800s ./e2e/capl-cluster-flavors/kubeadm-capl-cluster
197196
198197.PHONY : clean-kind-cluster
199- clean-kind-cluster :
200- ctlptl delete -f .tilt/ctlptl-config.yaml
198+ clean-kind-cluster : ctlptl
199+ $( CTLPTL ) delete -f .tilt/ctlptl-config.yaml
201200
202201# # --------------------------------------
203202# # Build
@@ -246,8 +245,8 @@ ifndef ignore-not-found
246245endif
247246
248247.PHONY : tilt-cluster
249- tilt-cluster : tools
250- ctlptl apply -f .tilt/ctlptl-config.yaml
248+ tilt-cluster : ctlptl tilt kind clusterctl
249+ $( CTLPTL ) apply -f .tilt/ctlptl-config.yaml
251250 $(TILT ) up
252251
253252# # --------------------------------------
@@ -259,7 +258,7 @@ tilt-cluster: tools
259258RELEASE_DIR ?= infrastructure-linode
260259
261260.PHONY : release
262- release : tools clean-release set-manifest-image release-manifests generate-flavors release-templates release-metadata clean-release-git
261+ release : kustomize clean-release set-manifest-image release-manifests generate-flavors release-templates release-metadata clean-release-git
263262
264263$(RELEASE_DIR ) :
265264 mkdir -p $(RELEASE_DIR ) /
@@ -278,8 +277,8 @@ set-manifest-image: ## Update kustomize image patch file for default resource.
278277 sed -i' ' -e ' s@image: .*@image: ' " $( REGISTRY) /$( IMAGE_NAME) :$( VERSION) " ' @' ./config/default/manager_image_patch.yaml
279278
280279.PHONY : release-manifests
281- release-manifests : tools $(RELEASE_DIR )
282- kustomize build config/default > $(RELEASE_DIR ) /infrastructure-components.yaml
280+ release-manifests : $( KUSTOMIZE ) $(RELEASE_DIR )
281+ $( KUSTOMIZE ) build config/default > $(RELEASE_DIR ) /infrastructure-components.yaml
283282
284283.PHONY : local-release
285284local-release :
@@ -340,32 +339,72 @@ $(CACHE_BIN):
340339# # --------------------------------------
341340
342341# #@ Tooling Binaries:
342+ # setup-envtest does not have devbox support so always use CACHE_BIN
343343
344344KUBECTL ?= $(LOCALBIN ) /kubectl
345+ KUSTOMIZE ?= $(LOCALBIN ) /kustomize
346+ CTLPTL ?= $(LOCALBIN ) /ctlptl
345347CLUSTERCTL ?= $(LOCALBIN ) /clusterctl
348+ CRD_REF_DOCS ?= $(CACHE_BIN ) /crd-ref-docs
346349KUBEBUILDER ?= $(LOCALBIN ) /kubebuilder
350+ CONTROLLER_GEN ?= $(CACHE_BIN ) /controller-gen
351+ CONVERSION_GEN ?= $(CACHE_BIN ) /conversion-gen
347352TILT ?= $(LOCALBIN ) /tilt
353+ KIND ?= $(LOCALBIN ) /kind
354+ CHAINSAW ?= $(LOCALBIN ) /chainsaw
355+ ENVTEST ?= $(CACHE_BIN ) /setup-envtest
356+ NILAWAY ?= $(LOCALBIN ) /nilaway
357+ GOVULNC ?= $(LOCALBIN ) /govulncheck
358+ MOCKGEN ?= $(LOCALBIN ) /mockgen
359+ GOWRAP ?= $(CACHE_BIN ) /gowrap
360+ GOLANGCI_LINT ?= $(LOCALBIN ) /golangci-lint
348361GOLANGCI_LINT_KAL ?= $(CACHE_BIN ) /golangci-lint-kube-api-linter
362+ S5CMD ?= $(CACHE_BIN ) /s5cmd
349363
350364# # Tool Versions
351- CLUSTERCTL_VERSION ?= v1.11.1
352- KUBECTL_VERSION ?= v1.28.0
365+ KUSTOMIZE_VERSION ?= v5.7.1
366+ CTLPTL_VERSION ?= v0.8.43
367+ CLUSTERCTL_VERSION ?= v1.11.2
368+ CRD_REF_DOCS_VERSION ?= v0.2.0
369+ KUBECTL_VERSION ?= v1.34.0
353370KUBEBUILDER_VERSION ?= v3.15.1
354- TILT_VERSION ?= 0.33.10
371+ CONTROLLER_TOOLS_VERSION ?= v0.19.0
372+ TILT_VERSION ?= 0.35.2
373+ KIND_VERSION ?= 0.30.0
355374CHAINSAW_VERSION ?= v0.2.13
375+ NILAWAY_VERSION ?= d2274102dc2eab9f77cef849a5470a6ebf983125
376+ GOVULNC_VERSION ?= v1.1.4
377+ MOCKGEN_VERSION ?= v0.6.0
378+ GOWRAP_VERSION ?= v1.4.3
379+ S5CMD_VERSION ?= v2.3.2
380+ CONVERSION_GEN_VERSION ?= v0.34.1
381+ GOLANGCI_LINT_VERSION ?= v2.5.0
356382
357383.PHONY : tools
358- tools : $(CLUSTERCTL ) $(KUBECTL ) $(KUBEBUILDER ) $(TILT )
359- go install tool
360- # #@ we can't manage this with go tools because it causes a panic due to missing CRDs when running chainsaw
361- go install github.com/kyverno/chainsaw@$(CHAINSAW_VERSION)
384+ tools : $(KUSTOMIZE ) $(CTLPTL ) $(CLUSTERCTL ) $(KUBECTL ) $(CONTROLLER_GEN ) $(CONVERSION_GEN ) $(TILT ) $(KIND ) $(CHAINSAW ) $(ENVTEST ) $(NILAWAY ) $(GOVULNC ) $(MOCKGEN ) $(GOWRAP )
385+
386+
387+ .PHONY : kustomize
388+ kustomize : $(KUSTOMIZE ) # # Download kustomize locally if necessary.
389+ $(KUSTOMIZE ) : $(LOCALBIN )
390+ GOBIN=$(LOCALBIN ) GO111MODULE=on go install sigs.k8s.io/kustomize/kustomize/v5@$(KUSTOMIZE_VERSION )
391+
392+ .PHONY : ctlptl
393+ ctlptl : $(CTLPTL ) # # Download ctlptl locally if necessary.
394+ $(CTLPTL ) : $(LOCALBIN )
395+ GOBIN=$(LOCALBIN ) go install github.com/tilt-dev/ctlptl/cmd/ctlptl@$(CTLPTL_VERSION )
362396
363397.PHONY : clusterctl
364398clusterctl : $(CLUSTERCTL ) # # Download clusterctl locally if necessary.
365399$(CLUSTERCTL ) : $(LOCALBIN )
366400 curl -fsSL https://github.com/kubernetes-sigs/cluster-api/releases/download/$(CLUSTERCTL_VERSION ) /clusterctl-$(OS ) -$(ARCH_SHORT ) -o $(CLUSTERCTL )
367401 chmod +x $(CLUSTERCTL )
368402
403+ .PHONY : crd-ref-docs
404+ crd-ref-docs : $(CRD_REF_DOCS ) # # Download crd-ref-docs locally if necessary.
405+ $(CRD_REF_DOCS ) : $(LOCALBIN )
406+ GOBIN=$(CACHE_BIN ) go install github.com/elastic/crd-ref-docs@$(CRD_REF_DOCS_VERSION )
407+
369408.PHONY : kubectl
370409kubectl : $(KUBECTL ) # # Download kubectl locally if necessary.
371410$(KUBECTL ) : $(LOCALBIN )
@@ -378,6 +417,16 @@ $(KUBEBUILDER): $(LOCALBIN)
378417 curl -L -o $(LOCALBIN ) /kubebuilder https://github.com/kubernetes-sigs/kubebuilder/releases/download/$(KUBEBUILDER_VERSION ) /kubebuilder_$(OS ) _$(ARCH_SHORT )
379418 chmod +x $(LOCALBIN ) /kubebuilder
380419
420+ .PHONY : controller-gen
421+ controller-gen : $(CONTROLLER_GEN ) # # Download controller-gen locally if necessary.
422+ $(CONTROLLER_GEN ) : $(LOCALBIN )
423+ GOBIN=$(CACHE_BIN ) go install sigs.k8s.io/controller-tools/cmd/controller-gen@$(CONTROLLER_TOOLS_VERSION )
424+
425+ .PHONY : conversion-gen
426+ conversion-gen : $(CONVERSION_GEN ) # # Download conversion-gen locally if necessary.
427+ $(CONVERSION_GEN ) : $(LOCALBIN )
428+ GOBIN=$(CACHE_BIN ) go install k8s.io/code-generator/cmd/conversion-gen@$(CONVERSION_GEN_VERSION )
429+
381430.PHONY : tilt
382431tilt : $(TILT ) # # Download tilt locally if necessary.
383432$(TILT ) : $(LOCALBIN )
@@ -387,7 +436,53 @@ $(TILT): $(LOCALBIN)
387436 fi ; \
388437 curl -fsSL https://github.com/tilt-dev/tilt/releases/download/v$(TILT_VERSION ) /tilt.$(TILT_VERSION ) .$$ TILT_OS.$(ARCH ) .tar.gz | tar -xzvm -C $(LOCALBIN ) tilt
389438
390- .PHONY : golangci-lint-kal
439+ .PHONY : kind
440+ kind : $(KIND ) # # Download kind locally if necessary.
441+ $(KIND ) : $(LOCALBIN )
442+ curl -Lso $(KIND ) https://github.com/kubernetes-sigs/kind/releases/download/v$(KIND_VERSION ) /kind-$(OS ) -$(ARCH_SHORT )
443+ chmod +x $(KIND )
444+
445+ .PHONY : chainsaw
446+ chainsaw : $(CHAINSAW ) # # Download chainsaw locally if necessary.
447+ $(CHAINSAW ) : $(CACHE_BIN )
448+ GOBIN=$(CACHE_BIN ) go install github.com/kyverno/chainsaw@$(CHAINSAW_VERSION )
449+
450+ .PHONY : envtest
451+ envtest : $(ENVTEST ) # # Download setup-envtest locally if necessary.
452+ $(ENVTEST ) : $(CACHE_BIN )
453+ GOBIN=$(CACHE_BIN ) go install sigs.k8s.io/controller-runtime/tools/setup-envtest@latest
454+
455+ .phony : golangci-lint
456+ golangci-lint : $(GOLANGCI_LINT )
457+ $(GOLANGCI_LINT ) : # Build golangci-lint from tools folder.
458+ GOBIN=$(LOCALBIN ) go install github.com/golangci/golangci-lint/v2/cmd/golangci-lint@$(GOLANGCI_LINT_VERSION )
459+
460+ .phony : golangci-lint-kal
391461golangci-lint-kal : $(GOLANGCI_LINT_KAL )
392- $(GOLANGCI_LINT_KAL ) : tools # Build golangci-lint-kal from custom configuration.
393- golangci-lint custom
462+ $(GOLANGCI_LINT_KAL ) : $(GOLANGCI_LINT ) # Build golangci-lint-kal from custom configuration.
463+ $(GOLANGCI_LINT ) custom
464+
465+ .PHONY : nilaway
466+ nilaway : $(NILAWAY ) # # Download nilaway locally if necessary.
467+ $(NILAWAY ) : $(LOCALBIN )
468+ GOBIN=$(LOCALBIN ) go install go.uber.org/nilaway/cmd/nilaway@$(NILAWAY_VERSION )
469+
470+ .PHONY : govulncheck
471+ govulncheck : $(GOVULNC ) # # Download govulncheck locally if necessary.
472+ $(GOVULNC ) : $(LOCALBIN )
473+ GOBIN=$(LOCALBIN ) go install golang.org/x/vuln/cmd/govulncheck@$(GOVULNC_VERSION )
474+
475+ .PHONY : mockgen
476+ mockgen : $(MOCKGEN ) # # Download mockgen locally if necessary.
477+ $(MOCKGEN ) : $(LOCALBIN )
478+ GOBIN=$(LOCALBIN ) go install go.uber.org/mock/mockgen@$(MOCKGEN_VERSION )
479+
480+ .PHONY : gowrap
481+ gowrap : $(GOWRAP ) # # Download gowrap locally if necessary.
482+ $(GOWRAP ) : $(CACHE_BIN )
483+ GOBIN=$(CACHE_BIN ) go install github.com/hexdigest/gowrap/cmd/gowrap@$(GOWRAP_VERSION )
484+
485+ .PHONY : s5cmd
486+ s5cmd : $(S5CMD )
487+ $(S5CMD ) : $(CACHE_BIN )
488+ GOBIN=$(CACHE_BIN ) go install github.com/peak/s5cmd/v2@$(S5CMD_VERSION )
0 commit comments