# Image URL to use all building/pushing image targetsIMG ?= controller:latest# Get the currently used golang install path (in GOPATH/bin, unless GOBIN is set)ifeq (,$(shell go env GOBIN))GOBIN=$(shell go env GOPATH)/binelseGOBIN=$(shell go env GOBIN)endif# gitVERSION = $(shell git describe --tags --always)GIT_BRANCH = $(shell git rev-parse --abbrev-ref HEAD)#GIT_COMMIT = $(shell git rev-parse --short=7 HEAD)GIT_COMMIT = $(shell git rev-parse HEAD)BUILD_TIME = $(shell date +"%Y-%m-%d %H:%M:%S")define ldflags"-X 'github.com/greatsql-sigs/greatsql-operator/interanl/pkg/version.Version=${VERSION}' \-X 'github.com/greatsql-sigs/greatsql-operator/interanl/pkg/version.GitBranch=${GIT_BRANCH}' \-X 'github.com/greatsql-sigs/greatsql-operator/interanl/pkg/version.GitCommit=${GIT_COMMIT}' \-X 'github.com/greatsql-sigs/greatsql-operator/interanl/pkg/version.BuildTime=${BUILD_TIME}'"endef# CONTAINER_TOOL defines the container tool to be used for building images.# Be aware that the target commands are only tested with Docker which is# scaffolded by default. However, you might want to replace it to use other# tools. (i.e. podman)CONTAINER_TOOL ?= docker# Setting SHELL to bash allows bash commands to be executed by recipes.# Options are set to exit when a recipe line exits non-zero or a piped command fails.SHELL = /usr/bin/env bash -o pipefail.SHELLFLAGS = -ec.PHONY: allall: build##@ General# The help target prints out all targets with their descriptions organized# beneath their categories. The categories are represented by '##@' and the# target descriptions by '##'. The awk command is responsible for reading the# entire set of makefiles included in this invocation, looking for lines of the# file as xyz: ## something, and then pretty-format the target and help. Then,# if there's a line with ##@ something, that gets pretty-printed as a category.# More info on the usage of ANSI control characters for terminal formatting:# https://en.wikipedia.org/wiki/ANSI_escape_code#SGR_parameters# More info on the awk command:# http://linuxcommand.org/lc3_adv_awk.php.PHONY: helphelp: ## Display this help.@awk 'BEGIN {FS = ":.*##"; printf "\nUsage:\n make 0円33[36m<target>0円33[0m\n"} /^[a-zA-Z_0-9-]+:.*?##/ { printf " 0円33[36m%-15s0円33[0m %s\n", $1ドル, $2ドル } /^##@/ { printf "\n0円33[1m%s0円33[0m\n", substr($0ドル, 5) } ' $(MAKEFILE_LIST)##@ Development.PHONY: manifestsmanifests: controller-gen ## Generate WebhookConfiguration, ClusterRole and CustomResourceDefinition objects.$(CONTROLLER_GEN) rbac:roleName=manager-role crd webhook paths="./..." output:crd:artifacts:config=config/crd/bases.PHONY: generategenerate: controller-gen ## Generate code containing DeepCopy, DeepCopyInto, and DeepCopyObject method implementations.$(CONTROLLER_GEN) object:headerFile="hack/boilerplate.go.txt" paths="./...".PHONY: fmtfmt: ## Run go fmt against code.go fmt ./....PHONY: vetvet: ## Run go vet against code.go vet ./....PHONY: testtest: manifests generate fmt vet setup-envtest ## Run tests.KUBEBUILDER_ASSETS="$(shell $(ENVTEST) use $(ENVTEST_K8S_VERSION) --bin-dir $(LOCALBIN) -p path)" go test $$(go list ./... | grep -v /e2e) -coverprofile cover.out# TODO(user): To use a different vendor for e2e tests, modify the setup under 'tests/e2e'.# The default setup assumes Kind is pre-installed and builds/loads the Manager Docker image locally.# CertManager is installed by default; skip with:# - CERT_MANAGER_INSTALL_SKIP=true.PHONY: test-e2etest-e2e: manifests generate fmt vet ## Run the e2e tests. Expected an isolated environment using Kind.@command -v $(KIND) >/dev/null 2>&1 || { \echo "Kind is not installed. Please install Kind manually."; \exit 1; \}@$(KIND) get clusters | grep -q 'kind' || { \echo "No Kind cluster is running. Please start a Kind cluster before running the e2e tests."; \exit 1; \}go test ./test/e2e/ -v -ginkgo.v.PHONY: lintlint: golangci-lint ## Run golangci-lint linter$(GOLANGCI_LINT) run.PHONY: lint-fixlint-fix: golangci-lint ## Run golangci-lint linter and perform fixes$(GOLANGCI_LINT) run --fix.PHONY: lint-configlint-config: golangci-lint ## Verify golangci-lint linter configuration$(GOLANGCI_LINT) config verify##@ Build.PHONY: buildbuild: manifests generate fmt vet ## Build manager binary.go build -ldflags ${ldflags} -o bin/operator-controller cmd/main.go.PHONY: runrun: manifests generate fmt vet ## Run a controller from your host.go run ./cmd/main.go# If you wish to build the manager image targeting other platforms you can use the --platform flag.# (i.e. docker build --platform linux/arm64). However, you must enable docker buildKit for it.# More info: https://docs.docker.com/develop/develop-images/build_enhancements/.PHONY: docker-builddocker-build: ## Build docker image with the manager.$(CONTAINER_TOOL) build -t ${IMG} ..PHONY: docker-pushdocker-push: ## Push docker image with the manager.$(CONTAINER_TOOL) push ${IMG}# PLATFORMS defines the target platforms for the manager image be built to provide support to multiple# architectures. (i.e. make docker-buildx IMG=myregistry/mypoperator:0.0.1). To use this option you need to:# - be able to use docker buildx. More info: https://docs.docker.com/build/buildx/# - have enabled BuildKit. More info: https://docs.docker.com/develop/develop-images/build_enhancements/# - be able to push the image to your registry (i.e. if you do not set a valid value via IMG=<myregistry/image:<tag>> then the export will fail)# To adequately provide solutions that are compatible with multiple platforms, you should consider using this option.PLATFORMS ?= linux/arm64,linux/amd64.PHONY: docker-buildxdocker-buildx: ## Build and push docker image for the manager for cross-platform support# Setup QEMU for cross-platform emulation$(CONTAINER_TOOL) run --rm --privileged tonistiigi/binfmt --install all# copy existing Dockerfile and insert --platform=${BUILDPLATFORM} into Dockerfile.cross, and preserve the original Dockerfilesed -e '1 s/\(^FROM\)/FROM --platform=\$$\{BUILDPLATFORM\}/; t' -e ' 1,// s//FROM --platform=\$$\{BUILDPLATFORM\}/' Dockerfile > Dockerfile.cross- $(CONTAINER_TOOL) buildx create --name greatsql-operator-builder$(CONTAINER_TOOL) buildx use greatsql-operator-builder- $(CONTAINER_TOOL) buildx build --push --platform=$(PLATFORMS) --provenance=false --tag ${IMG} -f Dockerfile.cross .- $(CONTAINER_TOOL) buildx rm greatsql-operator-builderrm Dockerfile.cross.PHONY: build-installerbuild-installer: manifests generate kustomize ## Generate a consolidated YAML with CRDs and deployment.mkdir -p distcd config/manager && $(KUSTOMIZE) edit set image controller=${IMG}$(KUSTOMIZE) build config/default > dist/install.yaml##@ Helm.PHONY: helm-packagehelm-package: ## Package dist/chart into a .tgz in dist/@command -v helm >/dev/null 2>&1 || { echo "helm is required (https://helm.sh/docs/intro/install/)"; exit 1; }mkdir -p disthelm package dist/chart -d dist##@ Deploymentifndef ignore-not-foundignore-not-found = falseendif.PHONY: installinstall: manifests kustomize ## Install CRDs into the K8s cluster specified in ~/.kube/config.$(KUSTOMIZE) build config/crd | $(KUBECTL) apply -f -.PHONY: uninstalluninstall: manifests 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: deploydeploy: manifests kustomize ## 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: undeployundeploy: kustomize ## 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 -##@ Dependencies## Location to install dependencies toLOCALBIN ?= $(shell pwd)/bin$(LOCALBIN):mkdir -p $(LOCALBIN)## Tool BinariesKUBECTL ?= kubectlKIND ?= kindKUSTOMIZE ?= $(LOCALBIN)/kustomizeCONTROLLER_GEN ?= $(LOCALBIN)/controller-genENVTEST ?= $(LOCALBIN)/setup-envtestGOLANGCI_LINT = $(LOCALBIN)/golangci-lint## Tool VersionsKUSTOMIZE_VERSION ?= v5.6.0CONTROLLER_TOOLS_VERSION ?= v0.17.2#ENVTEST_VERSION is the version of controller-runtime release branch to fetch the envtest setup script (i.e. release-0.20)ENVTEST_VERSION ?= $(shell go list -m -f "{{ .Version }}" sigs.k8s.io/controller-runtime | awk -F'[v.]' '{printf "release-%d.%d", $2,ドル $3ドル}')#ENVTEST_K8S_VERSION is the version of Kubernetes to use for setting up ENVTEST binaries (i.e. 1.31)ENVTEST_K8S_VERSION ?= $(shell go list -m -f "{{ .Version }}" k8s.io/api | awk -F'[v.]' '{printf "1.%d", $3ドル}')GOLANGCI_LINT_VERSION ?= v1.63.4.PHONY: kustomizekustomize: $(KUSTOMIZE) ## Download kustomize locally if necessary.$(KUSTOMIZE): $(LOCALBIN)$(call go-install-tool,$(KUSTOMIZE),sigs.k8s.io/kustomize/kustomize/v5,$(KUSTOMIZE_VERSION)).PHONY: controller-gencontroller-gen: $(CONTROLLER_GEN) ## Download controller-gen locally if necessary.$(CONTROLLER_GEN): $(LOCALBIN)$(call go-install-tool,$(CONTROLLER_GEN),sigs.k8s.io/controller-tools/cmd/controller-gen,$(CONTROLLER_TOOLS_VERSION)).PHONY: setup-envtestsetup-envtest: envtest ## Download the binaries required for ENVTEST in the local bin directory.@echo "Setting up envtest binaries for Kubernetes version $(ENVTEST_K8S_VERSION)..."@$(ENVTEST) use $(ENVTEST_K8S_VERSION) --bin-dir $(LOCALBIN) -p path || { \echo "Error: Failed to set up envtest binaries for version $(ENVTEST_K8S_VERSION)."; \exit 1; \}.PHONY: envtestenvtest: $(ENVTEST) ## Download setup-envtest locally if necessary.$(ENVTEST): $(LOCALBIN)$(call go-install-tool,$(ENVTEST),sigs.k8s.io/controller-runtime/tools/setup-envtest,$(ENVTEST_VERSION)).PHONY: golangci-lintgolangci-lint: $(GOLANGCI_LINT) ## Download golangci-lint locally if necessary.$(GOLANGCI_LINT): $(LOCALBIN)$(call go-install-tool,$(GOLANGCI_LINT),github.com/golangci/golangci-lint/cmd/golangci-lint,$(GOLANGCI_LINT_VERSION))# go-install-tool will 'go install' any package with custom target and name of binary, if it doesn't exist# 1ドル - target path with name of binary# 2ドル - package url which can be installed# 3ドル - specific version of packagedefine go-install-tool@[ -f "$(1)-$(3)" ] || { \set -e; \package=$(2)@$(3) ;\echo "Downloading $${package}" ;\rm -f $(1) || true ;\GOBIN=$(LOCALBIN) go install $${package} ;\mv $(1) $(1)-$(3) ;\} ;\ln -sf $(1)-$(3) $(1)endef
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。