kuma

Форк
0
/
dev.mk 
124 строки · 5.1 Кб
1
KUMA_DIR ?= .
2
TOOLS_DIR = $(KUMA_DIR)/tools
3
# Important to use `:=` to only run the script once per make invocation!
4
BUILD_INFO := $(shell $(TOOLS_DIR)/releases/version.sh)
5
BUILD_INFO_VERSION = $(word 1, $(BUILD_INFO))
6
GIT_TAG = $(word 2, $(BUILD_INFO))
7
GIT_COMMIT = $(word 3, $(BUILD_INFO))
8
BUILD_DATE = $(word 4, $(BUILD_INFO))
9
ENVOY_VERSION = $(word 5, $(BUILD_INFO))
10
CI_TOOLS_VERSION = $(word 6, $(BUILD_INFO))
11
KUMA_CHARTS_URL ?= https://kumahq.github.io/charts
12
CHART_REPO_NAME ?= kuma
13
PROJECT_NAME ?= kuma
14

15
CI_TOOLS_DIR ?= ${HOME}/.kuma-dev/${PROJECT_NAME}-${CI_TOOLS_VERSION}
16
ifdef XDG_DATA_HOME
17
	CI_TOOLS_DIR := ${XDG_DATA_HOME}/kuma-dev/${PROJECT_NAME}-${CI_TOOLS_VERSION}
18
endif
19
CI_TOOLS_BIN_DIR=$(CI_TOOLS_DIR)/bin
20

21
# Change here and `make check` ensures these are used for CI
22
# Note: These are _docker image tags_
23
# If changing min version, update mk/kind.mk as well
24
K8S_MIN_VERSION = v1.23.17-k3s1
25
K8S_MAX_VERSION = v1.29.1-k3s2
26
export GO_VERSION=$(shell go mod edit -json | jq -r .Go)
27
export GOLANGCI_LINT_VERSION=v1.56.1
28
GOOS := $(shell go env GOOS)
29
GOARCH := $(shell go env GOARCH)
30

