fix makefile envtest and controller-gen usage
Refactor logic to install helper tools into one function in th Makefile. Add support for envtest to help install tools like kubectl, etcd which helps users run tests more conveniently. Signed-off-by: Sanskar Jaiswal <sanskar.jaiswal@weave.works>
This commit is contained in:
parent
2a728b0d4b
commit
60496db536
|
@ -47,12 +47,8 @@ jobs:
|
||||||
image: kindest/node:v1.21.1@sha256:69860bda5563ac81e3c0057d654b5253219618a22ec3a346306239bba8cfa1a6
|
image: kindest/node:v1.21.1@sha256:69860bda5563ac81e3c0057d654b5253219618a22ec3a346306239bba8cfa1a6
|
||||||
- name: Setup Kustomize
|
- name: Setup Kustomize
|
||||||
uses: fluxcd/pkg//actions/kustomize@main
|
uses: fluxcd/pkg//actions/kustomize@main
|
||||||
- name: Setup Kubebuilder
|
|
||||||
uses: fluxcd/pkg//actions/kubebuilder@main
|
|
||||||
- name: Run tests
|
- name: Run tests
|
||||||
run: make test
|
run: make test
|
||||||
env:
|
|
||||||
KUBEBUILDER_ASSETS: ${{ github.workspace }}/kubebuilder/bin
|
|
||||||
- name: Check if working tree is dirty
|
- name: Check if working tree is dirty
|
||||||
run: |
|
run: |
|
||||||
if [[ $(git diff --stat) != '' ]]; then
|
if [[ $(git diff --stat) != '' ]]; then
|
||||||
|
|
|
@ -15,6 +15,7 @@
|
||||||
# vendor/
|
# vendor/
|
||||||
|
|
||||||
bin/
|
bin/
|
||||||
|
testbin/
|
||||||
config/release/
|
config/release/
|
||||||
config/crd/bases/gitrepositories.yaml
|
config/crd/bases/gitrepositories.yaml
|
||||||
|
|
||||||
|
|
79
Makefile
79
Makefile
|
@ -16,11 +16,15 @@ BUILD_ARGS ?=
|
||||||
# Architectures to build images for.
|
# Architectures to build images for.
|
||||||
BUILD_PLATFORMS ?= linux/amd64
|
BUILD_PLATFORMS ?= linux/amd64
|
||||||
|
|
||||||
|
# Architecture to use envtest with
|
||||||
|
ENVTEST_ARCH ?= amd64
|
||||||
|
|
||||||
all: manager
|
all: manager
|
||||||
|
|
||||||
# Run tests
|
# Run tests
|
||||||
test: generate fmt vet manifests api-docs download-crd-deps
|
KUBEBUILDER_ASSETS?="$(shell $(ENVTEST) --arch=$(ENVTEST_ARCH) use -i $(ENVTEST_KUBERNETES_VERSION) --bin-dir=$(ENVTEST_ASSETS_DIR) -p path)"
|
||||||
go test ./... -coverprofile cover.out
|
test: generate fmt vet manifests api-docs download-crd-deps install-envtest
|
||||||
|
KUBEBUILDER_ASSETS=$(KUBEBUILDER_ASSETS) go test ./... -coverprofile cover.out
|
||||||
cd api; go test ./... -coverprofile cover.out
|
cd api; go test ./... -coverprofile cover.out
|
||||||
|
|
||||||
# Build manager binary
|
# Build manager binary
|
||||||
|
@ -68,7 +72,7 @@ manifests: controller-gen
|
||||||
|
|
||||||
# Generate API reference documentation
|
# Generate API reference documentation
|
||||||
api-docs: gen-crd-api-reference-docs
|
api-docs: gen-crd-api-reference-docs
|
||||||
$(API_REF_GEN) -api-dir=./api/v1beta1 -config=./hack/api-docs/config.json -template-dir=./hack/api-docs/template -out-file=./docs/api/notification.md
|
$(GEN_CRD_API_REFERENCE_DOCS) -api-dir=./api/v1beta1 -config=./hack/api-docs/config.json -template-dir=./hack/api-docs/template -out-file=./docs/api/notification.md
|
||||||
|
|
||||||
# Run go mod tidy
|
# Run go mod tidy
|
||||||
tidy:
|
tidy:
|
||||||
|
@ -105,38 +109,6 @@ docker-push:
|
||||||
docker-deploy:
|
docker-deploy:
|
||||||
kubectl -n flux-system set image deployment/notification-controller manager=${IMG}
|
kubectl -n flux-system set image deployment/notification-controller manager=${IMG}
|
||||||
|
|
||||||
# Find or download controller-gen
|
|
||||||
controller-gen:
|
|
||||||
ifeq (, $(shell which controller-gen))
|
|
||||||
@{ \
|
|
||||||
set -e ;\
|
|
||||||
CONTROLLER_GEN_TMP_DIR=$$(mktemp -d) ;\
|
|
||||||
cd $$CONTROLLER_GEN_TMP_DIR ;\
|
|
||||||
go mod init tmp ;\
|
|
||||||
go get sigs.k8s.io/controller-tools/cmd/controller-gen@v0.7.0 ;\
|
|
||||||
rm -rf $$CONTROLLER_GEN_TMP_DIR ;\
|
|
||||||
}
|
|
||||||
CONTROLLER_GEN=$(GOBIN)/controller-gen
|
|
||||||
else
|
|
||||||
CONTROLLER_GEN=$(shell which controller-gen)
|
|
||||||
endif
|
|
||||||
|
|
||||||
# Find or download gen-crd-api-reference-docs
|
|
||||||
gen-crd-api-reference-docs:
|
|
||||||
ifeq (, $(shell which gen-crd-api-reference-docs))
|
|
||||||
@{ \
|
|
||||||
set -e ;\
|
|
||||||
API_REF_GEN_TMP_DIR=$$(mktemp -d) ;\
|
|
||||||
cd $$API_REF_GEN_TMP_DIR ;\
|
|
||||||
go mod init tmp ;\
|
|
||||||
go get github.com/ahmetb/gen-crd-api-reference-docs@v0.2.0 ;\
|
|
||||||
rm -rf $$API_REF_GEN_TMP_DIR ;\
|
|
||||||
}
|
|
||||||
API_REF_GEN=$(GOBIN)/gen-crd-api-reference-docs
|
|
||||||
else
|
|
||||||
API_REF_GEN=$(shell which gen-crd-api-reference-docs)
|
|
||||||
endif
|
|
||||||
|
|
||||||
# Build fuzzers
|
# Build fuzzers
|
||||||
fuzz-build:
|
fuzz-build:
|
||||||
rm -rf $(shell pwd)/build/fuzz/
|
rm -rf $(shell pwd)/build/fuzz/
|
||||||
|
@ -157,3 +129,40 @@ fuzz-smoketest: fuzz-build
|
||||||
-v "$(shell pwd)/tests/fuzz/oss_fuzz_run.sh":/runner.sh \
|
-v "$(shell pwd)/tests/fuzz/oss_fuzz_run.sh":/runner.sh \
|
||||||
gcr.io/oss-fuzz/fluxcd \
|
gcr.io/oss-fuzz/fluxcd \
|
||||||
bash -c "/runner.sh"
|
bash -c "/runner.sh"
|
||||||
|
|
||||||
|
# Find or download controller-gen
|
||||||
|
CONTROLLER_GEN = $(shell pwd)/bin/controller-gen
|
||||||
|
.PHONY: controller-gen
|
||||||
|
controller-gen: ## Download controller-gen locally if necessary.
|
||||||
|
$(call go-install-tool,$(CONTROLLER_GEN),sigs.k8s.io/controller-tools/cmd/controller-gen@v0.7.0)
|
||||||
|
|
||||||
|
# Find or download gen-crd-api-reference-docs
|
||||||
|
GEN_CRD_API_REFERENCE_DOCS = $(shell pwd)/bin/gen-crd-api-reference-docs
|
||||||
|
.PHONY: gen-crd-api-reference-docs
|
||||||
|
gen-crd-api-reference-docs:
|
||||||
|
$(call go-install-tool,$(GEN_CRD_API_REFERENCE_DOCS),github.com/ahmetb/gen-crd-api-reference-docs@v0.3.0)
|
||||||
|
|
||||||
|
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
|
||||||
|
|
Loading…
Reference in New Issue