name: e2e-feature-gated
on:
  workflow_dispatch:
  pull_request:
  push:
    branches:
      - 'release-*'
      - 'master'
      - 'main'
    tags:
      - 'v*'
# To cancel running workflow when new commits pushed in a pull request
concurrency:
  group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }}
  cancel-in-progress: true
jobs:
  changed-files:
     uses: ./.github/workflows/changed-files.yaml
  e2e-tests:
    name: E2E tests for feature gates
    needs: changed-files
    if: ${{ needs.changed-files.outputs.non-markdown-files }}
    runs-on: ubuntu-latest
    steps:
    - uses: actions/checkout@v4
    - name: Import environment variables from file
      run: |
        cat ".github/env" >> "$GITHUB_ENV"
        echo "E2E_DIAGNOSTIC_DIRECTORY=$(mktemp -d)" >> "$GITHUB_ENV"
    - name: Install Go
      uses: actions/setup-go@v5
      with:
        go-version: '${{ env.golang-version }}'
        check-latest: true
    - name: Build images
      run: |
        export SHELL=/bin/bash
        make build image
    - name: Start kind cluster
      uses: helm/kind-action@v1.12.0
      with:
        version: ${{ env.kind-version }}
        node_image: ${{ env.kind-image }}
        wait: 300s
        config: ./test/e2e/kind-conf.yaml
        cluster_name: e2e
    - name: Wait for cluster to finish bootstraping
      run: |
        echo "Waiting for all nodes to be ready..."
        kubectl wait --for=condition=Ready nodes --all --timeout=120s
        kubectl get nodes
        echo "Waiting for all pods to be ready..."
        kubectl wait --for=condition=Ready pods --all --all-namespaces --timeout=300s
        kubectl get pods -A
        echo "Cluster information"
        kubectl cluster-info
    - name: Load images
      run: |
        make test-e2e-images
        kubectl apply -f scripts/kind-rbac.yaml
    - name: Run tests
      env:
        E2E_DIAGNOSTIC_DIRECTORY: ${{ env.E2E_DIAGNOSTIC_DIRECTORY }}
      run: |
        make test-e2e-feature-gates
    - name: Upload diagnostics artifact
      if: ${{ failure() }}
      uses: actions/upload-artifact@v4
      with:
        name: cluster-state
        path: ${{ env.E2E_DIAGNOSTIC_DIRECTORY }}
        retention-days: 15
