name: (gha) E2E Tests

on:
  push:
    branches:
      - master
  pull_request:
    branches:
      - master
  workflow_dispatch:

permissions:
  contents: read

env:
  TARGET_ORG: actions-runner-controller
  TARGET_REPO: arc_e2e_test_dummy
  IMAGE_NAME: "arc-test-image"
  IMAGE_VERSION: "0.13.1"

concurrency:
  # This will make sure we only apply the concurrency limits on pull requests
  # but not pushes to master branch by making the concurrency group name unique
  # for pushes
  group: ${{ github.workflow }}-${{ github.head_ref || github.run_id }}
  cancel-in-progress: true

jobs:
  default-setup:
    runs-on: ubuntu-latest
    timeout-minutes: 20
    if: github.event_name != 'pull_request' || github.event.pull_request.head.repo.id == github.repository_id
    steps:
      - uses: actions/checkout@v6
        with:
          ref: ${{github.head_ref}}

      - name: Get configure token
        id: config-token
        uses: peter-murray/workflow-application-token-action@d17e3a9a36850ea89f35db16c1067dd2b68ee343
        with:
          application_id: ${{ secrets.E2E_TESTS_ACCESS_APP_ID }}
          application_private_key: ${{ secrets.E2E_TESTS_ACCESS_PK }}
          organization: ${{ env.TARGET_ORG }}

      - name: Run default setup test
        run: hack/e2e-test.sh default-setup
        env:
          GITHUB_TOKEN: "${{steps.config-token.outputs.token}}"
        shell: bash

  default-setup-v2:
    runs-on: ubuntu-latest
    timeout-minutes: 20
    if: github.event_name != 'pull_request' || github.event.pull_request.head.repo.id == github.repository_id
    steps:
      - uses: actions/checkout@v6
        with:
          ref: ${{github.head_ref}}

      - name: Get configure token
        id: config-token
        uses: peter-murray/workflow-application-token-action@d17e3a9a36850ea89f35db16c1067dd2b68ee343
        with:
          application_id: ${{ secrets.E2E_TESTS_ACCESS_APP_ID }}
          application_private_key: ${{ secrets.E2E_TESTS_ACCESS_PK }}
          organization: ${{ env.TARGET_ORG }}
      - name: Run default setup test
        run: hack/e2e-test.sh default-setup-v2
        env:
          GITHUB_TOKEN: "${{steps.config-token.outputs.token}}"
        shell: bash

  single-namespace-setup:
    runs-on: ubuntu-latest
    timeout-minutes: 20
    if: github.event_name != 'pull_request' || github.event.pull_request.head.repo.id == github.repository_id
    steps:
      - uses: actions/checkout@v6
        with:
          ref: ${{github.head_ref}}

      - name: Get configure token
        id: config-token
        uses: peter-murray/workflow-application-token-action@d17e3a9a36850ea89f35db16c1067dd2b68ee343
        with:
          application_id: ${{ secrets.E2E_TESTS_ACCESS_APP_ID }}
          application_private_key: ${{ secrets.E2E_TESTS_ACCESS_PK }}
          organization: ${{ env.TARGET_ORG }}
      - name: Run single namespace setup test
        run: hack/e2e-test.sh single-namespace-setup
        env:
          GITHUB_TOKEN: "${{steps.config-token.outputs.token}}"
        shell: bash

  single-namespace-setup-v2:
    runs-on: ubuntu-latest
    timeout-minutes: 20
    if: github.event_name != 'pull_request' || github.event.pull_request.head.repo.id == github.repository_id
    steps:
      - uses: actions/checkout@v6
        with:
          ref: ${{github.head_ref}}

      - name: Get configure token
        id: config-token
        uses: peter-murray/workflow-application-token-action@d17e3a9a36850ea89f35db16c1067dd2b68ee343
        with:
          application_id: ${{ secrets.E2E_TESTS_ACCESS_APP_ID }}
          application_private_key: ${{ secrets.E2E_TESTS_ACCESS_PK }}
          organization: ${{ env.TARGET_ORG }}
      - name: Run single namespace setup test
        run: hack/e2e-test.sh single-namespace-setup-v2
        env:
          GITHUB_TOKEN: "${{steps.config-token.outputs.token}}"
        shell: bash

  dind-mode-setup:
    runs-on: ubuntu-latest
    timeout-minutes: 20
    if: github.event_name != 'pull_request' || github.event.pull_request.head.repo.id == github.repository_id
    steps:
      - uses: actions/checkout@v6
        with:
          ref: ${{github.head_ref}}

      - name: Get configure token
        id: config-token
        uses: peter-murray/workflow-application-token-action@d17e3a9a36850ea89f35db16c1067dd2b68ee343
        with:
          application_id: ${{ secrets.E2E_TESTS_ACCESS_APP_ID }}
          application_private_key: ${{ secrets.E2E_TESTS_ACCESS_PK }}
          organization: ${{ env.TARGET_ORG }}
      - name: Run dind mode setup test
        run: hack/e2e-test.sh dind-mode-setup-v2
        env:
          GITHUB_TOKEN: "${{steps.config-token.outputs.token}}"
        shell: bash

  dind-mode-setup-v2:
    runs-on: ubuntu-latest
    timeout-minutes: 20
    if: github.event_name != 'pull_request' || github.event.pull_request.head.repo.id == github.repository_id
    steps:
      - uses: actions/checkout@v6
        with:
          ref: ${{github.head_ref}}

      - name: Get configure token
        id: config-token
        uses: peter-murray/workflow-application-token-action@d17e3a9a36850ea89f35db16c1067dd2b68ee343
        with:
          application_id: ${{ secrets.E2E_TESTS_ACCESS_APP_ID }}
          application_private_key: ${{ secrets.E2E_TESTS_ACCESS_PK }}
          organization: ${{ env.TARGET_ORG }}
      - name: Run dind mode setup test
        run: hack/e2e-test.sh dind-mode-setup
        env:
          GITHUB_TOKEN: "${{steps.config-token.outputs.token}}"
        shell: bash

  kubernetes-mode-setup:
    runs-on: ubuntu-latest
    timeout-minutes: 20
    if: github.event_name != 'pull_request' || github.event.pull_request.head.repo.id == github.repository_id
    steps:
      - uses: actions/checkout@v6
        with:
          ref: ${{github.head_ref}}

      - name: Get configure token
        id: config-token
        uses: peter-murray/workflow-application-token-action@d17e3a9a36850ea89f35db16c1067dd2b68ee343
        with:
          application_id: ${{ secrets.E2E_TESTS_ACCESS_APP_ID }}
          application_private_key: ${{ secrets.E2E_TESTS_ACCESS_PK }}
          organization: ${{ env.TARGET_ORG }}
      - name: Run kubernetes mode setup test
        run: hack/e2e-test.sh kubernetes-mode-setup-v2
        env:
          GITHUB_TOKEN: "${{steps.config-token.outputs.token}}"
        shell: bash

  kubernetes-mode-setup-v2:
    runs-on: ubuntu-latest
    timeout-minutes: 20
    if: github.event_name != 'pull_request' || github.event.pull_request.head.repo.id == github.repository_id
    steps:
      - uses: actions/checkout@v6
        with:
          ref: ${{github.head_ref}}

      - name: Get configure token
        id: config-token
        uses: peter-murray/workflow-application-token-action@d17e3a9a36850ea89f35db16c1067dd2b68ee343
        with:
          application_id: ${{ secrets.E2E_TESTS_ACCESS_APP_ID }}
          application_private_key: ${{ secrets.E2E_TESTS_ACCESS_PK }}
          organization: ${{ env.TARGET_ORG }}
      - name: Run kubernetes mode setup test
        run: hack/e2e-test.sh kubernetes-mode-setup
        env:
          GITHUB_TOKEN: "${{steps.config-token.outputs.token}}"
        shell: bash

  auth-proxy-setup:
    runs-on: ubuntu-latest
    timeout-minutes: 20
    if: github.event_name != 'pull_request' || github.event.pull_request.head.repo.id == github.repository_id
    steps:
      - uses: actions/checkout@v6
        with:
          ref: ${{github.head_ref}}

      - name: Get configure token
        id: config-token
        uses: peter-murray/workflow-application-token-action@d17e3a9a36850ea89f35db16c1067dd2b68ee343
        with:
          application_id: ${{ secrets.E2E_TESTS_ACCESS_APP_ID }}
          application_private_key: ${{ secrets.E2E_TESTS_ACCESS_PK }}
          organization: ${{ env.TARGET_ORG }}
      - name: Run single namespace setup test
        run: hack/e2e-test.sh single-namespace-setup-v2
        env:
          GITHUB_TOKEN: "${{steps.config-token.outputs.token}}"
        shell: bash

  auth-proxy-setup-v2:
    runs-on: ubuntu-latest
    timeout-minutes: 20
    if: github.event_name != 'pull_request' || github.event.pull_request.head.repo.id == github.repository_id
    steps:
      - uses: actions/checkout@v6
        with:
          ref: ${{github.head_ref}}

      - name: Get configure token
        id: config-token
        uses: peter-murray/workflow-application-token-action@d17e3a9a36850ea89f35db16c1067dd2b68ee343
        with:
          application_id: ${{ secrets.E2E_TESTS_ACCESS_APP_ID }}
          application_private_key: ${{ secrets.E2E_TESTS_ACCESS_PK }}
          organization: ${{ env.TARGET_ORG }}
      - name: Run single namespace setup test
        run: hack/e2e-test.sh single-namespace-setup
        env:
          GITHUB_TOKEN: "${{steps.config-token.outputs.token}}"
        shell: bash

  anonymous-proxy-setup:
    runs-on: ubuntu-latest
    timeout-minutes: 20
    if: github.event_name != 'pull_request' || github.event.pull_request.head.repo.id == github.repository_id
    steps:
      - uses: actions/checkout@v6
        with:
          ref: ${{github.head_ref}}

      - name: Get configure token
        id: config-token
        uses: peter-murray/workflow-application-token-action@d17e3a9a36850ea89f35db16c1067dd2b68ee343
        with:
          application_id: ${{ secrets.E2E_TESTS_ACCESS_APP_ID }}
          application_private_key: ${{ secrets.E2E_TESTS_ACCESS_PK }}
          organization: ${{ env.TARGET_ORG }}
      - name: Run anonymous proxy setup test
        run: hack/e2e-test.sh anonymous-proxy-setup-v2
        env:
          GITHUB_TOKEN: "${{steps.config-token.outputs.token}}"
        shell: bash

  anonymous-proxy-setup-v2:
    runs-on: ubuntu-latest
    timeout-minutes: 20
    if: github.event_name != 'pull_request' || github.event.pull_request.head.repo.id == github.repository_id
    steps:
      - uses: actions/checkout@v6
        with:
          ref: ${{github.head_ref}}

      - name: Get configure token
        id: config-token
        uses: peter-murray/workflow-application-token-action@d17e3a9a36850ea89f35db16c1067dd2b68ee343
        with:
          application_id: ${{ secrets.E2E_TESTS_ACCESS_APP_ID }}
          application_private_key: ${{ secrets.E2E_TESTS_ACCESS_PK }}
          organization: ${{ env.TARGET_ORG }}
      - name: Run anonymous proxy setup test
        run: hack/e2e-test.sh anonymous-proxy-setup
        env:
          GITHUB_TOKEN: "${{steps.config-token.outputs.token}}"
        shell: bash

  self-signed-ca-setup:
    runs-on: ubuntu-latest
    timeout-minutes: 20
    if: github.event_name != 'pull_request' || github.event.pull_request.head.repo.id == github.repository_id
    steps:
      - uses: actions/checkout@v6
        with:
          ref: ${{github.head_ref}}

      - name: Get configure token
        id: config-token
        uses: peter-murray/workflow-application-token-action@d17e3a9a36850ea89f35db16c1067dd2b68ee343
        with:
          application_id: ${{ secrets.E2E_TESTS_ACCESS_APP_ID }}
          application_private_key: ${{ secrets.E2E_TESTS_ACCESS_PK }}
          organization: ${{ env.TARGET_ORG }}
      - name: Run self signed CA setup test
        run: hack/e2e-test.sh self-signed-ca-setup-v2
        env:
          GITHUB_TOKEN: "${{steps.config-token.outputs.token}}"
        shell: bash

  self-signed-ca-setup-v2:
    runs-on: ubuntu-latest
    timeout-minutes: 20
    if: github.event_name != 'pull_request' || github.event.pull_request.head.repo.id == github.repository_id
    steps:
      - uses: actions/checkout@v6
        with:
          ref: ${{github.head_ref}}

      - name: Get configure token
        id: config-token
        uses: peter-murray/workflow-application-token-action@d17e3a9a36850ea89f35db16c1067dd2b68ee343
        with:
          application_id: ${{ secrets.E2E_TESTS_ACCESS_APP_ID }}
          application_private_key: ${{ secrets.E2E_TESTS_ACCESS_PK }}
          organization: ${{ env.TARGET_ORG }}
      - name: Run self signed CA setup test
        run: hack/e2e-test.sh self-signed-ca-setup
        env:
          GITHUB_TOKEN: "${{steps.config-token.outputs.token}}"
        shell: bash

  update-strategy-tests:
    runs-on: ubuntu-latest
    timeout-minutes: 20
    if: github.event_name != 'pull_request' || github.event.pull_request.head.repo.id == github.repository_id
    steps:
      - uses: actions/checkout@v6
        with:
          ref: ${{github.head_ref}}

      - name: Get configure token
        id: config-token
        uses: peter-murray/workflow-application-token-action@d17e3a9a36850ea89f35db16c1067dd2b68ee343
        with:
          application_id: ${{ secrets.E2E_TESTS_ACCESS_APP_ID }}
          application_private_key: ${{ secrets.E2E_TESTS_ACCESS_PK }}
          organization: ${{ env.TARGET_ORG }}
      - name: Run update strategy test
        run: hack/e2e-test.sh update-strategy-v2
        env:
          GITHUB_TOKEN: "${{steps.config-token.outputs.token}}"
        shell: bash

  update-strategy-tests-v2:
    runs-on: ubuntu-latest
    timeout-minutes: 20
    if: github.event_name != 'pull_request' || github.event.pull_request.head.repo.id == github.repository_id
    steps:
      - uses: actions/checkout@v6
        with:
          ref: ${{github.head_ref}}

      - name: Get configure token
        id: config-token
        uses: peter-murray/workflow-application-token-action@d17e3a9a36850ea89f35db16c1067dd2b68ee343
        with:
          application_id: ${{ secrets.E2E_TESTS_ACCESS_APP_ID }}
          application_private_key: ${{ secrets.E2E_TESTS_ACCESS_PK }}
          organization: ${{ env.TARGET_ORG }}
      - name: Run update strategy test
        run: hack/e2e-test.sh update-strategy
        env:
          GITHUB_TOKEN: "${{steps.config-token.outputs.token}}"
        shell: bash

  init-with-min-runners:
    runs-on: ubuntu-latest
    timeout-minutes: 20
    if: github.event_name != 'pull_request' || github.event.pull_request.head.repo.id == github.repository_id
    steps:
      - uses: actions/checkout@v6
        with:
          ref: ${{github.head_ref}}

      - name: Get configure token
        id: config-token
        uses: peter-murray/workflow-application-token-action@d17e3a9a36850ea89f35db16c1067dd2b68ee343
        with:
          application_id: ${{ secrets.E2E_TESTS_ACCESS_APP_ID }}
          application_private_key: ${{ secrets.E2E_TESTS_ACCESS_PK }}
          organization: ${{ env.TARGET_ORG }}
      - name: Run init with min runners test
        run: hack/e2e-test.sh init-with-min-runners-v2
        env:
          GITHUB_TOKEN: "${{steps.config-token.outputs.token}}"
        shell: bash

  init-with-min-runners-v2:
    runs-on: ubuntu-latest
    timeout-minutes: 20
    if: github.event_name != 'pull_request' || github.event.pull_request.head.repo.id == github.repository_id
    steps:
      - uses: actions/checkout@v6
        with:
          ref: ${{github.head_ref}}

      - name: Get configure token
        id: config-token
        uses: peter-murray/workflow-application-token-action@d17e3a9a36850ea89f35db16c1067dd2b68ee343
        with:
          application_id: ${{ secrets.E2E_TESTS_ACCESS_APP_ID }}
          application_private_key: ${{ secrets.E2E_TESTS_ACCESS_PK }}
          organization: ${{ env.TARGET_ORG }}
      - name: Run init with min runners test
        run: hack/e2e-test.sh init-with-min-runners
        env:
          GITHUB_TOKEN: "${{steps.config-token.outputs.token}}"
        shell: bash

