name: e2e on: workflow_dispatch: push: branches: [ 'main', 'release/**' ] pull_request: branches: [ 'main', 'release/**' ] paths-ignore: [ 'docs/**', 'rfcs/**' ] permissions: contents: read jobs: e2e-amd64-kubernetes: runs-on: group: "Default Larger Runners" labels: ubuntu-latest-16-cores services: registry: image: registry:2 ports: - 5000:5000 steps: - name: Checkout uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 - name: Setup Go uses: actions/setup-go@41dfa10bad2bb2ae585af6ee5bb4d7d973ad74ed # v5.1.0 with: go-version: 1.23.x cache-dependency-path: | **/go.sum **/go.mod - name: Setup Kubernetes uses: helm/kind-action@0025e74a8c7512023d06dc019c617aa3cf561fde # v1.10.0 with: version: v0.24.0 cluster_name: kind wait: 5s config: .github/kind/config.yaml # disable KIND-net # The versions below should target the oldest supported Kubernetes version # Keep this up-to-date with https://endoflife.date/kubernetes node_image: ghcr.io/fluxcd/kindest/node:v1.29.7-amd64 kubectl_version: v1.29.7 - name: Setup Calico for network policy run: | kubectl apply -f https://raw.githubusercontent.com/projectcalico/calico/v3.27.3/manifests/calico.yaml - name: Setup Kustomize uses: fluxcd/pkg/actions/kustomize@5bf9095331052934ae6b4585b8632c0e5b0a2106 # main - name: Run tests run: make test - name: Run e2e tests run: TEST_KUBECONFIG=$HOME/.kube/config make e2e - name: Check if working tree is dirty run: | if [[ $(git diff --stat) != '' ]]; then git diff echo 'run make test and commit changes' exit 1 fi - name: Build run: make build-dev - name: flux check --pre run: | ./bin/flux check --pre - name: flux install --manifests run: | ./bin/flux install --manifests ./manifests/install/ - name: flux create secret run: | ./bin/flux create secret git git-ssh-test \ --url ssh://git@github.com/stefanprodan/podinfo ./bin/flux create secret git git-https-test \ --url https://github.com/stefanprodan/podinfo \ --username=test --password=test ./bin/flux create secret helm helm-test \ --username=test --password=test - name: flux create source git run: | ./bin/flux create source git podinfo \ --url https://github.com/stefanprodan/podinfo \ --tag-semver=">=6.3.5" - name: flux create source git export apply run: | ./bin/flux create source git podinfo-export \ --url https://github.com/stefanprodan/podinfo \ --tag-semver=">=6.3.5" \ --export | kubectl apply -f - ./bin/flux delete source git podinfo-export --silent - name: flux get sources git run: | ./bin/flux get sources git - name: flux get sources git --all-namespaces run: | ./bin/flux get sources git --all-namespaces - name: flux create kustomization run: | ./bin/flux create kustomization podinfo \ --source=podinfo \ --path="./deploy/overlays/dev" \ --prune=true \ --interval=5m \ --health-check="Deployment/frontend.dev" \ --health-check="Deployment/backend.dev" \ --health-check-timeout=3m - name: flux trace run: | ./bin/flux trace frontend \ --kind=deployment \ --api-version=apps/v1 \ --namespace=dev - name: flux reconcile kustomization --with-source run: | ./bin/flux reconcile kustomization podinfo --with-source - name: flux get kustomizations run: | ./bin/flux get kustomizations - name: flux get kustomizations --all-namespaces run: | ./bin/flux get kustomizations --all-namespaces - name: flux suspend kustomization run: | ./bin/flux suspend kustomization podinfo - name: flux resume kustomization run: | ./bin/flux resume kustomization podinfo - name: flux export run: | ./bin/flux export source git --all ./bin/flux export kustomization --all - name: flux delete kustomization run: | ./bin/flux delete kustomization podinfo --silent - name: flux create source helm run: | ./bin/flux create source helm podinfo \ --url https://stefanprodan.github.io/podinfo - name: flux create helmrelease --source=HelmRepository/podinfo run: | ./bin/flux create hr podinfo-helm \ --target-namespace=default \ --source=HelmRepository/podinfo.flux-system \ --chart=podinfo \ --chart-version=">6.0.0 <7.0.0" - name: flux create helmrelease --source=GitRepository/podinfo run: | ./bin/flux create hr podinfo-git \ --target-namespace=default \ --source=GitRepository/podinfo \ --chart=./charts/podinfo - name: flux reconcile helmrelease --with-source run: | ./bin/flux reconcile helmrelease podinfo-git --with-source - name: flux get helmreleases run: | ./bin/flux get helmreleases - name: flux get helmreleases --all-namespaces run: | ./bin/flux get helmreleases --all-namespaces - name: flux export helmrelease run: | ./bin/flux export hr --all - name: flux delete helmrelease podinfo-helm run: | ./bin/flux delete hr podinfo-helm --silent - name: flux delete helmrelease podinfo-git run: | ./bin/flux delete hr podinfo-git --silent - name: flux delete source helm run: | ./bin/flux delete source helm podinfo --silent - name: flux delete source git run: | ./bin/flux delete source git podinfo --silent - name: flux oci artifacts run: | ./bin/flux push artifact oci://localhost:5000/fluxcd/flux:${{ github.sha }} \ --path="./manifests" \ --source="${{ github.repositoryUrl }}" \ --revision="${{ github.ref }}@sha1:${{ github.sha }}" ./bin/flux tag artifact oci://localhost:5000/fluxcd/flux:${{ github.sha }} \ --tag latest ./bin/flux list artifacts oci://localhost:5000/fluxcd/flux - name: flux oci repositories run: | ./bin/flux create source oci podinfo-oci \ --url oci://ghcr.io/stefanprodan/manifests/podinfo \ --tag-semver 6.3.x \ --interval 10m ./bin/flux create kustomization podinfo-oci \ --source=OCIRepository/podinfo-oci \ --path="./" \ --prune=true \ --interval=5m \ --target-namespace=default \ --wait=true \ --health-check-timeout=3m ./bin/flux reconcile source oci podinfo-oci ./bin/flux suspend source oci podinfo-oci ./bin/flux get sources oci ./bin/flux resume source oci podinfo-oci ./bin/flux export source oci podinfo-oci ./bin/flux delete ks podinfo-oci --silent ./bin/flux delete source oci podinfo-oci --silent - name: flux create tenant run: | ./bin/flux create tenant dev-team --with-namespace=apps ./bin/flux -n apps create source helm podinfo \ --url https://stefanprodan.github.io/podinfo ./bin/flux -n apps create hr podinfo-helm \ --source=HelmRepository/podinfo \ --chart=podinfo \ --chart-version="6.3.x" \ --service-account=dev-team - name: flux2-kustomize-helm-example run: | ./bin/flux create source git flux-system \ --url=https://github.com/fluxcd/flux2-kustomize-helm-example \ --branch=main \ --ignore-paths="./clusters/**/flux-system/" \ --recurse-submodules ./bin/flux create kustomization flux-system \ --source=flux-system \ --path=./clusters/staging kubectl -n flux-system wait kustomization/infra-controllers --for=condition=ready --timeout=5m kubectl -n flux-system wait kustomization/apps --for=condition=ready --timeout=5m kubectl -n podinfo wait helmrelease/podinfo --for=condition=ready --timeout=5m - name: flux tree run: | ./bin/flux tree kustomization flux-system | grep Service/podinfo - name: flux events run: | ./bin/flux -n flux-system events --for Kustomization/apps | grep 'HelmRelease/podinfo' ./bin/flux -n podinfo events --for HelmRelease/podinfo | grep 'podinfo.v1' - name: flux stats run: | ./bin/flux stats -A - name: flux check run: | ./bin/flux check - name: flux version run: | ./bin/flux version - name: flux uninstall run: | ./bin/flux uninstall --silent - name: Debug failure if: failure() run: | kubectl version --client --short kubectl -n flux-system get all kubectl -n flux-system describe pods kubectl -n flux-system get kustomizations -oyaml kubectl -n flux-system logs deploy/source-controller kubectl -n flux-system logs deploy/kustomize-controller