Skip to content

Commit 2d41b6d

Browse files
committed
update devbox and Makefile to handle tool dependencies once more because go tools apparently does not play nicely with a differing go patch version being used than the one specified in go.mod
1 parent a872e56 commit 2d41b6d

File tree

6 files changed

+507
-1280
lines changed

6 files changed

+507
-1280
lines changed

.github/workflows/go-analyze.yml

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,8 @@ jobs:
5858
golangci-lint.run:443
5959
dl.k8s.io:443
6060
cdn.dl.k8s.io:443
61+
registry-1.docker.io:443
62+
auth.docker.io:443
6163
6264
- uses: actions/checkout@v5
6365

@@ -66,10 +68,9 @@ jobs:
6668
with:
6769
go-version-file: 'go.mod'
6870
check-latest: true
69-
cache: false
7071

7172
- name: lint
72-
run: make lint
73+
uses: golangci/golangci-lint-action@v8
7374

7475
- name: lint-api
7576
run: make lint-api

Makefile

Lines changed: 141 additions & 45 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ REGISTRY ?= docker.io/linode
55
IMAGE_NAME ?= cluster-api-provider-linode
66
CONTROLLER_IMAGE ?= $(REGISTRY)/$(IMAGE_NAME)
77
TAG ?= 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)
99
VERSION ?= $(shell git describe --always --tag --dirty=-dev)
1010
BUILD_ARGS := --build-arg VERSION=$(VERSION)
1111
SHELL = /usr/bin/env bash -o pipefail
@@ -15,7 +15,7 @@ MDBOOK_DEV_HOST = 0.0.0.0
1515
MDBOOK_DEV_PORT = 3000
1616
E2E_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.
8080
generate: 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:$(GOSEC_VERSION) -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
134134
lint-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
193192
test-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
246245
endif
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
259258
RELEASE_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
285284
local-release:
@@ -340,32 +339,73 @@ $(CACHE_BIN):
340339
## --------------------------------------
341340

342341
##@ Tooling Binaries:
342+
# setup-envtest does not have devbox support so always use CACHE_BIN
343343

344344
KUBECTL ?= $(LOCALBIN)/kubectl
345+
KUSTOMIZE ?= $(LOCALBIN)/kustomize
346+
CTLPTL ?= $(LOCALBIN)/ctlptl
345347
CLUSTERCTL ?= $(LOCALBIN)/clusterctl
348+
CRD_REF_DOCS ?= $(CACHE_BIN)/crd-ref-docs
346349
KUBEBUILDER ?= $(LOCALBIN)/kubebuilder
350+
CONTROLLER_GEN ?= $(CACHE_BIN)/controller-gen
351+
CONVERSION_GEN ?= $(CACHE_BIN)/conversion-gen
347352
TILT ?= $(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
348361
GOLANGCI_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
353370
KUBEBUILDER_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
355374
CHAINSAW_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.0
380+
CONVERSION_GEN_VERSION ?= v0.34.1
381+
GOLANGCI_LINT_VERSION ?= v2.5.0
382+
GOSEC_VERSION ?= 2.22.10
356383

357384
.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)
385+
tools: $(KUSTOMIZE) $(CTLPTL) $(CLUSTERCTL) $(KUBECTL) $(CONTROLLER_GEN) $(CONVERSION_GEN) $(TILT) $(KIND) $(CHAINSAW) $(ENVTEST) $(NILAWAY) $(GOVULNC) $(MOCKGEN) $(GOWRAP)
386+
387+
388+
.PHONY: kustomize
389+
kustomize: $(KUSTOMIZE) ## Download kustomize locally if necessary.
390+
$(KUSTOMIZE): $(LOCALBIN)
391+
GOBIN=$(LOCALBIN) GO111MODULE=on go install sigs.k8s.io/kustomize/kustomize/v5@$(KUSTOMIZE_VERSION)
392+
393+
.PHONY: ctlptl
394+
ctlptl: $(CTLPTL) ## Download ctlptl locally if necessary.
395+
$(CTLPTL): $(LOCALBIN)
396+
GOBIN=$(LOCALBIN) go install github.com/tilt-dev/ctlptl/cmd/ctlptl@$(CTLPTL_VERSION)
362397

