name: CI

on:
  # Run on all pushes and on all pull requests.
  push:
  pull_request:
  # Allow manually triggering the workflow.
  workflow_dispatch:

jobs:
  test:
    runs-on: ubuntu-latest

    strategy:
      fail-fast: false
      # Keys:
      # - experimental: Whether the build is "allowed to fail".
      matrix:
        php: ['7.2', '7.3', '7.4', '8.0']
        experimental: [false]

        include:
          - php: '8.1'
            experimental: true

    name: "PHP: ${{ matrix.php }}"

    continue-on-error: ${{ matrix.experimental }}

    steps:
      - name: Checkout code
        uses: actions/checkout@v2

      - name: Install PHP
        uses: shivammathur/setup-php@v2
        with:
          php-version: ${{ matrix.php }}
          ini-values: error_reporting=-1, display_errors=On, log_errors_max_len=0
          coverage: none
          tools: none

      # Install dependencies and handle caching in one go.
      # @link https://github.com/marketplace/actions/install-composer-dependencies
      - name: "Install Composer dependencies (PHP < 8.1)"
        if: ${{ matrix.php < '8.1' }}
        uses: "ramsey/composer-install@v1"

      - name: "Install Composer dependencies (PHP 8.1)"
        if: ${{ matrix.php >= '8.1' }}
        uses: "ramsey/composer-install@v1"
        with:
          composer-options: --ignore-platform-reqs

      - name: Run unit tests
        run: vendor/bin/phpunit
