name: Test Management UI with Selenium for PRs
on:
   pull_request:
     paths:
     - 'deps/**'
     - 'selenium/**'
     - .github/workflows/test-management-ui-for-pr.yaml
concurrency:
  group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }}
  cancel-in-progress: true
jobs:
  selenium:
    runs-on: ubuntu-22.04
    strategy:
      fail-fast: false
      matrix:
        erlang_version:
        - "27.3"
        browser:
        - chrome
        include:
        - erlang_version: "27.3"
          elixir_version: 1.17
    env:
      SELENIUM_DIR: selenium
      DOCKER_NETWORK: rabbitmq_net
    steps:
    - name: Checkout
      uses: actions/checkout@v4

    - name: Configure OTP & Elixir
      uses: erlef/setup-beam@v1.17
      with:
        otp-version: ${{ matrix.erlang_version }}
        elixir-version: ${{ matrix.elixir_version }}
        hexpm-mirrors: |
          https://builds.hex.pm
          https://cdn.jsdelivr.net/hex

    - name: Authenticate To Google Cloud
      uses: google-github-actions/auth@v2.1.8
      with:
        credentials_json: ${{ secrets.REMOTE_CACHE_CREDENTIALS_JSON }}

    - name: Build & Load RabbitMQ OCI
      run: |
         make package-generic-unix
         make docker-image

    - name: Configure Docker Network
      run: |
        docker network create ${DOCKER_NETWORK}

    - name: Build Test Runner Image
      run: |
        cd ${SELENIUM_DIR}
        docker build -t mocha-test --target test .

    - name: Run short UI suites on a standalone rabbitmq server
      run: |
        IMAGE_TAG=$(find PACKAGES/rabbitmq-server-generic-unix-*.tar.xz | awk -F 'PACKAGES/rabbitmq-server-generic-unix-|.tar.xz' '{print $2}')
        RABBITMQ_DOCKER_IMAGE=pivotalrabbitmq/rabbitmq:$IMAGE_TAG \
          ${SELENIUM_DIR}/run-suites.sh short-suite-management-ui        

    - name: Prepare logs for upload
      if: ${{ failure() && steps.tests.outcome == 'failed' }}
      run: |
        mkdir -p /tmp/short-suite
        mv /tmp/selenium/* /tmp/short-suite
        
    - name: Upload Test Artifacts
      if: ${{ failure() && steps.tests.outcome == 'failed' }}
      uses: actions/upload-artifact@v4
      with:
        name: test-artifacts-${{ matrix.browser }}-${{ matrix.erlang_version }}
        path: |
          /tmp/short-suite
