From 81a087095a3bfa5f11024e10b5e31c4119aa47bb Mon Sep 17 00:00:00 2001 From: Sanskar Jaiswal Date: Thu, 13 Jan 2022 14:24:14 +0530 Subject: [PATCH] fix makefile envtest setup and usage Refactor logic to install helper tools into one function in the Makefile. Add support for envtest to help install tools like kubectl, etcd which helps users run tests more conveniently. Signed-off-by: Sanskar Jaiswal --- .github/workflows/e2e.yaml | 4 ---- .gitignore | 1 + Makefile | 47 ++++++++++++++++++++++---------------- 3 files changed, 28 insertions(+), 24 deletions(-) diff --git a/.github/workflows/e2e.yaml b/.github/workflows/e2e.yaml index 83e6eb56..866af2c6 100644 --- a/.github/workflows/e2e.yaml +++ b/.github/workflows/e2e.yaml @@ -29,10 +29,6 @@ jobs: version: v0.11.1 image: kindest/node:v1.19.11@sha256:07db187ae84b4b7de440a73886f008cf903fcf5764ba8106a9fd5243d6f32729 config: .github/kind/config.yaml # disable KIND-net - - name: Setup envtest - uses: fluxcd/pkg/actions/envtest@main - with: - version: "1.21.x" - name: Setup Calico for network policy run: | kubectl apply -f https://docs.projectcalico.org/v3.20/manifests/calico.yaml diff --git a/.gitignore b/.gitignore index c431bf85..69729b00 100644 --- a/.gitignore +++ b/.gitignore @@ -20,6 +20,7 @@ bin/ output/ cmd/flux/manifests/ cmd/flux/.manifests.done +testbin/ # Docs site/ diff --git a/Makefile b/Makefile index 4a58a157..29ca788a 100644 --- a/Makefile +++ b/Makefile @@ -1,8 +1,8 @@ VERSION?=$(shell grep 'VERSION' cmd/flux/main.go | awk '{ print $$4 }' | head -n 1 | tr -d '"') EMBEDDED_MANIFESTS_TARGET=cmd/flux/.manifests.done TEST_KUBECONFIG?=/tmp/flux-e2e-test-kubeconfig -ENVTEST_BIN_VERSION?=latest -KUBEBUILDER_ASSETS?=$(shell $(SETUP_ENVTEST) use -i $(ENVTEST_BIN_VERSION) -p path) +# Architecture to use envtest with +ENVTEST_ARCH ?= amd64 # Get the currently used golang install path (in GOPATH/bin, unless GOBIN is set) ifeq (,$(shell go env GOBIN)) @@ -34,6 +34,7 @@ cleanup-kind: kind delete cluster --name=flux-e2e-test rm $(TEST_KUBECONFIG) +KUBEBUILDER_ASSETS?="$(shell $(ENVTEST) --arch=$(ENVTEST_ARCH) use -i $(ENVTEST_KUBERNETES_VERSION) --bin-dir=$(ENVTEST_ASSETS_DIR) -p path)" test: $(EMBEDDED_MANIFESTS_TARGET) tidy fmt vet install-envtest KUBEBUILDER_ASSETS="$(KUBEBUILDER_ASSETS)" go test ./... -coverprofile cover.out --tags=unit @@ -59,27 +60,33 @@ install: install-dev: CGO_ENABLED=0 go build -o /usr/local/bin ./cmd/flux -install-envtest: setup-envtest - $(SETUP_ENVTEST) use $(ENVTEST_BIN_VERSION) - setup-bootstrap-patch: go run ./tests/bootstrap/main.go setup-image-automation: cd tests/image-automation && go run main.go -# Find or download setup-envtest -setup-envtest: -ifeq (, $(shell which setup-envtest)) - @{ \ - set -e ;\ - SETUP_ENVTEST_TMP_DIR=$$(mktemp -d) ;\ - cd $$SETUP_ENVTEST_TMP_DIR ;\ - go mod init tmp ;\ - go get sigs.k8s.io/controller-runtime/tools/setup-envtest@latest ;\ - rm -rf $$SETUP_ENVTEST_TMP_DIR ;\ - } -SETUP_ENVTEST=$(GOBIN)/setup-envtest -else -SETUP_ENVTEST=$(shell which setup-envtest) -endif +ENVTEST_ASSETS_DIR=$(shell pwd)/testbin +ENVTEST_KUBERNETES_VERSION?=latest +install-envtest: setup-envtest + mkdir -p ${ENVTEST_ASSETS_DIR} + $(ENVTEST) use $(ENVTEST_KUBERNETES_VERSION) --arch=$(ENVTEST_ARCH) --bin-dir=$(ENVTEST_ASSETS_DIR) + +ENVTEST = $(shell pwd)/bin/setup-envtest +.PHONY: envtest +setup-envtest: ## Download envtest-setup locally if necessary. + $(call go-install-tool,$(ENVTEST),sigs.k8s.io/controller-runtime/tools/setup-envtest@latest) + +# go-install-tool will 'go install' any package $2 and install it to $1. +PROJECT_DIR := $(shell dirname $(abspath $(lastword $(MAKEFILE_LIST)))) +define go-install-tool +@[ -f $(1) ] || { \ +set -e ;\ +TMP_DIR=$$(mktemp -d) ;\ +cd $$TMP_DIR ;\ +go mod init tmp ;\ +echo "Downloading $(2)" ;\ +GOBIN=$(PROJECT_DIR)/bin go install $(2) ;\ +rm -rf $$TMP_DIR ;\ +} +endef