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)