# Ensure Make is run with bash shell as some syntax below is bash-specific SHELL:=/usr/bin/env bash .DEFAULT_GOAL:=help # # Go. # GO_VERSION ?= 1.19.2 GO_CONTAINER_IMAGE ?= docker.io/library/golang:$(GO_VERSION) # Use GOPROXY environment variable if set GOPROXY := $(shell go env GOPROXY) ifeq ($(GOPROXY),) GOPROXY := https://goproxy.cn,direct endif export GOPROXY # Active module mode, as we use go modules to manage dependencies export GO111MODULE=on # This option is for running docker manifest command export DOCKER_CLI_EXPERIMENTAL := enabled # # Directories. # # Full directory of where the Makefile resides ROOT_DIR:=$(shell dirname $(realpath $(firstword $(MAKEFILE_LIST)))) EXP_DIR := exp BIN_DIR := bin TEST_DIR := test TOOLS_DIR := hack/tools TOOLS_BIN_DIR := $(abspath $(TOOLS_DIR)/$(BIN_DIR)) E2E_FRAMEWORK_DIR := $(TEST_DIR)/framework GO_INSTALL := ./scripts/go_install.sh export PATH := $(abspath $(TOOLS_BIN_DIR)):$(PATH) # # Binaries. # # Note: Need to use abspath so we can invoke these from subdirectories KUSTOMIZE_VER := v4.5.2 KUSTOMIZE_BIN := kustomize KUSTOMIZE := $(abspath $(TOOLS_BIN_DIR)/$(KUSTOMIZE_BIN)-$(KUSTOMIZE_VER)) KUSTOMIZE_PKG := sigs.k8s.io/kustomize/kustomize/v4 SETUP_ENVTEST_VER := v0.0.0-20211110210527-619e6b92dab9 SETUP_ENVTEST_BIN := setup-envtest SETUP_ENVTEST := $(abspath $(TOOLS_BIN_DIR)/$(SETUP_ENVTEST_BIN)-$(SETUP_ENVTEST_VER)) SETUP_ENVTEST_PKG := sigs.k8s.io/controller-runtime/tools/setup-envtest CONTROLLER_GEN_VER := v0.9.1 CONTROLLER_GEN_BIN := controller-gen CONTROLLER_GEN := $(abspath $(TOOLS_BIN_DIR)/$(CONTROLLER_GEN_BIN)-$(CONTROLLER_GEN_VER)) CONTROLLER_GEN_PKG := sigs.k8s.io/controller-tools/cmd/controller-gen GOTESTSUM_VER := v1.6.4 GOTESTSUM_BIN := gotestsum GOTESTSUM := $(abspath $(TOOLS_BIN_DIR)/$(GOTESTSUM_BIN)-$(GOTESTSUM_VER)) GOTESTSUM_PKG := gotest.tools/gotestsum HADOLINT_VER := v2.10.0 HADOLINT_FAILURE_THRESHOLD = warning GOLANGCI_LINT_BIN := golangci-lint GOLANGCI_LINT := $(abspath $(TOOLS_BIN_DIR)/$(GOLANGCI_LINT_BIN)) # Define Docker related variables. Releases should modify and double check these vars. REGISTRY ?= docker.io/kubespheredev PROD_REGISTRY ?= docker.io/kubesphere # capkk CAPKK_IMAGE_NAME ?= capkk-controller CAPKK_CONTROLLER_IMG ?= $(REGISTRY)/$(CAPKK_IMAGE_NAME) # bootstrap K3S_BOOTSTRAP_IMAGE_NAME ?= k3s-bootstrap-controller K3S_BOOTSTRAP_CONTROLLER_IMG ?= $(REGISTRY)/$(K3S_BOOTSTRAP_IMAGE_NAME) # control plane K3S_CONTROL_PLANE_IMAGE_NAME ?= k3s-control-plane-controller K3S_CONTROL_PLANE_CONTROLLER_IMG ?= $(REGISTRY)/$(K3S_CONTROL_PLANE_IMAGE_NAME) # It is set by Prow GIT_TAG, a git-based tag of the form vYYYYMMDD-hash, e.g., v20210120-v0.3.10-308-gc61521971 TAG ?= dev ARCH ?= $(shell go env GOARCH) ALL_ARCH = amd64 arm arm64 ppc64le s390x # Allow overriding the imagePullPolicy PULL_POLICY ?= Always # Hosts running SELinux need :z added to volume mounts SELINUX_ENABLED := $(shell cat /sys/fs/selinux/enforce 2> /dev/null || echo 0) ifeq ($(SELINUX_ENABLED),1) DOCKER_VOL_OPTS?=:z endif # Set build time variables including version details LDFLAGS := $(shell hack/version.sh) # Set kk build tags BUILDTAGS = exclude_graphdriver_devicemapper exclude_graphdriver_btrfs containers_image_openpgp .PHONY: all all: test managers .PHONY: help help: ## Display this help. @awk 'BEGIN {FS = ":.*##"; printf "\nUsage:\n make \033[36m\033[0m\n\nTargets:\n"} /^[0-9A-Za-z_-]+:.*?##/ { printf " \033[36m%-45s\033[0m %s\n", $$1, $$2 } /^\$$\([0-9A-Za-z_-]+\):.*?##/ { gsub("_","-", $$1); printf " \033[36m%-45s\033[0m %s\n", tolower(substr($$1, 3, length($$1)-7)), $$2 } /^##@/ { printf "\n\033[1m%s\033[0m\n", substr($$0, 5) } ' $(MAKEFILE_LIST) ## -------------------------------------- ## Generate / Manifests ## -------------------------------------- ##@ generate: ALL_GENERATE_MODULES = capkk k3s-bootstrap k3s-control-plane .PHONY: generate generate: ## Run all generate-manifests-*, generate-go-deepcopy-* targets $(MAKE) generate-modules generate-manifests generate-go-deepcopy .PHONY: generate-manifests generate-manifests: ## Run all generate-manifest-* targets $(MAKE) $(addprefix generate-manifests-,$(ALL_GENERATE_MODULES)) .PHONY: generate-manifests-capkk generate-manifests-capkk: $(CONTROLLER_GEN) $(KUSTOMIZE) ## Generate manifests e.g. CRD, RBAC etc. for core $(MAKE) clean-generated-yaml SRC_DIRS="./config/crd/bases" $(CONTROLLER_GEN) \ paths=./api/... \ crd:crdVersions=v1 \ rbac:roleName=manager-role \ output:crd:dir=./config/crd/bases \ output:webhook:dir=./config/webhook \ webhook .PHONY: generate-manifests-k3s-bootstrap generate-manifests-k3s-bootstrap: $(CONTROLLER_GEN) $(KUSTOMIZE) ## Generate manifests e.g. CRD, RBAC etc. for core $(MAKE) clean-generated-yaml SRC_DIRS="./bootstrap/k3s/config/crd/bases" $(CONTROLLER_GEN) \ paths=./bootstrap/k3s/api/... \ crd:crdVersions=v1 \ rbac:roleName=manager-role \ output:crd:dir=./bootstrap/k3s/config/crd/bases \ output:rbac:dir=./bootstrap/k3s/config/rbac \ output:webhook:dir=./bootstrap/k3s/config/webhook \ webhook .PHONY: generate-manifests-k3s-control-plane generate-manifests-k3s-control-plane: $(CONTROLLER_GEN) $(KUSTOMIZE) ## Generate manifests e.g. CRD, RBAC etc. for core $(MAKE) clean-generated-yaml SRC_DIRS="./controlplane/k3s/config/crd/bases" $(CONTROLLER_GEN) \ paths=./controlplane/k3s/api/... \ crd:crdVersions=v1 \ rbac:roleName=manager-role \ output:crd:dir=./controlplane/k3s/config/crd/bases \ output:rbac:dir=./controlplane/k3s/config/rbac \ output:webhook:dir=./controlplane/k3s/config/webhook \ webhook .PHONY: generate-go-deepcopy generate-go-deepcopy: ## Run all generate-go-deepcopy-* targets $(MAKE) $(addprefix generate-go-deepcopy-,$(ALL_GENERATE_MODULES)) .PHONY: generate-go-deepcopy-capkk generate-go-deepcopy-capkk: $(CONTROLLER_GEN) ## Generate deepcopy go code for capkk $(MAKE) clean-generated-deepcopy SRC_DIRS="./api" $(CONTROLLER_GEN) \ object:headerFile=./hack/boilerplate.go.txt \ paths=./api/... \ .PHONY: generate-go-deepcopy-k3s-bootstrap generate-go-deepcopy-k3s-bootstrap: $(CONTROLLER_GEN) ## Generate deepcopy go code for k3s-bootstrap $(MAKE) clean-generated-deepcopy SRC_DIRS="./bootstrap/k3s/api" $(CONTROLLER_GEN) \ object:headerFile=./hack/boilerplate.go.txt \ paths=./bootstrap/k3s/api/... \ .PHONY: generate-go-deepcopy-k3s-control-plane generate-go-deepcopy-k3s-control-plane: $(CONTROLLER_GEN) ## Generate deepcopy go code for k3s-control-plane $(MAKE) clean-generated-deepcopy SRC_DIRS="./controlplane/k3s/api" $(CONTROLLER_GEN) \ object:headerFile=./hack/boilerplate.go.txt \ paths=./controlplane/k3s/api/... \ .PHONY: generate-modules generate-modules: ## Run go mod tidy to ensure modules are up to date go mod tidy ## -------------------------------------- ## Lint / Verify ## -------------------------------------- ##@ lint and verify: .PHONY: lint lint: $(GOLANGCI_LINT) ## Lint the codebase $(GOLANGCI_LINT) run -v $(GOLANGCI_LINT_EXTRA_ARGS) cd $(TEST_DIR); $(GOLANGCI_LINT) run -v $(GOLANGCI_LINT_EXTRA_ARGS) cd $(TOOLS_DIR); $(GOLANGCI_LINT) run -v $(GOLANGCI_LINT_EXTRA_ARGS) ./scripts/ci-lint-dockerfiles.sh $(HADOLINT_VER) $(HADOLINT_FAILURE_THRESHOLD) .PHONY: lint-dockerfiles lint-dockerfiles: ./scripts/ci-lint-dockerfiles.sh $(HADOLINT_VER) $(HADOLINT_FAILURE_THRESHOLD) .PHONY: verify verify: $(addprefix verify-,$(ALL_VERIFY_CHECKS)) lint-dockerfiles ## Run all verify-* targets .PHONY: verify-modules verify-modules: generate-modules ## Verify go modules are up to date @if !(git diff --quiet HEAD -- go.sum go.mod $(TOOLS_DIR)/go.mod $(TOOLS_DIR)/go.sum $(TEST_DIR)/go.mod $(TEST_DIR)/go.sum); then \ git diff; \ echo "go module files are out of date"; exit 1; \ fi @if (find . -name 'go.mod' | xargs -n1 grep -q -i 'k8s.io/client-go.*+incompatible'); then \ find . -name "go.mod" -exec grep -i 'k8s.io/client-go.*+incompatible' {} \; -print; \ echo "go module contains an incompatible client-go version"; exit 1; \ fi .PHONY: verify-gen verify-gen: generate ## Verify go generated files are up to date @if !(git diff --quiet HEAD); then \ git diff; \ echo "generated files are out of date, run make generate"; exit 1; \ fi ## -------------------------------------- ## Binaries ## -------------------------------------- ##@ build: .PHONY: kk kk: CGO_ENABLED=0 go build -trimpath -tags "$(BUILDTAGS)" -ldflags "$(LDFLAGS)" -o $(BIN_DIR)/kk github.com/kubesphere/kubekey/cmd/kk; ALL_MANAGERS = capkk k3s-bootstrap k3s-control-plane .PHONY: managers managers: $(addprefix manager-,$(ALL_MANAGERS)) ## Run all manager-* targets .PHONY: manager-capkk manager-capkk: ## Build the capkk manager binary into the ./bin folder go build -trimpath -ldflags "$(LDFLAGS)" -o $(BIN_DIR)/manager github.com/kubesphere/kubekey .PHONY: manager-k3s-bootstrap manager-k3s-bootstrap: ## Build the k3s bootstrap manager binary into the ./bin folder go build -trimpath -ldflags "$(LDFLAGS)" -o $(BIN_DIR)/k3s-bootstrap-manager github.com/kubesphere/kubekey/bootstrap/k3s .PHONY: manager-k3s-control-plane manager-k3s-control-plane: ## Build the k3s control plane manager binary into the ./bin folder go build -trimpath -ldflags "$(LDFLAGS)" -o $(BIN_DIR)/k3s-control-plane-manager github.com/kubesphere/kubekey/controlplane/k3s .PHONY: docker-pull-prerequisites docker-pull-prerequisites: docker pull docker.io/docker/dockerfile:1.4 docker pull $(GO_CONTAINER_IMAGE) .PHONY: docker-build-all docker-build-all: $(addprefix docker-build-,$(ALL_ARCH)) ## Build docker images for all architectures docker-build-%: $(MAKE) ARCH=$* docker-build ALL_DOCKER_BUILD = capkk k3s-bootstrap k3s-control-plane .PHONY: docker-build docker-build: docker-pull-prerequisites ## Run docker-build-* targets for all providers $(MAKE) ARCH=$(ARCH) $(addprefix docker-build-,$(ALL_DOCKER_BUILD)) .PHONY: docker-build-capkk docker-build-capkk: ## Build the docker image for capkk DOCKER_BUILDKIT=1 docker build --build-arg builder_image=$(GO_CONTAINER_IMAGE) --build-arg goproxy=$(GOPROXY) --build-arg ARCH=$(ARCH) --build-arg ldflags="$(LDFLAGS)" . -t $(CAPKK_CONTROLLER_IMG)-$(ARCH):$(TAG) $(MAKE) set-manifest-image MANIFEST_IMG=$(CAPKK_CONTROLLER_IMG)-$(ARCH) MANIFEST_TAG=$(TAG) TARGET_RESOURCE="./config/default/manager_image_patch.yaml" $(MAKE) set-manifest-pull-policy TARGET_RESOURCE="./config/default/manager_pull_policy.yaml" .PHONY: docker-build-k3s-bootstrap docker-build-k3s-bootstrap: ## Build the docker image for k3s bootstrap controller manager DOCKER_BUILDKIT=1 docker build --build-arg builder_image=$(GO_CONTAINER_IMAGE) --build-arg goproxy=$(GOPROXY) --build-arg ARCH=$(ARCH) --build-arg package=./bootstrap/k3s --build-arg ldflags="$(LDFLAGS)" . -t $(K3S_BOOTSTRAP_CONTROLLER_IMG)-$(ARCH):$(TAG) $(MAKE) set-manifest-image MANIFEST_IMG=$(K3S_BOOTSTRAP_CONTROLLER_IMG)-$(ARCH) MANIFEST_TAG=$(TAG) TARGET_RESOURCE="./bootstrap/k3s/config/default/manager_image_patch.yaml" $(MAKE) set-manifest-pull-policy TARGET_RESOURCE="./bootstrap/k3s/config/default/manager_pull_policy.yaml" .PHONY: docker-build-k3s-control-plane docker-build-k3s-control-plane: ## Build the docker image for k3s control plane controller manager DOCKER_BUILDKIT=1 docker build --build-arg builder_image=$(GO_CONTAINER_IMAGE) --build-arg goproxy=$(GOPROXY) --build-arg ARCH=$(ARCH) --build-arg package=./controlplane/k3s --build-arg ldflags="$(LDFLAGS)" . -t $(K3S_CONTROL_PLANE_CONTROLLER_IMG)-$(ARCH):$(TAG) $(MAKE) set-manifest-image MANIFEST_IMG=$(K3S_CONTROL_PLANE_CONTROLLER_IMG)-$(ARCH) MANIFEST_TAG=$(TAG) TARGET_RESOURCE="./controlplane/k3s/config/default/manager_image_patch.yaml" $(MAKE) set-manifest-pull-policy TARGET_RESOURCE="./controlplane/k3s/config/default/manager_pull_policy.yaml" .PHONY: docker-build-e2e docker-build-e2e: ## Build the docker image for capkk $(MAKE) docker-build REGISTRY=docker.io/kubespheredev PULL_POLICY=IfNotPresent TAG=e2e ## -------------------------------------- ## Deployment ## -------------------------------------- ##@ deployment ifndef ignore-not-found ignore-not-found = false endif .PHONY: install install: generate $(KUSTOMIZE) ## Install CRDs into the K8s cluster specified in ~/.kube/config. $(KUSTOMIZE) build config/crd | kubectl apply -f - .PHONY: uninstall uninstall: generate $(KUSTOMIZE) ## Uninstall CRDs from the K8s cluster specified in ~/.kube/config. Call with ignore-not-found=true to ignore resource not found errors during deletion. $(KUSTOMIZE) build config/crd | kubectl delete --ignore-not-found=$(ignore-not-found) -f - .PHONY: deploy deploy: generate $(KUSTOMIZE) ## Deploy controller to the K8s cluster specified in ~/.kube/config. cd config/manager && $(KUSTOMIZE) edit set image controller=$(CAPKK_CONTROLLER_IMG)-$(ARCH):$(TAG) $(KUSTOMIZE) build config/default | kubectl apply -f - .PHONY: undeploy undeploy: ## Undeploy controller from the K8s cluster specified in ~/.kube/config. Call with ignore-not-found=true to ignore resource not found errors during deletion. $(KUSTOMIZE) build config/default | kubectl delete --ignore-not-found=$(ignore-not-found) -f - ## -------------------------------------- ## Testing ## -------------------------------------- ##@ test: ARTIFACTS ?= ${ROOT_DIR}/_artifacts ifeq ($(shell go env GOOS),darwin) # Use the darwin/amd64 binary until an arm64 version is available KUBEBUILDER_ASSETS ?= $(shell $(SETUP_ENVTEST) use --use-env -p path --arch amd64 $(KUBEBUILDER_ENVTEST_KUBERNETES_VERSION)) else KUBEBUILDER_ASSETS ?= $(shell $(SETUP_ENVTEST) use --use-env -p path $(KUBEBUILDER_ENVTEST_KUBERNETES_VERSION)) endif .PHONY: test test: $(SETUP_ENVTEST) ## Run unit and integration tests KUBEBUILDER_ASSETS="$(KUBEBUILDER_ASSETS)" go test ./... $(TEST_ARGS) .PHONY: test-verbose test-verbose: ## Run unit and integration tests with verbose flag $(MAKE) test TEST_ARGS="$(TEST_ARGS) -v" .PHONY: test-junit test-junit: $(SETUP_ENVTEST) $(GOTESTSUM) ## Run unit and integration tests and generate a junit report set +o errexit; (KUBEBUILDER_ASSETS="$(KUBEBUILDER_ASSETS)" go test -json ./... $(TEST_ARGS); echo $$? > $(ARTIFACTS)/junit.exitcode) | tee $(ARTIFACTS)/junit.stdout $(GOTESTSUM) --junitfile $(ARTIFACTS)/junit.xml --raw-command cat $(ARTIFACTS)/junit.stdout exit $$(cat $(ARTIFACTS)/junit.exitcode) .PHONY: test-cover test-cover: ## Run unit and integration tests and generate a coverage report $(MAKE) test TEST_ARGS="$(TEST_ARGS) -coverprofile=out/coverage.out" go tool cover -func=out/coverage.out -o out/coverage.txt go tool cover -html=out/coverage.out -o out/coverage.html .PHONY: test-e2e test-e2e: ## Run e2e tests $(MAKE) -C $(TEST_DIR)/e2e run .PHONY: test-e2e-k3s test-e2e-k3s: ## Run e2e tests $(MAKE) -C $(TEST_DIR)/e2e run-k3s ## -------------------------------------- ## Release ## -------------------------------------- ##@ release: ## latest git tag for the commit, e.g., v0.3.10 RELEASE_TAG ?= $(shell git describe --abbrev=0 2>/dev/null) ifneq (,$(findstring -,$(RELEASE_TAG))) PRE_RELEASE=true endif # the previous release tag, e.g., v0.3.9, excluding pre-release tags PREVIOUS_TAG ?= $(shell git tag -l | grep -E "^v[0-9]+\.[0-9]+\.[0-9]+$$" | sort -V | grep -B1 $(RELEASE_TAG) | head -n 1 2>/dev/null) RELEASE_DIR := out $(RELEASE_DIR): mkdir -p $(RELEASE_DIR)/ .PHONY: release release: clean-release ## Build and push container images using the latest git tag for the commit @if [ -z "${RELEASE_TAG}" ]; then echo "RELEASE_TAG is not set"; exit 1; fi @if ! [ -z "$$(git status --porcelain)" ]; then echo "Your local git repository contains uncommitted changes, use git clean before proceeding."; exit 1; fi git checkout "${RELEASE_TAG}" ## Build binaries first. GIT_VERSION=$(RELEASE_TAG) $(MAKE) release-binaries # Set the manifest image to the production bucket. $(MAKE) manifest-modification REGISTRY=$(PROD_REGISTRY) ## Build the manifests $(MAKE) release-manifests ## Build the templates $(MAKE) release-templates ## Clean the git artifacts modified in the release process $(MAKE) clean-release-git release-binaries: ## Build the binaries to publish with a release RELEASE_BINARY=./cmd/kk GOOS=linux GOARCH=amd64 $(MAKE) release-binary RELEASE_BINARY=./cmd/kk GOOS=linux GOARCH=amd64 $(MAKE) release-archive RELEASE_BINARY=./cmd/kk GOOS=linux GOARCH=arm64 $(MAKE) release-binary RELEASE_BINARY=./cmd/kk GOOS=linux GOARCH=arm64 $(MAKE) release-archive RELEASE_BINARY=./cmd/kk GOOS=darwin GOARCH=amd64 $(MAKE) release-binary RELEASE_BINARY=./cmd/kk GOOS=darwin GOARCH=amd64 $(MAKE) release-archive RELEASE_BINARY=./cmd/kk GOOS=darwin GOARCH=arm64 $(MAKE) release-binary RELEASE_BINARY=./cmd/kk GOOS=darwin GOARCH=arm64 $(MAKE) release-archive release-binary: $(RELEASE_DIR) docker run \ --rm \ -e CGO_ENABLED=0 \ -e GOOS=$(GOOS) \ -e GOARCH=$(GOARCH) \ -e GOPROXY=$(GOPROXY) \ -v "$$(pwd):/workspace$(DOCKER_VOL_OPTS)" \ -w /workspace \ golang:$(GO_VERSION) \ go build -a -trimpath -tags "$(BUILDTAGS)" -ldflags "$(LDFLAGS) -extldflags '-static'" \ -o $(RELEASE_DIR)/$(notdir $(RELEASE_BINARY)) $(RELEASE_BINARY) release-archive: $(RELEASE_DIR) tar -czf $(RELEASE_DIR)/kubekey-$(RELEASE_TAG)-$(GOOS)-$(GOARCH).tar.gz -C $(RELEASE_DIR)/ $(notdir $(RELEASE_BINARY)) rm -rf $(RELEASE_DIR)/$(notdir $(RELEASE_BINARY)) .PHONY: manifest-modification manifest-modification: # Set the manifest images to the staging/production bucket. $(MAKE) set-manifest-image \ MANIFEST_IMG=$(REGISTRY)/$(CAPKK_IMAGE_NAME) MANIFEST_TAG=$(RELEASE_TAG) \ TARGET_RESOURCE="./config/default/manager_image_patch.yaml" $(MAKE) set-manifest-pull-policy PULL_POLICY=IfNotPresent TARGET_RESOURCE="./config/default/manager_pull_policy.yaml" .PHONY: release-manifests release-manifests: $(RELEASE_DIR) $(KUSTOMIZE) ## Build the manifests to publish with a release # Build capkk-components. $(KUSTOMIZE) build config/default > $(RELEASE_DIR)/infrastructure-components.yaml # Add metadata to the release artifacts cp metadata.yaml $(RELEASE_DIR)/metadata.yaml .PHONY: release-templates release-templates: $(RELEASE_DIR) ## Generate release templates cp templates/cluster-template*.yaml $(RELEASE_DIR)/ ## -------------------------------------- ## Docker ## -------------------------------------- .PHONY: docker-push docker-push: ## Push the docker images docker push $(CAPKK_CONTROLLER_IMG)-$(ARCH):$(TAG) docker push $(K3S_BOOTSTRAP_CONTROLLER_IMG)-$(ARCH):$(TAG) .PHONY: set-manifest-pull-policy set-manifest-pull-policy: $(info Updating kustomize pull policy file for manager resources) sed -i'' -e 's@imagePullPolicy: .*@imagePullPolicy: '"$(PULL_POLICY)"'@' $(TARGET_RESOURCE) .PHONY: set-manifest-image set-manifest-image: $(info Updating kustomize image patch file for manager resource) sed -i'' -e 's@image: .*@image: '"${MANIFEST_IMG}:$(MANIFEST_TAG)"'@' $(TARGET_RESOURCE) ## -------------------------------------- ## Cleanup / Verification ## -------------------------------------- ##@ clean: .PHONY: clean clean: ## Remove all generated files $(MAKE) clean-bin .PHONY: clean-bin clean-bin: ## Remove all generated binaries rm -rf $(BIN_DIR) rm -rf $(TOOLS_BIN_DIR) .PHONY: clean-release clean-release: ## Remove the release folder rm -rf $(RELEASE_DIR) .PHONY: clean-release-git clean-release-git: ## Restores the git files usually modified during a release git restore ./*manager_image_patch.yaml ./*manager_pull_policy.yaml .PHONY: clean-generated-yaml clean-generated-yaml: ## Remove files generated by conversion-gen from the mentioned dirs. Example SRC_DIRS="./api/v1beta1" (IFS=','; for i in $(SRC_DIRS); do find $$i -type f -name '*.yaml' -exec rm -f {} \;; done) .PHONY: clean-generated-deepcopy clean-generated-deepcopy: ## Remove files generated by conversion-gen from the mentioned dirs. Example SRC_DIRS="./api/v1beta1" (IFS=','; for i in $(SRC_DIRS); do find $$i -type f -name 'zz_generated.deepcopy*' -exec rm -f {} \;; done) ## -------------------------------------- ## Hack / Tools ## -------------------------------------- ##@ hack/tools: .PHONY: $(CONTROLLER_GEN_BIN) $(CONTROLLER_GEN_BIN): $(CONTROLLER_GEN) ## Build a local copy of controller-gen. .PHONY: $(GOTESTSUM_BIN) $(GOTESTSUM_BIN): $(GOTESTSUM) ## Build a local copy of gotestsum. .PHONY: $(KUSTOMIZE_BIN) $(KUSTOMIZE_BIN): $(KUSTOMIZE) ## Build a local copy of kustomize. .PHONY: $(SETUP_ENVTEST_BIN) $(SETUP_ENVTEST_BIN): $(SETUP_ENVTEST) ## Build a local copy of setup-envtest. .PHONY: $(GOLANGCI_LINT_BIN) $(GOLANGCI_LINT_BIN): $(GOLANGCI_LINT) ## Build a local copy of golangci-lint $(CONTROLLER_GEN): # Build controller-gen from tools folder. GOBIN=$(TOOLS_BIN_DIR) $(GO_INSTALL) $(CONTROLLER_GEN_PKG) $(CONTROLLER_GEN_BIN) $(CONTROLLER_GEN_VER) $(GOTESTSUM): # Build gotestsum from tools folder. GOBIN=$(TOOLS_BIN_DIR) $(GO_INSTALL) $(GOTESTSUM_PKG) $(GOTESTSUM_BIN) $(GOTESTSUM_VER) $(KUSTOMIZE): # Build kustomize from tools folder. CGO_ENABLED=0 GOBIN=$(TOOLS_BIN_DIR) $(GO_INSTALL) $(KUSTOMIZE_PKG) $(KUSTOMIZE_BIN) $(KUSTOMIZE_VER) $(SETUP_ENVTEST): # Build setup-envtest from tools folder. GOBIN=$(TOOLS_BIN_DIR) $(GO_INSTALL) $(SETUP_ENVTEST_PKG) $(SETUP_ENVTEST_BIN) $(SETUP_ENVTEST_VER) $(GOLANGCI_LINT): .github/workflows/golangci-lint.yml # Download golangci-lint using hack script into tools folder. hack/ensure-golangci-lint.sh \ -b $(TOOLS_BIN_DIR) \ $(shell cat .github/workflows/golangci-lint.yml | grep [[:space:]]version | sed 's/.*version: //') # build the artifact of repository iso ISO_ARCH ?= amd64 ISO_OUTPUT_DIR ?= ./output ISO_BUILD_WORKDIR := hack/gen-repository-iso ISO_OS_NAMES := centos7 debian9 debian10 ubuntu1604 ubuntu1804 ubuntu2004 ubuntu2204 ISO_BUILD_NAMES := $(addprefix build-iso-,$(ISO_OS_NAMES)) build-iso-all: $(ISO_BUILD_NAMES) .PHONY: $(ISO_BUILD_NAMES) $(ISO_BUILD_NAMES): @export DOCKER_BUILDKIT=1 docker build \ --platform linux/$(ISO_ARCH) \ --build-arg TARGETARCH=$(ISO_ARCH) \ -o type=local,dest=$(ISO_OUTPUT_DIR) \ -f $(ISO_BUILD_WORKDIR)/dockerfile.$(subst build-iso-,,$@) \ $(ISO_BUILD_WORKDIR) go-releaser-test: goreleaser release --rm-dist --skip-publish --snapshot