363398
.PHONY: clusterctl
364399
clusterctl: $(CLUSTERCTL) ## Download clusterctl locally if necessary.
365400
$(CLUSTERCTL): $(LOCALBIN)
366401
curl -fsSL https://github.com/kubernetes-sigs/cluster-api/releases/download/$(CLUSTERCTL_VERSION)/clusterctl-$(OS)-$(ARCH_SHORT) -o $(CLUSTERCTL)
367402
chmod +x $(CLUSTERCTL)
368403

404+
.PHONY: crd-ref-docs
405+
crd-ref-docs: $(CRD_REF_DOCS) ## Download crd-ref-docs locally if necessary.
406+
$(CRD_REF_DOCS): $(LOCALBIN)
407+
GOBIN=$(CACHE_BIN) go install github.com/elastic/crd-ref-docs@$(CRD_REF_DOCS_VERSION)
408+
369409
.PHONY: kubectl
370410
kubectl: $(KUBECTL) ## Download kubectl locally if necessary.
371411
$(KUBECTL): $(LOCALBIN)
@@ -378,6 +418,16 @@ $(KUBEBUILDER): $(LOCALBIN)
378418
curl -L -o $(LOCALBIN)/kubebuilder https://github.com/kubernetes-sigs/kubebuilder/releases/download/$(KUBEBUILDER_VERSION)/kubebuilder_$(OS)_$(ARCH_SHORT)
379419
chmod +x $(LOCALBIN)/kubebuilder
380420

421+
.PHONY: controller-gen
422+
controller-gen: $(CONTROLLER_GEN) ## Download controller-gen locally if necessary.
423+
$(CONTROLLER_GEN): $(LOCALBIN)
424+
GOBIN=$(CACHE_BIN) go install sigs.k8s.io/controller-tools/cmd/controller-gen@$(CONTROLLER_TOOLS_VERSION)
425+
426+
.PHONY: conversion-gen
427+
conversion-gen: $(CONVERSION_GEN) ## Download conversion-gen locally if necessary.
428+
$(CONVERSION_GEN): $(LOCALBIN)
429+
GOBIN=$(CACHE_BIN) go install k8s.io/code-generator/cmd/conversion-gen@$(CONVERSION_GEN_VERSION)
430+
381431
.PHONY: tilt
382432
tilt: $(TILT) ## Download tilt locally if necessary.
383433
$(TILT): $(LOCALBIN)
@@ -387,7 +437,53 @@ $(TILT): $(LOCALBIN)
387437
fi; \
388438
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
389439

