name: e2e
on:
  pull_request:
    paths-ignore:
      - '**/*.md'
  push:
    branches:
      - 'release-*'
      - 'master'
      - 'main'
    tags:
      - 'v*'
    paths-ignore:
      - '**/*.md'
jobs:
  e2e-tests:
    name: E2E tests
    runs-on: ubuntu-latest
    strategy:
      matrix:
        suite: [alertmanager, prometheus, prometheusAllNS, thanosruler, operatorUpgrade]
        include:
          - suite: alertmanager
            prometheus: "exclude"
            prometheusAllNS: "exclude"
            alertmanager: ""
            thanosruler: "exclude"
            operatorUpgrade: "exclude"
            featureGated: "include"
          - suite: prometheus
            prometheus: ""
            prometheusAllNS: "exclude"
            alertmanager: "exclude"
            thanosruler: "exclude"
            operatorUpgrade: "exclude"
            featureGated: "include"
          - suite: prometheusAllNS
            prometheus: "exclude"
            prometheusAllNS: ""
            alertmanager: "exclude"
            thanosruler: "exclude"
            operatorUpgrade: "exclude"
            featureGated: "include"
          - suite: thanosruler
            prometheus: "exclude"
            prometheusAllNS: "exclude"
            alertmanager: "exclude"
            thanosruler: ""
            operatorUpgrade: "exclude"
            featureGated: "include"
          - suite: operatorUpgrade
            prometheus: "exclude"
            prometheusAllNS: "exclude"
            alertmanager: "exclude"
            thanosruler: "exclude"
            operatorUpgrade: ""
            featureGated: "include"
    steps:
    - uses: actions/checkout@v4
    - name: Import environment variables from file
      run: cat ".github/env" >> $GITHUB_ENV
    - name: Install Go
      uses: actions/setup-go@v4
      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.8.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: |
        kubectl wait --for=condition=Ready pods --all --all-namespaces --timeout=300s
        kubectl cluster-info
        kubectl get pods -A
    - name: Load images
      run: |
        kind load docker-image -n e2e quay.io/prometheus-operator/prometheus-operator:$(git rev-parse --short HEAD)
        kind load docker-image -n e2e quay.io/prometheus-operator/prometheus-config-reloader:$(git rev-parse --short HEAD)
        kind load docker-image -n e2e quay.io/prometheus-operator/admission-webhook:$(git rev-parse --short HEAD)
        kubectl apply -f scripts/kind-rbac.yaml
    - name: Run tests
      run: >
        EXCLUDE_ALERTMANAGER_TESTS=${{ matrix.alertmanager }}
        EXCLUDE_PROMETHEUS_TESTS=${{ matrix.prometheus }}
        EXCLUDE_PROMETHEUS_ALL_NS_TESTS=${{ matrix.prometheusAllNS }}
        EXCLUDE_THANOSRULER_TESTS=${{ matrix.thanosruler }}
        EXCLUDE_OPERATOR_UPGRADE_TESTS=${{ matrix.operatorUpgrade }}
        FEATURE_GATED_TESTS=${{ matrix.featureGated }}
        EXCLUDE_PROMETHEUS_UPGRADE_TESTS=exclude
        make test-e2e

  # Added to summarize the matrix and allow easy branch protection rules setup
  e2e-tests-result:
    name: End-to-End Test Results
    if: always()
    needs:
      - 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
