name: e2e
on:
  workflow_dispatch:
  pull_request:
  push:
    branches:
      - 'release-*'
      - 'master'
      - 'main'
      - 'reusable_e2e'
    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
    runs-on: ubuntu-latest
    needs: changed-files
    if: ${{ needs.changed-files.outputs.non-markdown-files }}
    strategy:
      matrix:
        suite: [alertmanager, prometheus, prometheusAllNS, thanosruler, operatorUpgrade]
        include:
          - suite: alertmanager
            target: test-e2e-alertmanager
          - suite: prometheus
            target: test-e2e-prometheus
          - suite: prometheusAllNS
            target: test-e2e-prometheus-all-namespaces
          - suite: thanosruler
            target: test-e2e-thanos-ruler
          - suite: operatorUpgrade
            target: test-e2e-operator-upgrade
    steps:
    - uses: actions/checkout@v6

    - name: Setup E2E environment
      uses: ./.github/actions/setup-e2e  # composite action with your setup steps

    - name: Run tests
      env:
        E2E_DIAGNOSTIC_DIRECTORY: ${{ env.E2E_DIAGNOSTIC_DIRECTORY }}
      run: |
        make ${{ matrix.target }}
    - name: Upload diagnostics artifact
      if: ${{ failure() }}
      uses: actions/upload-artifact@v6
      with:
        name: cluster-state
        path: ${{ env.E2E_DIAGNOSTIC_DIRECTORY }}
        retention-days: 15

  # Added to summarize the matrix and allow easy branch protection rules setup
  e2e-tests-result:
    name: End-to-End Test Results
    if: ${{ needs.changed-files.outputs.non-markdown-files }}
    needs:
      - changed-files
      - e2e-tests
    runs-on: ubuntu-latest
    steps:
      - name: Mark the job as a success
        if: needs.e2e-tests.result == 'success'
        run: exit 0
      - name: Mark the job as a failure
        if: needs.e2e-tests.result != 'success'
        run: exit 1