31
# A helper to protect calls that push things upstreams (.e.g docker push or github artifact publish)
32
# $(1) - the actual command to run, if ALLOW_PUSH is not set we'll prefix this with '#' to prevent execution
33
define GATE_PUSH
34
$(if $(ALLOW_PUSH),$(1), # $(1))
35
endef
36

37
# The e2e tests depend on Kind kubeconfigs being in this directory,
38
# so this is location should not be changed by developers.
39
KUBECONFIG_DIR := $(HOME)/.kube
40

41
PROTOS_DEPS_PATH=$(CI_TOOLS_DIR)/protos
42

43
CLANG_FORMAT=$(CI_TOOLS_BIN_DIR)/clang-format
44
HELM=$(CI_TOOLS_BIN_DIR)/helm
45
K3D_BIN=$(CI_TOOLS_BIN_DIR)/k3d
46
KIND=$(CI_TOOLS_BIN_DIR)/kind
47
KUBEBUILDER=$(CI_TOOLS_BIN_DIR)/kubebuilder
48
KUBEBUILDER_ASSETS=$(CI_TOOLS_BIN_DIR)
49
CONTROLLER_GEN=$(CI_TOOLS_BIN_DIR)/controller-gen
50
KUBECTL=$(CI_TOOLS_BIN_DIR)/kubectl
51
PROTOC_BIN=$(CI_TOOLS_BIN_DIR)/protoc
52
SHELLCHECK=$(CI_TOOLS_BIN_DIR)/shellcheck
53
CONTAINER_STRUCTURE_TEST=$(CI_TOOLS_BIN_DIR)/container-structure-test
54
# from go-deps
55
PROTOC_GEN_GO=$(CI_TOOLS_BIN_DIR)/protoc-gen-go
56
PROTOC_GEN_GO_GRPC=$(CI_TOOLS_BIN_DIR)/protoc-gen-go-grpc
57
PROTOC_GEN_VALIDATE=$(CI_TOOLS_BIN_DIR)/protoc-gen-validate
58
PROTOC_GEN_KUMADOC=$(CI_TOOLS_BIN_DIR)/protoc-gen-kumadoc
59
PROTOC_GEN_JSONSCHEMA=$(CI_TOOLS_BIN_DIR)/protoc-gen-jsonschema
60
GINKGO=$(CI_TOOLS_BIN_DIR)/ginkgo
61
GOLANGCI_LINT=$(CI_TOOLS_BIN_DIR)/golangci-lint
62
HELM_DOCS=$(CI_TOOLS_BIN_DIR)/helm-docs
63
KUBE_LINTER=$(CI_TOOLS_BIN_DIR)/kube-linter
64
HADOLINT=$(CI_TOOLS_BIN_DIR)/hadolint
65

66
TOOLS_DEPS_DIRS=$(KUMA_DIR)/mk/dependencies
67
TOOLS_DEPS_LOCK_FILE=mk/dependencies/deps.lock
68
TOOLS_MAKEFILE=$(KUMA_DIR)/mk/dev.mk
69

70
# Install all dependencies on tools and protobuf files
71
# We add one script per tool in the `mk/dependencies` folder. Add a VARIABLE for each binary and use this everywhere in Makefiles
72
# ideally the tool should be idempotent to make things quick to rerun.
73
# it's important that everything lands in $(CI_TOOLS_DIR) to be able to cache this folder in CI and speed up the build.
74
.PHONY: dev/tools
75
dev/tools: ## Bootstrap: Install all development tools
76
	$(TOOLS_DIR)/dev/install-dev-tools.sh $(CI_TOOLS_BIN_DIR) $(CI_TOOLS_DIR) "$(TOOLS_DEPS_DIRS)" $(TOOLS_DEPS_LOCK_FILE) $(GOOS) $(GOARCH) $(TOOLS_MAKEFILE)
77

78
.PHONY: dev/tools/clean
79
dev/tools/clean: ## Bootstrap: Remove all development tools
80
	rm -rf $(CI_TOOLS_DIR)
81

82
$(KUBECONFIG_DIR):
83
	@mkdir -p $(KUBECONFIG_DIR)
84

85
# kubectl always writes the current context into the first config file. When
86
# debugging, it's common to switch contexts and we don't want to edit the Kind
87
# config files (because then the integration tests have the wrong current
88
# context). So we create this as a place for kubectl to write the interactive
89
# current context.
90
$(KUBECONFIG_DIR)/kind-kuma-current: $(KUBECONFIG_DIR)
91
	@touch $@
92

93
# Generate a .envrc that prepends e2e test suite configs to whatever
94
# KUBECONFIG currently has, and stores CI tooling in .tools.
95
.PHONY: dev/enrc
96
dev/envrc: $(KUBECONFIG_DIR)/kind-kuma-current ## Generate .envrc
97
	@echo 'export CI_TOOLS_DIR=$$(expand_path .tools)' > .envrc
98
	@for c in $(patsubst %,$(KUBECONFIG_DIR)/kind-%-config,kuma $(K8SCLUSTERS)) $(KUBECONFIG_DIR)/kind-kuma-current ; do \
99
		echo "path_add KUBECONFIG $$c" ; \
100
	done >> .envrc
101
	@echo 'export KUBECONFIG' >> .envrc
102
	@for prog in $(BUILD_RELEASE_BINARIES) $(BUILD_TEST_BINARIES) ; do \
103
		echo "PATH_add $(BUILD_ARTIFACTS_DIR)/$$prog" ; \
104
	done >> .envrc
105
	@echo 'export KUBEBUILDER_ASSETS=$(KUBEBUILDER_ASSETS)' >> .envrc
106
	@direnv allow
107

108
.PHONY: dev/sync-demo
109
dev/sync-demo:
110
	rm app/kumactl/data/install/k8s/demo/*.yaml
111
	curl -s --fail https://raw.githubusercontent.com/kumahq/kuma-counter-demo/master/demo.yaml | \
112
		sed 's/"local"/"{{ .Zone }}"/g' | \
113
		sed 's/\([^/]\)kuma-demo/\1{{ .Namespace }}/g' \
114
		> app/kumactl/data/install/k8s/demo/demo.yaml
115
	curl -s --fail https://raw.githubusercontent.com/kumahq/kuma-counter-demo/master/gateway.yaml | \
116
		sed 's/\([^/]\)kuma-demo/\1{{ .Namespace }}/g' \
117
		> app/kumactl/data/install/k8s/demo/gateway.yaml
118

119
.PHONY: dev/set-kuma-helm-repo
120
dev/set-kuma-helm-repo:
121
	${CI_TOOLS_BIN_DIR}/helm repo add ${CHART_REPO_NAME} ${KUMA_CHARTS_URL}
122

123
.PHONY: clean
124
clean: clean/build clean/generated clean/docs ## Dev: Clean
125

Использование cookies

Мы используем файлы cookie в соответствии с Политикой конфиденциальности и Политикой использования cookies.

Нажимая кнопку «Принимаю», Вы даете АО «СберТех» согласие на обработку Ваших персональных данных в целях совершенствования нашего веб-сайта и Сервиса GitVerse, а также повышения удобства их использования.

Запретить использование cookies Вы можете самостоятельно в настройках Вашего браузера.