|
| 1 | +SHELL := /bin/bash |
| 2 | + |
| 3 | +.PHONY: help |
| 4 | +help: ## Display this help. |
| 5 | + @awk 'BEGIN {FS = ":.*##"; printf "\nUsage:\n make \033[36m<target>\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) |
| 6 | + |
| 7 | +GO_INSTALL = ./hack/go-install.sh |
| 8 | + |
| 9 | +LOCALBIN ?= $(shell pwd)/bin |
| 10 | +TOOLS_DIR=hack/tools |
| 11 | +TOOLS_BIN_DIR := $(abspath $(TOOLS_DIR)/bin) |
| 12 | +ARTIFACT_DIR ?= .test |
| 13 | + |
| 14 | +KCP ?= $(LOCALBIN)/kcp |
| 15 | +KUBECTL_KCP ?= $(LOCALBIN)/kubectl-kcp |
| 16 | + |
| 17 | +KCP_VERSION ?= 0.23.0 |
| 18 | +CONTROLLER_GEN := $(TOOLS_BIN_DIR)/controller-gen |
| 19 | +export CONTROLLER_GEN # so hack scripts can use it |
| 20 | + |
| 21 | +KCP_APIGEN_VER := v0.21.0 |
| 22 | +KCP_APIGEN_BIN := apigen |
| 23 | +KCP_APIGEN_GEN := $(TOOLS_BIN_DIR)/$(KCP_APIGEN_BIN)-$(KCP_APIGEN_VER) |
| 24 | +export KCP_APIGEN_GEN # so hack scripts can use it |
| 25 | + |
| 26 | +OS ?= $(shell go env GOOS ) |
| 27 | +ARCH ?= $(shell go env GOARCH ) |
| 28 | + |
| 29 | +$(KCP): ## Download kcp locally if necessary. |
| 30 | + mkdir -p $(LOCALBIN) |
| 31 | + curl -L -s -o - https://github.com/kcp-dev/kcp/releases/download/v$(KCP_VERSION)/kcp_$(KCP_VERSION)_$(OS)_$(ARCH).tar.gz | tar --directory $(LOCALBIN)/../ -xvzf - bin/kcp |
| 32 | + touch $(KCP) # we download an "old" file, so make will re-download to refresh it unless we make it newer than the owning dir |
| 33 | + |
| 34 | +$(KUBECTL_KCP): ## Download kcp kubectl plugins locally if necessary. |
| 35 | + curl -L -s -o - https://github.com/kcp-dev/kcp/releases/download/v$(KCP_VERSION)/kubectl-kcp-plugin_$(KCP_VERSION)_$(OS)_$(ARCH).tar.gz | tar --directory $(LOCALBIN)/../ -xvzf - bin |
| 36 | + touch $(KUBECTL_KCP) # we download an "old" file, so make will re-download to refresh it unless we make it newer than the owning dir |
| 37 | + |
| 38 | +$(KCP_APIGEN_GEN): |
| 39 | + GOBIN=$(TOOLS_BIN_DIR) $(GO_INSTALL) github.com/kcp-dev/kcp/sdk/cmd/apigen $(KCP_APIGEN_BIN) $(KCP_APIGEN_VER) |
| 40 | + |
| 41 | +$(CONTROLLER_GEN): $(TOOLS_DIR)/go.mod # Build controller-gen from tools folder. |
| 42 | + cd $(TOOLS_DIR) && go build -tags=tools -o bin/controller-gen sigs.k8s.io/controller-tools/cmd/controller-gen |
| 43 | + |
| 44 | +build: $(KCP) $(KUBECTL_KCP) build-controller |
| 45 | + |
| 46 | +ifeq (,$(shell go env GOBIN)) |
| 47 | +GOBIN=$(shell go env GOPATH)/bin |
| 48 | +else |
| 49 | +GOBIN=$(shell go env GOBIN) |
| 50 | +endif |
| 51 | + |
| 52 | +build-controller: ## Build the controller binary. |
| 53 | + go build -o $(LOCALBIN)/kcp-controller ./main.go |
| 54 | + |
| 55 | +.PHONY: kcp-server |
| 56 | +kcp-server: $(KCP) $(ARTIFACT_DIR)/kcp ## Run the kcp server. |
| 57 | + @if [[ ! -s $(ARTIFACT_DIR)/kcp.log ]]; then ( $(KCP) start -v 5 --root-directory $(ARTIFACT_DIR)/kcp --kubeconfig-path $(ARTIFACT_DIR)/kcp.kubeconfig --audit-log-maxsize 1024 --audit-log-mode=batch --audit-log-batch-max-wait=1s --audit-log-batch-max-size=1000 --audit-log-batch-buffer-size=10000 --audit-log-batch-throttle-burst=15 --audit-log-batch-throttle-enable=true --audit-log-batch-throttle-qps=10 --audit-policy-file ./test/e2e/audit-policy.yaml --audit-log-path $(ARTIFACT_DIR)/audit.log >$(ARTIFACT_DIR)/kcp.log 2>&1 & ); fi |
| 58 | + @echo "Waiting for kcp server to generate kubeconfig..." |
| 59 | + @while true; do if [[ ! -s $(ARTIFACT_DIR)/kcp.kubeconfig ]]; then sleep 0.2; else break; fi; done |
| 60 | + @echo "Waiting for kcp server to be ready..." |
| 61 | + @while true; do if ! kubectl --kubeconfig $(ARTIFACT_DIR)/kcp.kubeconfig get --raw /readyz >$(ARTIFACT_DIR)/kcp.probe.log 2>&1; then sleep 0.2; else break; fi; done |
| 62 | + @echo "kcp server is ready and running in the background. To stop run 'make test-cleanup'" |
| 63 | + |
| 64 | +.PHONY: kcp-bootstrap |
| 65 | +kcp-bootstrap: ## Bootstrap the kcp server. |
| 66 | + @go run ./config/main.go |
| 67 | + |
| 68 | +.PHONY: kcp-controller |
| 69 | +kcp-controller: build kcp-bootstrap ## Run the kcp-controller. |
| 70 | + @echo "Starting kcp-controller in the background. To stop run 'make test-cleanup'" |
| 71 | + @if [[ ! -s $(ARTIFACT_DIR)/controller.log ]]; then ( ./bin/kcp-controller >$(ARTIFACT_DIR)/controller.log 2>&1 & ); fi |
| 72 | + |
| 73 | +.PHONY: test-e2e-cleanup |
| 74 | +test-cleanup: ## Clean up processes and directories from an end-to-end test run. |
| 75 | + rm -rf $(ARTIFACT_DIR) || true |
| 76 | + pkill -sigterm kcp || true |
| 77 | + pkill -sigterm kubectl || true |
| 78 | + pkill -sigterm kcp-controller || true |
| 79 | + |
| 80 | +$(ARTIFACT_DIR)/kcp: ## Create a directory for the kcp server data. |
| 81 | + mkdir -p $(ARTIFACT_DIR)/kcp |
| 82 | + |
| 83 | +generate: build $(CONTROLLER_GEN) $(KCP_APIGEN_GEN) # Generate code |
| 84 | + ./hack/update-codegen-crds.sh |
| 85 | + |
| 86 | +run-local: build-controller kcp-bootstrap |
| 87 | + ./bin/kcp-controller |
| 88 | + |
| 89 | +.PHONY: test # Run tests |
| 90 | +test: |
| 91 | + go test ./... --workspace=root --kubeconfig=$(CURDIR)/$(ARTIFACT_DIR)/kcp.kubeconfig |
0 commit comments