Makefile 5.9 KB

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