name: e2e-arm64 on: workflow_dispatch: push: branches: [ main, update-components, e2e-arm64* ] permissions: contents: read jobs: e2e-arm64-kubernetes: # Hosted on Equinix # Docs: https://github.com/fluxcd/flux2/tree/main/.github/runners runs-on: [self-hosted, Linux, ARM64, equinix] strategy: matrix: # Keep this list up-to-date with https://endoflife.date/kubernetes KUBERNETES_VERSION: [ 1.24.11, 1.25.7, 1.26.2 ] steps: - name: Checkout uses: actions/checkout@ac593985615ec2ede58e132d2e21d2b1cbd6127c # v3.3.0 - name: Setup Go uses: actions/setup-go@6edd4406fa81c3da01a34fa6f6343087c207a568 # v3.5.0 with: go-version: 1.20.x - name: Prepare id: prep run: | ID=${GITHUB_SHA:0:7}-${{ matrix.KUBERNETES_VERSION }}-$(date +%s) echo "CLUSTER=arm64-${ID}" >> $GITHUB_OUTPUT - name: Build run: | make build - name: Setup Kubernetes Kind run: | kind create cluster \ --wait 5m \ --name ${{ steps.prep.outputs.CLUSTER }} \ --kubeconfig=/tmp/${{ steps.prep.outputs.CLUSTER }} \ --image=kindest/node:v${{ matrix.KUBERNETES_VERSION }} - name: Run e2e tests run: TEST_KUBECONFIG=/tmp/${{ steps.prep.outputs.CLUSTER }} make e2e - name: Run multi-tenancy tests env: KUBECONFIG: /tmp/${{ steps.prep.outputs.CLUSTER }} run: | ./bin/flux install ./bin/flux create source git flux-system \ --interval=15m \ --url=https://github.com/fluxcd/flux2-multi-tenancy \ --branch=main \ --ignore-paths="./clusters/**/flux-system/" ./bin/flux create kustomization flux-system \ --interval=15m \ --source=flux-system \ --path=./clusters/staging kubectl -n flux-system wait kustomization/tenants --for=condition=ready --timeout=5m kubectl -n apps wait kustomization/dev-team --for=condition=ready --timeout=1m kubectl -n apps wait helmrelease/podinfo --for=condition=ready --timeout=1m - name: Run monitoring tests # Keep this test in sync with https://fluxcd.io/flux/guides/monitoring/ env: KUBECONFIG: /tmp/${{ steps.prep.outputs.CLUSTER }} run: | ./bin/flux create source git flux-monitoring \ --interval=30m \ --url=https://github.com/fluxcd/flux2 \ --branch=${GITHUB_REF#refs/heads/} ./bin/flux create kustomization kube-prometheus-stack \ --interval=1h \ --prune \ --source=flux-monitoring \ --path="./manifests/monitoring/kube-prometheus-stack" \ --health-check-timeout=5m \ --wait ./bin/flux create kustomization monitoring-config \ --depends-on=kube-prometheus-stack \ --interval=1h \ --prune=true \ --source=flux-monitoring \ --path="./manifests/monitoring/monitoring-config" \ --health-check-timeout=1m \ --wait kubectl -n flux-system wait kustomization/kube-prometheus-stack --for=condition=ready --timeout=5m kubectl -n flux-system wait kustomization/monitoring-config --for=condition=ready --timeout=5m kubectl -n monitoring wait helmrelease/kube-prometheus-stack --for=condition=ready --timeout=1m - name: Debug failure if: failure() env: KUBECONFIG: /tmp/${{ steps.prep.outputs.CLUSTER }} run: | kubectl -n flux-system get all kubectl -n flux-system describe po kubectl -n flux-system logs deploy/source-controller kubectl -n flux-system logs deploy/kustomize-controller - name: Cleanup if: always() run: | kind delete cluster --name ${{ steps.prep.outputs.CLUSTER }} rm /tmp/${{ steps.prep.outputs.CLUSTER }}