github.com/ironcore-dev/gardener-extension-provider-ironcore@v0.3.2-0.20240314231816-8336447fb9a0/Makefile (about) 1 ENSURE_GARDENER_MOD := $(shell go get github.com/gardener/gardener@$$(go list -m -f "{{.Version}}" github.com/gardener/gardener)) 2 GARDENER_HACK_DIR := $(shell go list -m -f "{{.Dir}}" github.com/gardener/gardener)/hack 3 EXTENSION_PREFIX := gardener-extension 4 NAME := provider-ironcore 5 REGISTRY := ghcr.io 6 ADMISSION_NAME := admission-ironcore 7 IMAGE_PREFIX := $(REGISTRY)/extensions 8 REPO_ROOT := $(shell dirname $(realpath $(lastword $(MAKEFILE_LIST)))) 9 HACK_DIR := $(REPO_ROOT)/hack 10 EFFECTIVE_VERSION := $(VERSION)-$(shell git rev-parse HEAD) 11 LD_FLAGS := "-w $(shell bash $(GARDENER_HACK_DIR)/get-build-ld-flags.sh k8s.io/component-base $(REPO_ROOT)/VERSION $(EXTENSION_PREFIX))" 12 LEADER_ELECTION := false 13 IGNORE_OPERATION_ANNOTATION := true 14 15 WEBHOOK_CONFIG_PORT := 8443 16 WEBHOOK_CONFIG_MODE := url 17 WEBHOOK_CONFIG_URL := host.docker.internal:$(WEBHOOK_CONFIG_PORT) 18 EXTENSION_NAMESPACE := 19 20 WEBHOOK_PARAM := --webhook-config-url=$(WEBHOOK_CONFIG_URL) 21 ifeq ($(WEBHOOK_CONFIG_MODE), service) 22 WEBHOOK_PARAM := --webhook-config-namespace=$(EXTENSION_NAMESPACE) 23 endif 24 25 ifneq ($(strip $(shell git status --porcelain 2>/dev/null)),) 26 EFFECTIVE_VERSION := $(EFFECTIVE_VERSION)-dirty 27 endif 28 29 ######################################### 30 # Tools # 31 ######################################### 32 33 TOOLS_DIR := $(HACK_DIR)/tools 34 include $(GARDENER_HACK_DIR)/tools.mk 35 36 ######################################### 37 # Rules for local development scenarios # 38 ######################################### 39 40 .PHONY: start 41 start: 42 @LEADER_ELECTION_NAMESPACE=garden GO111MODULE=on go run \ 43 -ldflags $(LD_FLAGS) \ 44 ./cmd/$(EXTENSION_PREFIX)-$(NAME) \ 45 --config-file=./example/00-componentconfig.yaml \ 46 --ignore-operation-annotation=$(IGNORE_OPERATION_ANNOTATION) \ 47 --leader-election=$(LEADER_ELECTION) \ 48 --webhook-config-server-host=0.0.0.0 \ 49 --webhook-config-server-port=$(WEBHOOK_CONFIG_PORT) \ 50 --webhook-config-mode=$(WEBHOOK_CONFIG_MODE) \ 51 --gardener-version="v1.39.0" \ 52 $(WEBHOOK_PARAM) 53 54 .PHONY: start-admission 55 start-admission: 56 @LEADER_ELECTION_NAMESPACE=garden GO111MODULE=on go run \ 57 -ldflags $(LD_FLAGS) \ 58 ./cmd/$(EXTENSION_PREFIX)-$(ADMISSION_NAME) \ 59 --webhook-config-server-host=0.0.0.0 \ 60 --webhook-config-server-port=9443 \ 61 --webhook-config-cert-dir=./example/admission-ironcore-certs 62 63 ################################################################# 64 # Rules related to binary build, Docker image build and release # 65 ################################################################# 66 67 .PHONY: install 68 install: 69 @LD_FLAGS=$(LD_FLAGS) EFFECTIVE_VERSION=$(EFFECTIVE_VERSION) \ 70 bash $(GARDENER_HACK_DIR)/install.sh ./... 71 72 .PHONY: docker-login 73 docker-login: 74 @gcloud auth activate-service-account --key-file .kube-secrets/gcr/gcr-readwrite.json 75 76 .PHONY: docker-images 77 docker-images: 78 @docker build --build-arg EFFECTIVE_VERSION=$(EFFECTIVE_VERSION) -t $(IMAGE_PREFIX)/$(NAME):$(VERSION) -t $(IMAGE_PREFIX)/$(NAME):latest -f Dockerfile -m 6g --target $(EXTENSION_PREFIX)-$(NAME) . 79 @docker build --build-arg EFFECTIVE_VERSION=$(EFFECTIVE_VERSION) -t $(IMAGE_PREFIX)/$(ADMISSION_NAME):$(VERSION) -t $(IMAGE_PREFIX)/$(ADMISSION_NAME):latest -f Dockerfile -m 6g --target $(EXTENSION_PREFIX)-$(ADMISSION_NAME) . 80 81 ##################################################################### 82 # Rules for verification, formatting, linting, testing and cleaning # 83 ##################################################################### 84 85 .PHONY: tidy 86 tidy: 87 @GO111MODULE=on go mod tidy 88 @cp $(GARDENER_HACK_DIR)/cherry-pick-pull.sh $(HACK_DIR)/cherry-pick-pull.sh && chmod +xw $(HACK_DIR)/cherry-pick-pull.sh 89 90 .PHONY: clean 91 clean: 92 @$(shell find ./example -type f -name "controller-registration.yaml" -exec rm '{}' \;) 93 @bash $(GARDENER_HACK_DIR)/clean.sh ./cmd/... ./pkg/... ./test/... 94 95 .PHONY: check-generate 96 check-generate: 97 @bash $(GARDENER_HACK_DIR)/check-generate.sh $(REPO_ROOT) 98 99 .PHONY: add-license 100 add-license: $(GO_ADD_LICENSE) ## Add license headers to all go files. 101 find . -name '*.go' -exec $(GO_ADD_LICENSE) -f hack/license-header.txt {} + 102 103 .PHONY: check-license 104 check-license: $(GO_ADD_LICENSE) ## Check that every file has a license header present. 105 find . -name '*.go' -exec $(GO_ADD_LICENSE) -check -c 'IronCore authors' {} + 106 107 .PHONY: check 108 check: $(GOIMPORTS) $(GOLANGCI_LINT) $(MOCKGEN) 109 @REPO_ROOT=$(REPO_ROOT) bash $(GARDENER_HACK_DIR)/check.sh --golangci-lint-config=./.golangci.yaml ./cmd/... ./pkg/... ./test/... 110 @REPO_ROOT=$(REPO_ROOT) bash $(GARDENER_HACK_DIR)/check-charts.sh ./charts 111 112 .PHONY: generate 113 generate: deepcopy-gen defaulter-gen conversion-gen $(CONTROLLER_GEN) $(HELM) $(MOCKGEN) $(YQ) $(VGOPATH) 114 @GOPATH=$(GOPATH) VGOPATH=$(VGOPATH) \ 115 MOCKGEN=$(MOCKGEN) \ 116 DEEPCOPY_GEN=$(DEEPCOPY_GEN) \ 117 DEFAULTER_GEN=$(DEFAULTER_GEN) \ 118 CONVERSION_GEN=$(CONVERSION_GEN) \ 119 REPO_ROOT=$(REPO_ROOT) \ 120 GARDENER_HACK_DIR=$(GARDENER_HACK_DIR) \ 121 bash $(GARDENER_HACK_DIR)/generate-sequential.sh ./charts/... ./cmd/... ./example/... ./pkg/... 122 $(MAKE) format 123 @GO111MODULE=on go mod tidy 124 125 .PHONY: format 126 format: $(GOIMPORTS) $(GOIMPORTSREVISER) 127 @bash $(GARDENER_HACK_DIR)/format.sh ./cmd ./pkg ./test 128 129 .PHONY: test 130 test: envtest ## Run tests. 131 KUBEBUILDER_ASSETS="$(shell $(ENVTEST) use $(ENVTEST_K8S_VERSION) -p path)" go test ./... -coverprofile cover.out 132 133 .PHONY: test-cov 134 test-cov: 135 @bash $(GARDENER_HACK_DIR)/test-cover.sh ./cmd/... ./pkg/... 136 137 .PHONY: test-clean 138 test-clean: 139 @bash $(GARDENER_HACK_DIR)/hack/test-cover-clean.sh 140 141 .PHONY: verify 142 verify: check format test 143 144 .PHONY: verify-extended 145 verify-extended: check-generate check format test-cov test-clean 146 147 .PHONY: docs 148 docs: $(GEN_CRD_API_REFERENCE_DOCS) ## Run go generate to generate API reference documentation. 149 $(GEN_CRD_API_REFERENCE_DOCS) -api-dir ./pkg/apis/ironcore/v1alpha1 -config ./hack/api-reference/api.json -template-dir ./hack/api-reference/template -out-file ./hack/api-reference/api.md 150 $(GEN_CRD_API_REFERENCE_DOCS) -api-dir ./pkg/apis/config/v1alpha1 -config ./hack/api-reference/config.json -template-dir ./hack/api-reference/template -out-file ./hack/api-reference/config.md 151 152 .PHONY: verify 153 verify: check format test 154 155 .PHONY: verify-extended 156 verify-extended: check-generate check format test-cov test-clean 157 158 ##@ Tools 159 160 ## Location to install dependencies to 161 LOCALBIN ?= $(shell pwd)/bin 162 $(LOCALBIN): 163 mkdir -p $(LOCALBIN) 164 165 ## Tool Binaries 166 DEEPCOPY_GEN ?= $(LOCALBIN)/deepcopy-gen 167 CONVERSION_GEN ?= $(LOCALBIN)/conversion-gen 168 DEFAULTER_GEN ?= $(LOCALBIN)/defaulter-gen 169 ENVTEST ?= $(LOCALBIN)/setup-envtest 170 171 ## Tool Versions 172 CODE_GENERATOR_VERSION ?= v0.28.4 173 174 # ENVTEST_K8S_VERSION refers to the version of kubebuilder assets to be downloaded by envtest binary. 175 ENVTEST_K8S_VERSION = 1.28.0 176 177 .PHONY: envtest 178 envtest: $(ENVTEST) ## Download envtest-setup locally if necessary. 179 $(ENVTEST): $(LOCALBIN) 180 test -s $(LOCALBIN)/setup-envtest || GOBIN=$(LOCALBIN) go install sigs.k8s.io/controller-runtime/tools/setup-envtest@latest 181 182 .PHONY: deepcopy-gen 183 deepcopy-gen: $(DEEPCOPY_GEN) ## Download deepcopy-gen locally if necessary. 184 $(DEEPCOPY_GEN): $(LOCALBIN) 185 test -s $(LOCALBIN)/deepcopy-gen || GOBIN=$(LOCALBIN) go install k8s.io/code-generator/cmd/deepcopy-gen@$(CODE_GENERATOR_VERSION) 186 187 .PHONY: defaulter-gen 188 defaulter-gen: $(DEFAULTER_GEN) ## Download defaulter-gen locally if necessary. 189 $(DEFAULTER_GEN): $(LOCALBIN) 190 test -s $(LOCALBIN)/defaulter-gen || GOBIN=$(LOCALBIN) go install k8s.io/code-generator/cmd/defaulter-gen@$(CODE_GENERATOR_VERSION) 191 192 .PHONY: conversion-gen 193 conversion-gen: $(CONVERSION_GEN) ## Download conversion-gen locally if necessary. 194 $(CONVERSION_GEN): $(LOCALBIN) 195 test -s $(LOCALBIN)/conversion-gen || GOBIN=$(LOCALBIN) go install k8s.io/code-generator/cmd/conversion-gen@$(CODE_GENERATOR_VERSION)