Makefile 6.5 KB

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