From d4be60597c09398c43ecec0ecc98cd6b99798b8f Mon Sep 17 00:00:00 2001 From: Jerad C Date: Tue, 17 May 2022 13:33:12 -0500 Subject: [PATCH 1/3] add explore-test-coverage make target --- src/Makefile | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/src/Makefile b/src/Makefile index ac41dde3..72500238 100644 --- a/src/Makefile +++ b/src/Makefile @@ -1,3 +1,8 @@ +# The "grouped targets" feature requires Make 4.3. +ifneq (4.3,$(firstword $(sort $(or $(MAKE_VERSION),00-unknown) 4.3))) + $(error using make version $(MAKE_VERSION), please use version 4.3 or newer) +endif + PROJECT_DIR := $(shell dirname $(abspath $(lastword $(MAKEFILE_LIST)))) CONTROLLER_GEN = $(PROJECT_DIR)/bin/controller-gen KO = $(PROJECT_DIR)/bin/ko @@ -15,6 +20,7 @@ KODATA = \ cmd/controller/kodata/refs \ cmd/webhook/kodata/HEAD \ cmd/webhook/kodata/refs +CODECOVERAGE_OUT = $(PROJECT_DIR)/coverprofile.out # Image URL to use all building/pushing image targets IMG ?= controller:latest @@ -66,10 +72,14 @@ verify: ## Run go fmt and go vet against code. go vet $(PROJECT_DIR)/... .PHONY: test -test: $(GINKGO) ## Run tests. +test $(CODECOVERAGE_OUT) &: $(GINKGO) ## Run tests. go vet $(PROJECT_DIR)/... $(GINKGO) run $(GINKGO_BASE_OPTS) $(GINKGO_OPTS) $(PROJECT_DIR)/test/ +.PHONY: explore-test-coverage +explore-test-coverage: $(CODECOVERAGE_OUT) ## Display test coverage report in default web browser. + go tool cover -html=$< + ##@ Build .PHONY: run From b6aa8f69dae098eca1d6778564228bef3f49f585 Mon Sep 17 00:00:00 2001 From: Jerad C Date: Wed, 18 May 2022 12:09:35 -0500 Subject: [PATCH 2/3] update test workflow to install Make 4.3 --- .github/workflows/tests.yml | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml index 0f122d75..d1a810aa 100644 --- a/.github/workflows/tests.yml +++ b/.github/workflows/tests.yml @@ -33,6 +33,12 @@ jobs: ~/go/bin/ key: gocache + - name: Upgrade Make + run: | + sudo apt-get update + wget -c http://archive.ubuntu.com/ubuntu/pool/main/m/make-dfsg/make_4.3-4ubuntu1_amd64.deb + sudo apt-get install ./make_4.3-4ubuntu1_amd64.deb + - name: make test run: make test working-directory: ./src From 25f2bf832f31ec0e48eac4602f6bb624aaefcfcc Mon Sep 17 00:00:00 2001 From: Jerad C Date: Thu, 26 May 2022 14:33:02 -0500 Subject: [PATCH 3/3] remove grouped targets --- .github/workflows/tests.yml | 6 --- src/Makefile | 49 +++++++++++------- src/scripts/download-kubebuilder-assets.sh | 41 +++++++++++++++ src/scripts/toolchain.sh | 60 ---------------------- 4 files changed, 71 insertions(+), 85 deletions(-) create mode 100755 src/scripts/download-kubebuilder-assets.sh delete mode 100755 src/scripts/toolchain.sh diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml index d1a810aa..0f122d75 100644 --- a/.github/workflows/tests.yml +++ b/.github/workflows/tests.yml @@ -33,12 +33,6 @@ jobs: ~/go/bin/ key: gocache - - name: Upgrade Make - run: | - sudo apt-get update - wget -c http://archive.ubuntu.com/ubuntu/pool/main/m/make-dfsg/make_4.3-4ubuntu1_amd64.deb - sudo apt-get install ./make_4.3-4ubuntu1_amd64.deb - - name: make test run: make test working-directory: ./src diff --git a/src/Makefile b/src/Makefile index 72500238..bb5c9faf 100644 --- a/src/Makefile +++ b/src/Makefile @@ -1,18 +1,10 @@ -# The "grouped targets" feature requires Make 4.3. -ifneq (4.3,$(firstword $(sort $(or $(MAKE_VERSION),00-unknown) 4.3))) - $(error using make version $(MAKE_VERSION), please use version 4.3 or newer) -endif - PROJECT_DIR := $(shell dirname $(abspath $(lastword $(MAKEFILE_LIST)))) -CONTROLLER_GEN = $(PROJECT_DIR)/bin/controller-gen -KO = $(PROJECT_DIR)/bin/ko -ENVTEST = $(PROJECT_DIR)/bin/setup-envtest -GINKGO = $(PROJECT_DIR)/bin/ginkgo -TOOLCHAIN = \ - $(CONTROLLER_GEN) \ - $(KO) \ - $(ENVTEST) \ - $(GINKGO) +BIN_DIR := $(PROJECT_DIR)/bin +SCRIPTS_DIR := $(PROJECT_DIR)/scripts +CONTROLLER_GEN = $(BIN_DIR)controller-gen +KO = $(BIN_DIR)/ko +SETUP_ENVTEST = $(BIN_DIR)/setup-envtest +GINKGO = $(BIN_DIR)/ginkgo HELM_BASE_OPTS ?= --set serviceAccount.annotations.eks\\.amazonaws\\.com/role-arn=${NTHV2_IAM_ROLE_ARN} GINKGO_BASE_OPTS ?= --coverpkg $(shell head -n 1 $(PROJECT_DIR)/go.mod | cut -s -d ' ' -f 2)/pkg/... KODATA = \ @@ -57,11 +49,24 @@ SHELL = /usr/bin/env bash -o pipefail help: ## Display this help. @awk 'BEGIN {FS = ":.*##"; printf "\nUsage:\n make \033[36m\033[0m\n"} /^[a-zA-Z_0-9-]+:.*?##/ { printf " \033[36m%-15s\033[0m %s\n", $$1, $$2 } /^##@/ { printf "\n\033[1m%s\033[0m\n", substr($$0, 5) } ' $(MAKEFILE_LIST) -$(TOOLCHAIN) &: - @./scripts/toolchain.sh -d "$(PROJECT_DIR)/bin" - ##@ Development +$(CONTROLLER_GEN): + GOBIN="$(BIN_DIR)" go install sigs.k8s.io/controller-tools/cmd/controller-gen@v0.8.0 + +$(GINKGO): + GOBIN="$(BIN_DIR)" go install github.com/onsi/ginkgo/v2/ginkgo@v2.1.3 + +$(KO): + GOBIN="$(BIN_DIR)" go install github.com/google/ko@v0.9.3 + +$(SETUP_ENVTEST): + GOBIN="$(BIN_DIR)" go install sigs.k8s.io/controller-runtime/tools/setup-envtest@v0.0.0-20220217150738-f62a0f579d73 + PATH="$(BIN_DIR):$(PATH)" $(SCRIPTS_DIR)/download-kubebuilder-assets.sh + +.PHONY: tools +tools: $(CONTROLLER_GEN) $(GINKGO) $(KO) $(SETUP_ENVTEST) ## Pre-install additional tools. + .PHONY: generate generate: $(CONTROLLER_GEN) ## Generate code containing DeepCopy, DeepCopyInto, and DeepCopyObject method implementations. $(CONTROLLER_GEN) object:headerFile="hack/boilerplate.go.txt" paths="./..." @@ -71,11 +76,17 @@ verify: ## Run go fmt and go vet against code. go fmt $(PROJECT_DIR)/... go vet $(PROJECT_DIR)/... -.PHONY: test -test $(CODECOVERAGE_OUT) &: $(GINKGO) ## Run tests. +$(CODECOVERAGE_OUT): $(GINKGO) go vet $(PROJECT_DIR)/... $(GINKGO) run $(GINKGO_BASE_OPTS) $(GINKGO_OPTS) $(PROJECT_DIR)/test/ +.PHONY: delete-test-coverage +delete-test-coverage: + rm -f $(CODECOVERAGE_OUT) + +.PHONY: test +test: delete-test-coverage $(CODECOVERAGE_OUT) ## Run tests. + .PHONY: explore-test-coverage explore-test-coverage: $(CODECOVERAGE_OUT) ## Display test coverage report in default web browser. go tool cover -html=$< diff --git a/src/scripts/download-kubebuilder-assets.sh b/src/scripts/download-kubebuilder-assets.sh new file mode 100755 index 00000000..494a7521 --- /dev/null +++ b/src/scripts/download-kubebuilder-assets.sh @@ -0,0 +1,41 @@ +#!/usr/bin/env bash + +set -euo pipefail + +k8s_version="${K8S_VERSION:-1.21.x}" +kubebuilder_assets_dir="${KUBEBUILDER_ASSETS:-$HOME/.kubebuilder/bin}" + +usage=$(cat << EOM +usage: $(basename "$0") -h | [-k VERSION] [-d PATH] + + Download kubebuilder assets to PATH. + + Arguments: + -h Print usage message then exit. + -k VERSION Kubernetes version (default ${k8s_version}). + -d PATH Destination directory for downloaded assets (default ${kubebuilder_assets_dir}). + +EOM +) + +while getopts "k:d:h" opt; do + case $opt in + k ) k8s_version="$OPTARG" + ;; + d ) kubebuilder_assets_dir="$OPTARG" + ;; + * ) echo "$usage" 1>&2 + exit 1 + ;; + esac +done + +# Kubebuilder does not support darwin/arm64 so use amd64 through Rosetta instead. +arch="$(go env GOARCH)" +if [[ "$(go env GOOS)/$arch" == "darwin/arm64" ]]; then + arch="amd64" +fi + +mkdir -p "$kubebuilder_assets_dir" +ln -sf "$(setup-envtest use -p path "$k8s_version" --arch="$arch" --bin-dir="$kubebuilder_assets_dir")"/* "$kubebuilder_assets_dir" +find "$kubebuilder_assets_dir" diff --git a/src/scripts/toolchain.sh b/src/scripts/toolchain.sh deleted file mode 100755 index 85265c1f..00000000 --- a/src/scripts/toolchain.sh +++ /dev/null @@ -1,60 +0,0 @@ -#!/usr/bin/env bash - -set -euo pipefail - -usage=$(cat << EOM -usage: $(basename "$0") -h | -d PATH - - Download tools to PATH. - - Arguments: - -h Print usage message then exit. - -d PATH Destination directory for downloaded tools. - -EOM -) - -k8s_version="${K8S_VERSION:-1.21.x}" -kubebuilder_assets_dir="${KUBEBUILDER_ASSETS:-$HOME/.kubebuilder/bin}" - -tools=( - "github.com/google/ko@v0.9.3" - "sigs.k8s.io/controller-tools/cmd/controller-gen@v0.8.0" - # setup-envtest version specifiers: - # https://pkg.go.dev/sigs.k8s.io/controller-runtime/tools/setup-envtest/versions?tab=versions - "sigs.k8s.io/controller-runtime/tools/setup-envtest@v0.0.0-20220217150738-f62a0f579d73" - "github.com/onsi/ginkgo/v2/ginkgo@v2.1.3" -) - -bin_dir="" - -while getopts "d:h" opt; do - case $opt in - d ) bin_dir="$OPTARG" - ;; - * ) echo "$usage" 1>&2 - exit 1 - ;; - esac -done - -if [[ -z "$bin_dir" ]]; then - echo "error: missing destination path" - echo "$usage" 1>&2 - exit 1 -fi - -for tool in ${tools[@]}; do - echo "Downloading $tool" - GOBIN="$bin_dir" go install "$tool" -done - -# Kubebuilder does not support darwin/arm64 so use amd64 through Rosetta instead. -arch="$(go env GOARCH)" -if [[ "$(go env GOOS)/$arch" == "darwin/arm64" ]]; then - arch="amd64" -fi - -mkdir -p "$kubebuilder_assets_dir" -ln -sf "$("$bin_dir/setup-envtest" use -p path "$k8s_version" --arch="$arch" --bin-dir="$kubebuilder_assets_dir")"/* "$kubebuilder_assets_dir" -find "$kubebuilder_assets_dir"