| ENVOY_IMPORTS := ./pkg/xds/envoy/imports.go |
| RESOURCE_GEN := $(DUBBO_DIR)/build/tools-${GOOS}-${GOARCH}/resource-gen |
| POLICY_GEN := $(DUBBO_DIR)/build/tools-${GOOS}-${GOARCH}/policy-gen/generator |
| |
| PROTO_DIRS ?= ./pkg/config ./api ./pkg/plugins |
| GO_MODULE ?= github.com/apache/dubbo-kubernetes |
| |
| HELM_VALUES_FILE ?= "deploy/charts/admin/values.yaml" |
| HELM_CRD_DIR ?= "deploy/charts/admin/crds/" |
| HELM_VALUES_FILE_POLICY_PATH ?= ".plugins.policies" |
| |
| GENERATE_OAS_PREREQUISITES ?= |
| EXTRA_GENERATE_DEPS_TARGETS ?= generate/envoy-imports |
| |
| .PHONY: clean/generated |
| clean/generated: clean/protos clean/builtin-crds clean/resources clean/policies clean/tools |
| |
| .PHONY: generate/protos |
| generate/protos: |
| find $(PROTO_DIRS) -name '*.proto' -exec $(PROTOC_GO) {} \; |
| |
| .PHONY: clean/tools |
| clean/tools: |
| rm -rf $(DUBBO_DIR)/build/tools-* |
| |
| .PHONY: clean/proto |
| clean/protos: ## Dev: Remove auto-generated Protobuf files |
| find $(PROTO_DIRS) -name '*.pb.go' -delete |
| find $(PROTO_DIRS) -name '*.pb.validate.go' -delete |
| |
| .PHONY: generate |
| generate: generate/protos $(if $(findstring ./api,$(PROTO_DIRS)),resources/type generate/builtin-crds) generate/policies generate/oas $(EXTRA_GENERATE_DEPS_TARGETS) ## Dev: Run all code generation |
| |
| $(POLICY_GEN): |
| cd $(DUBBO_DIR) && go build -o ./build/tools-${GOOS}-${GOARCH}/policy-gen/generator ./tools/policy-gen/generator/main.go |
| |
| $(RESOURCE_GEN): |
| cd $(DUBBO_DIR) && go build -o ./build/tools-${GOOS}-${GOARCH}/resource-gen ./tools/resource-gen/main.go |
| |
| .PHONY: resources/type |
| resources/type: $(RESOURCE_GEN) |
| $(RESOURCE_GEN) -package mesh -generator type > pkg/core/resources/apis/mesh/zz_generated.resources.go |
| $(RESOURCE_GEN) -package system -generator type > pkg/core/resources/apis/system/zz_generated.resources.go |
| |
| .PHONY: clean/resources |
| clean/resources: |
| find pkg -name 'zz_generated.*.go' -delete |
| |
| POLICIES_DIR := pkg/plugins/policies |
| |
| policies = $(foreach dir,$(shell find pkg/plugins/policies -maxdepth 1 -mindepth 1 -type d | grep -v -e core | sort),$(notdir $(dir))) |
| |
| generate/policies: $(addprefix generate/policy/,$(policies)) generate/policy-import generate/policy-helm ## Generate all policies written as plugins |
| |
| .PHONY: clean/policies |
| clean/policies: $(addprefix clean/policy/,$(policies)) |
| |
| # deletes all files in policy directory except *.proto, validator.go and schema.yaml |
| clean/policy/%: |
| $(shell find $(POLICIES_DIR)/$* \( -name '*.pb.go' -o -name '*.yaml' -o -name 'zz_generated.*' \) -not -path '*/testdata/*' -type f -delete) |
| @rm -fr $(POLICIES_DIR)/$*/k8s |
| |
| generate/policy/%: generate/schema/% |
| @echo "Policy $* successfully generated" |
| |
| generate/schema/%: generate/controller-gen/% |
| for version in $(foreach dir,$(wildcard $(POLICIES_DIR)/$*/api/*),$(notdir $(dir))); do \ |
| PATH=$(CI_TOOLS_BIN_DIR):$$PATH $(TOOLS_DIR)/policy-gen/crd-extract-openapi.sh $* $$version $(TOOLS_DIR) ; \ |
| done |
| |
| generate/policy-import: |
| $(TOOLS_DIR)/policy-gen/generate-policy-import.sh $(GO_MODULE) $(policies) |
| |
| generate/policy-helm: |
| PATH=$(CI_TOOLS_BIN_DIR):$$PATH $(TOOLS_DIR)/policy-gen/generate-policy-helm.sh $(HELM_VALUES_FILE) $(HELM_CRD_DIR) $(HELM_VALUES_FILE_POLICY_PATH) $(policies) |
| |
| generate/controller-gen/%: generate/dubbopolicy-gen/% |
| # touch is a fix for controller-gen complaining that there is no schema.yaml file |
| # controller-gen imports it a policy package and then the //go:embed match is triggered and causes an error |
| for version in $(foreach dir,$(wildcard $(POLICIES_DIR)/$*/api/*),$(notdir $(dir))); do \ |
| touch $(POLICIES_DIR)/$*/api/$$version/schema.yaml && \ |
| $(CONTROLLER_GEN) "crd:crdVersions=v1,ignoreUnexportedFields=true" paths="./$(POLICIES_DIR)/$*/k8s/..." output:crd:artifacts:config=$(POLICIES_DIR)/$*/k8s/crd && \ |
| $(CONTROLLER_GEN) object paths=$(POLICIES_DIR)/$*/k8s/$$version/zz_generated.types.go && \ |
| $(CONTROLLER_GEN) object paths=$(POLICIES_DIR)/$*/api/$$version/$*.go; \ |
| done |
| |
| generate/dubbopolicy-gen/%: $(POLICY_GEN) generate/dirs/% |
| $(POLICY_GEN) core-resource --plugin-dir $(POLICIES_DIR)/$* --gomodule $(GO_MODULE) && \ |
| $(POLICY_GEN) k8s-resource --plugin-dir $(POLICIES_DIR)/$* --gomodule $(GO_MODULE) && \ |
| $(POLICY_GEN) openapi --plugin-dir $(POLICIES_DIR)/$* --openapi-template-path=$(TOOLS_DIR)/policy-gen/templates/endpoints.yaml --gomodule $(GO_MODULE) && \ |
| $(POLICY_GEN) plugin-file --plugin-dir $(POLICIES_DIR)/$* --gomodule $(GO_MODULE) |
| |
| endpoints = $(foreach dir,$(shell find api/openapi/specs -type f | sort),$(basename $(dir))) |
| |
| generate/oas: $(GENERATE_OAS_PREREQUISITES) |
| for endpoint in $(endpoints); do \ |
| DEST=$${endpoint#"api/openapi/specs"}; \ |
| PATH=$(CI_TOOLS_BIN_DIR):$$PATH oapi-codegen -config api/openapi/openapi.cfg.yaml -o api/openapi/types/$$(dirname $${DEST}})/zz_generated.$$(basename $${DEST}).go $${endpoint}.yaml; \ |
| done |
| |
| generate/dirs/%: |
| for version in $(foreach dir,$(wildcard $(POLICIES_DIR)/$*/api/*),$(notdir $(dir))); do \ |
| mkdir -p $(POLICIES_DIR)/$*/api/$$version ; \ |
| mkdir -p $(POLICIES_DIR)/$*/k8s/$$version ; \ |
| mkdir -p $(POLICIES_DIR)/$*/k8s/crd ; \ |
| done |
| |
| .PHONY: generate/builtin-crds |
| generate/builtin-crds: $(RESOURCE_GEN) |
| $(RESOURCE_GEN) -package mesh -generator crd > ./pkg/plugins/resources/k8s/native/api/v1alpha1/zz_generated.mesh.go |
| $(RESOURCE_GEN) -package system -generator crd > ./pkg/plugins/resources/k8s/native/api/v1alpha1/zz_generated.system.go |
| $(CONTROLLER_GEN) "crd:crdVersions=v1" paths=./pkg/plugins/resources/k8s/native/api/... output:crd:artifacts:config=$(HELM_CRD_DIR) |
| $(CONTROLLER_GEN) object paths=./pkg/plugins/resources/k8s/native/api/... |
| |
| .PHONY: clean/builtin-crds |
| clean/builtin-crds: |
| rm -f ./deployments/charts/dubbo/crds/* |
| rm -f ./pkg/plugins/resources/k8s/native/test/config/crd/bases/* |
| |
| .PHONY: generate/envoy-imports |
| generate/envoy-imports: |
| printf 'package envoy\n\n' > ${ENVOY_IMPORTS} |
| echo '// Import all Envoy packages so protobuf are registered and are ready to used in functions such as MarshalAny.' >> ${ENVOY_IMPORTS} |
| echo '// This file is autogenerated. run "make generate/envoy-imports" to regenerate it after go-control-plane upgrade' >> ${ENVOY_IMPORTS} |
| echo 'import (' >> ${ENVOY_IMPORTS} |
| go list github.com/envoyproxy/go-control-plane/... | grep "github.com/envoyproxy/go-control-plane/envoy/" | awk '{printf "\t_ \"%s\"\n", $$1}' >> ${ENVOY_IMPORTS} |
| echo ')' >> ${ENVOY_IMPORTS} |