390-
.PHONY: golangci-lint-kal
440+
.PHONY: kind
441+
kind: $(KIND) ## Download kind locally if necessary.
442+
$(KIND): $(LOCALBIN)
443+
curl -Lso $(KIND) https://github.com/kubernetes-sigs/kind/releases/download/v$(KIND_VERSION)/kind-$(OS)-$(ARCH_SHORT)
444+
chmod +x $(KIND)
445+
446+
.PHONY: chainsaw
447+
chainsaw: $(CHAINSAW) ## Download chainsaw locally if necessary.
448+
$(CHAINSAW): $(CACHE_BIN)
449+
GOBIN=$(CACHE_BIN) go install github.com/kyverno/chainsaw@$(CHAINSAW_VERSION)
450+
451+
.PHONY: envtest
452+
envtest: $(ENVTEST) ## Download setup-envtest locally if necessary.
453+
$(ENVTEST): $(CACHE_BIN)
454+
GOBIN=$(CACHE_BIN) go install sigs.k8s.io/controller-runtime/tools/setup-envtest@latest
455+
456+
.phony: golangci-lint
457+
golangci-lint: $(GOLANGCI_LINT)
458+
$(GOLANGCI_LINT): # Build golangci-lint from tools folder.
459+
GOBIN=$(LOCALBIN) go install github.com/golangci/golangci-lint/v2/cmd/golangci-lint@$(GOLANGCI_LINT_VERSION)
460+
461+
.phony: golangci-lint-kal
391462
golangci-lint-kal: $(GOLANGCI_LINT_KAL)
392-
$(GOLANGCI_LINT_KAL): tools # Build golangci-lint-kal from custom configuration.
393-
golangci-lint custom
463+
$(GOLANGCI_LINT_KAL): $(GOLANGCI_LINT) # Build golangci-lint-kal from custom configuration.
464+
$(GOLANGCI_LINT) custom
465+
466+
.PHONY: nilaway
467+
nilaway: $(NILAWAY) ## Download nilaway locally if necessary.
468+
$(NILAWAY): $(LOCALBIN)
469+
GOBIN=$(LOCALBIN) go install go.uber.org/nilaway/cmd/nilaway@$(NILAWAY_VERSION)
470+
471+
.PHONY: govulncheck
472+
govulncheck: $(GOVULNC) ## Download govulncheck locally if necessary.
473+
$(GOVULNC): $(LOCALBIN)
474+
GOBIN=$(LOCALBIN) go install golang.org/x/vuln/cmd/govulncheck@$(GOVULNC_VERSION)
475+
476+
.PHONY: mockgen
477+
mockgen: $(MOCKGEN) ## Download mockgen locally if necessary.
478+
$(MOCKGEN): $(LOCALBIN)
479+
GOBIN=$(LOCALBIN) go install go.uber.org/mock/mockgen@$(MOCKGEN_VERSION)
480+
481+
.PHONY: gowrap
482+
gowrap: $(GOWRAP) ## Download gowrap locally if necessary.
483+
$(GOWRAP): $(CACHE_BIN)
484+
GOBIN=$(CACHE_BIN) go install github.com/hexdigest/gowrap/cmd/gowrap@$(GOWRAP_VERSION)
485+
486+
.PHONY: s5cmd
487+
s5cmd: $(S5CMD)
488+
$(S5CMD): $(CACHE_BIN)
489+
GOBIN=$(CACHE_BIN) go install github.com/peak/s5cmd/v2@$(S5CMD_VERSION)

devbox.json

Lines changed: 14 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,25 +1,32 @@
11
{
22
"packages": {
3-
"apple-sdk_15": {
4-
"version": "15.2",
5-
"excluded_platforms": ["x86_64-linux"]
6-
},
73
"clusterctl": "1.11.2",
4+
"ctlptl": "0.8.40",
85
"docker": "28.4.0",
96
"go-tools": "2025.1.1",
107
"go": "1.25.1",
8+
"golangci-lint": "2.4.0",
9+
"govulncheck": "1.1.4",
10+
"kind": "0.29.0",
11+
"kustomize": "5.6.0",
12+
"nilaway": "0-unstable-2025-03-07",
1113
"tilt": "0.35.1",
12-
"mdbook": "0.4.52",
14+
"mdbook": "0.4.25",
1315
"mdbook-admonish": "1.20.0",
16+
"mockgen": "0.5.2",
1417
"kyverno-chainsaw": "0.2.13",
1518
"kubernetes-helm": "3.19.0",
1619
"kubectl": "1.34.1",
1720
"kubebuilder": "4.9.0",
18-
"jq": "1.8.1"
21+
"jq": "1.8.1",
22+
"apple-sdk_15": {
23+
"version": "15.2",
24+
"excluded_platforms": ["x86_64-linux"]
25+
}
1926
},
2027
"shell": {
2128
"init_hook": [
22-
"export \"GOROOT=$(go env GOROOT)\"; export GOTOOLCHAIN=auto"
29+
"export \"GOROOT=$(go env GOROOT)\""
2330
],
2431
"scripts": {}
2532
}

0 commit comments

Comments
 (0)