Makefile 6.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140
  1. MAKEFLAGS += --warn-undefined-variables
  2. SHELL := /usr/bin/env bash
  3. .SHELLFLAGS := -euo pipefail -c
  4. KIND_IMG ?= kindest/node:v1.33.4@sha256:25a6018e48dfcaee478f4a59af81157a437f15e6e140bf103f85a2e7cd0cbbf2
  5. KIND_CLUSTER_NAME ?= external-secrets
  6. KIND_CONTEXT ?= kind-$(KIND_CLUSTER_NAME)
  7. DOCKER_BUILD_ARGS ?=
  8. SKIP_PROVIDER_KUBERNETES_BUILD ?= false
  9. export E2E_IMAGE_NAME ?= ghcr.io/external-secrets/external-secrets-e2e
  10. export GINKGO_LABELS ?= !managed && !v2
  11. export V2_GINKGO_LABELS ?= !managed && v2
  12. export TEST_SUITES ?= provider generator flux argocd
  13. export V2_TEST_SUITES ?= provider
  14. export GOCACHE ?= $(CURDIR)/.cache/go-build
  15. export GOMODCACHE ?= $(CURDIR)/.cache/go-mod
  16. export OCI_IMAGE_NAME = ghcr.io/external-secrets/external-secrets
  17. export IMAGE_NAME ?= $(OCI_IMAGE_NAME)
  18. TEST_V2_PROVIDER_KUBERNETES_BUILD_CMD = $(MAKE) -C ../ docker.build.provider.kubernetes VERSION=$(VERSION) ARCH=amd64 DOCKER_BUILD_ARGS="${DOCKER_BUILD_ARGS} --build-arg TARGETARCH=amd64 --build-arg TARGETOS=linux"
  19. TEST_V2_PROVIDER_AWS_BUILD_CMD = $(MAKE) -C ../ docker.build.provider.aws VERSION=$(VERSION) ARCH=amd64 DOCKER_BUILD_ARGS="${DOCKER_BUILD_ARGS} --build-arg TARGETARCH=amd64 --build-arg TARGETOS=linux"
  20. TEST_V2_PROVIDER_FAKE_BUILD_CMD = $(MAKE) -C ../ docker.build.provider.fake VERSION=$(VERSION) ARCH=amd64 DOCKER_BUILD_ARGS="${DOCKER_BUILD_ARGS} --build-arg TARGETARCH=amd64 --build-arg TARGETOS=linux"
  21. ifeq ($(shell git tag),)
  22. export VERSION ?= $(shell echo "v0.0.0-$$(git rev-list HEAD --count)-g$$(git describe --dirty --always)" | sed 's/-/./2' | sed 's/-/./2')
  23. else
  24. export VERSION ?= $(shell git describe --dirty --always --tags --exclude 'helm*' | sed 's/-/./2' | sed 's/-/./2')
  25. endif
  26. start-kind: ## Start kind cluster
  27. @if kind get clusters | grep -qx "$(KIND_CLUSTER_NAME)"; then \
  28. kind export kubeconfig --name "$(KIND_CLUSTER_NAME)"; \
  29. if kubectl --context "$(KIND_CONTEXT)" --request-timeout=5s get --raw=/readyz >/dev/null 2>&1; then \
  30. echo "kind cluster $(KIND_CLUSTER_NAME) is ready"; \
  31. else \
  32. echo "kind cluster $(KIND_CLUSTER_NAME) exists but is unhealthy, recreating"; \
  33. kind delete cluster --name "$(KIND_CLUSTER_NAME)"; \
  34. kind create cluster \
  35. --name "$(KIND_CLUSTER_NAME)" \
  36. --config kind.yaml \
  37. --retain \
  38. --image "$(KIND_IMG)"; \
  39. fi; \
  40. else \
  41. kind create cluster \
  42. --name "$(KIND_CLUSTER_NAME)" \
  43. --config kind.yaml \
  44. --retain \
  45. --image "$(KIND_IMG)"; \
  46. fi
  47. kind export kubeconfig --name "$(KIND_CLUSTER_NAME)"
  48. stop-kind: ## Stop kind cluster
  49. kind delete cluster \
  50. --name "$(KIND_CLUSTER_NAME)" \
  51. test: start-kind e2e-image ## Run e2e tests against current kube context
  52. $(MAKE) -C ../ docker.build.controller.e2e \
  53. IMAGE_NAME=$(OCI_IMAGE_NAME) \
  54. VERSION=$(VERSION) \
  55. ARCH=amd64 \
  56. DOCKER_BUILD_ARGS="${DOCKER_BUILD_ARGS} --build-arg TARGETARCH=amd64 --build-arg TARGETOS=linux"
  57. kind load docker-image --name="$(KIND_CLUSTER_NAME)" $(OCI_IMAGE_NAME):$(VERSION)
  58. kind load docker-image --name="$(KIND_CLUSTER_NAME)" $(E2E_IMAGE_NAME):$(VERSION)
  59. KUBECTL_CONTEXT="$(KIND_CONTEXT)" E2E_SKIP_HELM_DEPENDENCY_UPDATE="true" ./run.sh
  60. test.v2: start-kind e2e-image ## Run v2 e2e tests against current kube context
  61. $(MAKE) -C ../ docker.build.controller.e2e \
  62. IMAGE_NAME=$(IMAGE_NAME) \
  63. VERSION=$(VERSION) \
  64. ARCH=amd64 \
  65. DOCKER_BUILD_ARGS="${DOCKER_BUILD_ARGS} --build-arg TARGETARCH=amd64 --build-arg TARGETOS=linux"
  66. $(if $(filter true,$(SKIP_PROVIDER_KUBERNETES_BUILD)),,$(TEST_V2_PROVIDER_KUBERNETES_BUILD_CMD))
  67. $(TEST_V2_PROVIDER_AWS_BUILD_CMD)
  68. $(TEST_V2_PROVIDER_FAKE_BUILD_CMD)
  69. ifneq ($(IMAGE_NAME),$(OCI_IMAGE_NAME))
  70. $(MAKE) -C ../ docker.build.controller.e2e \
  71. IMAGE_NAME=$(OCI_IMAGE_NAME) \
  72. VERSION=$(VERSION) \
  73. ARCH=amd64 \
  74. DOCKER_BUILD_ARGS="${DOCKER_BUILD_ARGS} --build-arg TARGETARCH=amd64 --build-arg TARGETOS=linux"
  75. endif
  76. kind load docker-image --name="$(KIND_CLUSTER_NAME)" $(IMAGE_NAME):$(VERSION)
  77. ifneq ($(IMAGE_NAME),$(OCI_IMAGE_NAME))
  78. kind load docker-image --name="$(KIND_CLUSTER_NAME)" $(OCI_IMAGE_NAME):$(VERSION)
  79. endif
  80. kind load docker-image --name="$(KIND_CLUSTER_NAME)" $(E2E_IMAGE_NAME):$(VERSION)
  81. kind load docker-image --name="$(KIND_CLUSTER_NAME)" ghcr.io/external-secrets/provider-kubernetes:$(VERSION)
  82. kind load docker-image --name="$(KIND_CLUSTER_NAME)" ghcr.io/external-secrets/provider-aws:$(VERSION)
  83. kind load docker-image --name="$(KIND_CLUSTER_NAME)" ghcr.io/external-secrets/provider-fake:$(VERSION)
  84. ifeq ($(CI),true)
  85. docker system prune --all --force --volumes
  86. endif
  87. KUBECTL_CONTEXT="$(KIND_CONTEXT)" GINKGO_LABELS="$(V2_GINKGO_LABELS)" E2E_PROVIDER_MODE="v2" TEST_SUITES="$(V2_TEST_SUITES)" E2E_SKIP_HELM_DEPENDENCY_UPDATE="true" ./run.sh
  88. test.v2.operational: ## Run focused operational v2 e2e tests
  89. $(MAKE) test.v2 V2_GINKGO_LABELS='v2 && operational && fake' V2_TEST_SUITES='provider'
  90. test.managed: e2e-image ## Run e2e tests against current kube context
  91. $(MAKE) -C ../ docker.build \
  92. VERSION=$(VERSION) \
  93. ARCH=amd64 \
  94. DOCKER_BUILD_ARGS="${DOCKER_BUILD_ARGS} --build-arg TARGETARCH=amd64 --build-arg TARGETOS=linux"
  95. $(MAKE) -C ../ docker.build \
  96. IMAGE_NAME=$(OCI_IMAGE_NAME) \
  97. VERSION=$(VERSION) \
  98. ARCH=amd64 \
  99. DOCKER_BUILD_ARGS="${DOCKER_BUILD_ARGS} --build-arg TARGETARCH=amd64 --build-arg TARGETOS=linux"
  100. $(MAKE) -C ../ docker.push \
  101. VERSION=$(VERSION)
  102. $(MAKE) -C ../ docker.push \
  103. IMAGE_NAME=$(OCI_IMAGE_NAME) \
  104. VERSION=$(VERSION)
  105. $(MAKE) -C ../ docker.push \
  106. IMAGE_NAME=$(E2E_IMAGE_NAME) \
  107. VERSION=$(VERSION)
  108. E2E_SKIP_HELM_DEPENDENCY_UPDATE="true" ./run.sh
  109. e2e-bin: install-ginkgo
  110. GOWORK=off CGO_ENABLED=0 ginkgo build ./suites/...
  111. e2e-image: e2e-bin
  112. -rm -rf ./k8s/deploy
  113. mkdir -p k8s
  114. $(MAKE) -C ../ helm.generate
  115. helm dependency build ../deploy/charts/external-secrets
  116. cp -r ../deploy ./k8s
  117. docker build $(DOCKER_BUILD_ARGS) -t $(E2E_IMAGE_NAME):$(VERSION) -f Dockerfile ..
  118. GINKGO_VERSION := $(shell grep 'github.com/onsi/ginkgo/v2' go.mod | awk '{print $$2}')
  119. install-ginkgo:
  120. @echo "Installing ginkgo version $(GINKGO_VERSION) from go.mod"
  121. GOWORK=off go install github.com/onsi/ginkgo/v2/ginkgo@$(GINKGO_VERSION)
  122. help: ## displays this help message
  123. @awk 'BEGIN {FS = ":.*?## "} /^[a-zA-Z_\/-]+:.*?## / {printf "\033[34m%-18s\033[0m %s\n", $$1, $$2}' $(MAKEFILE_LIST) | \
  124. sort | \
  125. grep -v '#'