---
name: Test

on:
  pull_request:
  workflow_dispatch:
  merge_group:

env:
  TWITCH_PUBSUB_SERVER_IMAGE: ghcr.io/chatterino/twitch-pubsub-server-test:v1.0.6
  QT_QPA_PLATFORM: minimal

concurrency:
  group: test-${{ github.ref }}
  cancel-in-progress: true

jobs:
  test:
    runs-on: ${{ matrix.os }}
    strategy:
      matrix:
        include:
          - os: "ubuntu-20.04"
            qt-version: "5.15.2"
          - os: "ubuntu-20.04"
            qt-version: "5.12.12"
          - os: "ubuntu-22.04"
            qt-version: "6.2.4"
      fail-fast: false
    env:
      C2_BUILD_WITH_QT6: ${{ startsWith(matrix.qt-version, '6.') && 'ON' || 'OFF' }}
      QT_MODULES: ${{ startsWith(matrix.qt-version, '6.') && 'qt5compat qtimageformats' || '' }}

    steps:
      - uses: actions/checkout@v3
        with:
          submodules: recursive

      - name: Install Qt
        uses: jurplel/install-qt-action@v3.3.0
        with:
          cache: true
          cache-key-prefix: ${{ runner.os }}-QtCache-${{ matrix.qt-version }}-v2
          modules: ${{ env.QT_MODULES }}
          version: ${{ matrix.qt-version }}

      # LINUX
      - name: Install dependencies (Ubuntu)
        if: startsWith(matrix.os, 'ubuntu')
        run: |
          sudo apt-get update
          sudo apt-get -y install \
              cmake \
              rapidjson-dev \
              libssl-dev \
              libboost-dev \
              libboost-system-dev \
              libboost-filesystem-dev \
              libpulse-dev \
              libxkbcommon-x11-0 \
              libgstreamer-plugins-base1.0-0 \
              build-essential \
              libgl1-mesa-dev \
              libxcb-icccm4 \
              libxcb-image0 \
              libxcb-keysyms1 \
              libxcb-render-util0 \
              libxcb-xinerama0

      - name: Create build directory (Ubuntu)
        if: startsWith(matrix.os, 'ubuntu')
        run: |
          mkdir build-test
        shell: bash

      - name: Build (Ubuntu)
        if: startsWith(matrix.os, 'ubuntu')
        run: |
          cmake \
            -DBUILD_TESTS=On \
            -DBUILD_APP=OFF \
            -DBUILD_WITH_QT6="$C2_BUILD_WITH_QT6" \
            ..
          cmake --build .
        working-directory: build-test
        shell: bash

      - name: Test (Ubuntu)
        if: startsWith(matrix.os, 'ubuntu')
        timeout-minutes: 30
        run: |
          docker pull kennethreitz/httpbin
          docker pull ${{ env.TWITCH_PUBSUB_SERVER_IMAGE }}
          docker run --network=host --detach ${{ env.TWITCH_PUBSUB_SERVER_IMAGE }}
          docker run -p 9051:80 --detach kennethreitz/httpbin
          ./bin/chatterino-test || ./bin/chatterino-test || ./bin/chatterino-test
        working-directory: build-test
        shell: bash
