name: Tests

on: [push, pull_request]

jobs:
  test:
    runs-on: ubuntu-latest

    strategy:
      matrix:
        php: [7.3, 7.4, '8.0']
        service: ['mysql:5.7', mariadb]
        prefix: ['', flarum_]

        include:
          - service: 'mysql:5.7'
            db: MySQL
          - service: mariadb
            db: MariaDB
          - prefix: flarum_
            prefixStr: (prefix)

        exclude:
          - php: 7.3
            service: 'mysql:5.7'
            prefix: flarum_
          - php: 7.3
            service: mariadb
            prefix: flarum_
          - php: 8.0
            service: 'mysql:5.7'
            prefix: flarum_
          - php: 8.0
            service: mariadb
            prefix: flarum_

    services:
      mysql:
        image: ${{ matrix.service }}
        ports:
          - 13306:3306

    name: 'PHP ${{ matrix.php }} / ${{ matrix.db }} ${{ matrix.prefixStr }}'

    steps:
      - uses: actions/checkout@master

      - name: Setup PHP
        uses: shivammathur/setup-php@v2
        with:
          php-version: ${{ matrix.php }}
          coverage: xdebug
          extensions: curl, dom, gd, json, mbstring, openssl, pdo_mysql, tokenizer, zip
          tools: phpunit, composer:v2

      # The authentication alter is necessary because newer mysql versions use the `caching_sha2_password` driver,
      # which isn't supported prior to PHP7.4
      # When we drop support for PHP7.3, we should remove this from the setup.
      - name: Create MySQL Database
        run: |
          sudo systemctl start mysql
          mysql -uroot -proot -e 'CREATE DATABASE flarum_test;' --port 13306
          mysql -uroot -proot -e "ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'root';" --port 13306

      - name: Install Composer dependencies
        run: composer install

      - name: Setup Composer tests
        run: composer test:setup
        env:
          DB_PORT: 13306
          DB_PASSWORD: root
          DB_PREFIX: ${{ matrix.prefix }}

      - name: Run Composer tests
        run: composer test
        env:
          COMPOSER_PROCESS_TIMEOUT: 600
