|
11 | 11 | GOBIN=$(shell go env GOBIN) |
12 | 12 | endif |
13 | 13 |
|
| 14 | +# Architecture to use envtest with |
| 15 | +ENVTEST_ARCH ?= amd64 |
| 16 | + |
14 | 17 | all: manager |
15 | 18 |
|
16 | 19 | # Run tests |
17 | | -test: generate fmt vet manifests |
18 | | - go test ./... -coverprofile cover.out |
| 20 | +KUBEBUILDER_ASSETS?="$(shell $(ENVTEST) --arch=$(ENVTEST_ARCH) use -i $(ENVTEST_KUBERNETES_VERSION) --bin-dir=$(ENVTEST_ASSETS_DIR) -p path)" |
| 21 | +test: generate fmt vet manifests install-envtest |
| 22 | + KUBEBUILDER_ASSETS=$(KUBEBUILDER_ASSETS) go test ./... -coverprofile cover.out |
19 | 23 |
|
20 | 24 | # Build manager binary |
21 | 25 | manager: generate fmt vet |
@@ -62,19 +66,33 @@ docker-build: test |
62 | 66 | docker-push: |
63 | 67 | docker push ${IMG} |
64 | 68 |
|
65 | | -# find or download controller-gen |
66 | | -# download controller-gen if necessary |
67 | | -controller-gen: |
68 | | -ifeq (, $(shell which controller-gen)) |
69 | | - @{ \ |
70 | | - set -e ;\ |
71 | | - CONTROLLER_GEN_TMP_DIR=$$(mktemp -d) ;\ |
72 | | - cd $$CONTROLLER_GEN_TMP_DIR ;\ |
73 | | - go mod init tmp ;\ |
74 | | - go get sigs.k8s.io/controller-tools/cmd/ [email protected] ;\ |
75 | | - rm -rf $$CONTROLLER_GEN_TMP_DIR ;\ |
76 | | - } |
77 | | -CONTROLLER_GEN=$(GOBIN)/controller-gen |
78 | | -else |
79 | | -CONTROLLER_GEN=$(shell which controller-gen) |
80 | | -endif |
| 69 | +# Find or download controller-gen |
| 70 | +CONTROLLER_GEN = $(shell pwd)/bin/controller-gen |
| 71 | +.PHONY: controller-gen |
| 72 | +controller-gen: ## Download controller-gen locally if necessary. |
| 73 | + $(call go-install-tool,$(CONTROLLER_GEN),sigs.k8s.io/controller-tools/cmd/[email protected]) |
| 74 | + |
| 75 | +ENVTEST_ASSETS_DIR=$(shell pwd)/testbin |
| 76 | +ENVTEST_KUBERNETES_VERSION?=latest |
| 77 | +install-envtest: setup-envtest |
| 78 | + mkdir -p ${ENVTEST_ASSETS_DIR} |
| 79 | + $(ENVTEST) use $(ENVTEST_KUBERNETES_VERSION) --arch=$(ENVTEST_ARCH) --bin-dir=$(ENVTEST_ASSETS_DIR) |
| 80 | + |
| 81 | +ENVTEST = $(shell pwd)/bin/setup-envtest |
| 82 | +.PHONY: envtest |
| 83 | +setup-envtest: ## Download envtest-setup locally if necessary. |
| 84 | + $(call go-install-tool,$(ENVTEST),sigs.k8s.io/controller-runtime/tools/setup-envtest@latest) |
| 85 | + |
| 86 | +# go-install-tool will 'go install' any package $2 and install it to $1. |
| 87 | +PROJECT_DIR := $(shell dirname $(abspath $(lastword $(MAKEFILE_LIST)))) |
| 88 | +define go-install-tool |
| 89 | +@[ -f $(1) ] || { \ |
| 90 | +set -e ;\ |
| 91 | +TMP_DIR=$$(mktemp -d) ;\ |
| 92 | +cd $$TMP_DIR ;\ |
| 93 | +go mod init tmp ;\ |
| 94 | +echo "Downloading $(2)" ;\ |
| 95 | +GOBIN=$(PROJECT_DIR)/bin go install $(2) ;\ |
| 96 | +rm -rf $$TMP_DIR ;\ |
| 97 | +} |
| 98 | +endef |
0 commit comments