name: Test Authentication/Authorization backends via mutiple messaging protocols
on:
  push:
    branches:
      - main
      - v4.0.x
    paths:
      - 'deps/rabbit/src/rabbit_auth**'
      - 'deps/rabbit/src/rabbit_access_control**'
      - 'deps/rabbitmq_auth_**'
      - 'deps/rabbitmq_management/src/**'
      - 'deps/rabbitmq_management/priv/**'
      - 'deps/rabbitmq_management/selenium/**'
      - 'scripts/**'
      - .bazelrc
      - .bazelversion
      - BUILD.*
      - '*.bzl'
      - '*.bazel'
      - .github/workflows/test-authnz.yaml
  pull_request:
    paths:
      - 'selenium/**'
      - 'deps/rabbit/**'
      - 'deps/rabbitmq_auth_/**'
      - 'deps/rabbitmq_mqtt/**'
      - .github/workflows/test-authnz.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:
        - "26.2"
        browser:
        - chrome
        include:
        - erlang_version: "26.2"
          elixir_version: 1.17.3
    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.7
      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 Suites
      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 full-suite-authnz-messaging
        mkdir -p /tmp/full-suite-authnz-messaging
        mv /tmp/selenium/* /tmp/full-suite-authnz-messaging
        
    - name: Upload Test Artifacts
      if: always()
      uses: actions/upload-artifact@v4.3.2
      with:
        name: test-artifacts-${{ matrix.browser }}-${{ matrix.erlang_version }}
        path: |
          logs/*
          screens/*
          /tmp/selenium/*

  summary-selenium:
    needs:
    - selenium
    runs-on: ubuntu-latest
    steps:
    - name: SUMMARY
      run: |
        echo "SUCCESS"
