# Makefile for Crossplane Provider Proxmox # Image URL to use all building/pushing image targets IMG ?= crossplane-provider-proxmox:latest # Produce CRDs that work back to Kubernetes 1.11 (no version conversion) CRD_OPTIONS ?= "crd:trivialVersions=true,preserveUnknownFields=false" # Get the currently used golang install path (in GOPATH/bin, unless GOBIN is set) ifeq (,$(shell go env GOBIN)) GOBIN=$(shell go env GOPATH)/bin else GOBIN=$(shell go env GOBIN) endif # Setting SHELL to bash allows bash commands to be executed by recipes. SHELL = /usr/bin/env bash -o pipefail .SHELLFLAGS = -ec .PHONY: all all: build ##@ General .PHONY: help 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) ##@ Development .PHONY: manifests manifests: controller-gen ## Generate ClusterRole and CustomResourceDefinition objects. $(CONTROLLER_GEN) rbac:roleName=manager-role crd webhook paths="./..." output:crd:artifacts:config=config/crd/bases .PHONY: generate generate: controller-gen ## Generate code containing DeepCopy, DeepCopyInto, and DeepCopyObject method implementations. $(CONTROLLER_GEN) object:headerFile="hack/boilerplate.go.txt" paths="./..." .PHONY: fmt fmt: ## Run go fmt against code. go fmt ./... .PHONY: vet vet: ## Run go vet against code. go vet ./... .PHONY: test test: manifests generate fmt vet ## Run tests. go test ./... -coverprofile cover.out ##@ Build .PHONY: build build: generate fmt vet ## Build manager binary. go build -o bin/provider ./cmd/provider .PHONY: run run: manifests generate fmt vet ## Run a controller from your host. go run ./cmd/provider/main.go .PHONY: docker-build docker-build: test ## Build docker image with the manager. docker build -t ${IMG} . .PHONY: docker-push docker-push: ## Push docker image with the manager. docker push ${IMG} ##@ Deployment .PHONY: install install: manifests ## Install CRDs into the K8s cluster specified in ~/.kube/config. kubectl apply -f config/crd/bases .PHONY: uninstall uninstall: manifests ## Uninstall CRDs from the K8s cluster specified in ~/.kube/config. kubectl delete -f config/crd/bases .PHONY: deploy deploy: manifests ## Deploy controller to the K8s cluster specified in ~/.kube/config. cd config/manager && kustomize edit set image controller=${IMG} kustomize build config/default | kubectl apply -f - .PHONY: undeploy undeploy: ## Undeploy controller from the K8s cluster specified in ~/.kube/config. kustomize build config/default | kubectl delete -f - ##@ Build Dependencies ## Location to install dependencies to LOCALBIN ?= $(shell pwd)/bin $(LOCALBIN): mkdir -p $(LOCALBIN) ## Tool Binaries CONTROLLER_GEN ?= $(LOCALBIN)/controller-gen KUSTOMIZE ?= $(LOCALBIN)/kustomize ## Tool Versions CONTROLLER_TOOLS_VERSION ?= v0.14.0 KUSTOMIZE_VERSION ?= v5.2.1 .PHONY: controller-gen controller-gen: $(CONTROLLER_GEN) ## Download controller-gen locally if necessary. $(CONTROLLER_GEN): $(LOCALBIN) test -s $(LOCALBIN)/controller-gen || GOBIN=$(LOCALBIN) go install sigs.k8s.io/controller-tools/cmd/controller-gen@$(CONTROLLER_TOOLS_VERSION) .PHONY: kustomize kustomize: $(KUSTOMIZE) ## Download kustomize locally if necessary. $(KUSTOMIZE): $(LOCALBIN) test -s $(LOCALBIN)/kustomize || GOBIN=$(LOCALBIN) go install sigs.k8s.io/kustomize/kustomize/v5@$(KUSTOMIZE_VERSION) .PHONY: clean clean: ## Clean build artifacts rm -rf bin/ rm -rf config/crd/bases/*.yaml rm -f cover.out