name: CI

permissions:
    contents: read

on:
    push:
        branches: ['*']
    pull_request:

jobs:

    tests:
        name: Tests - PHP ${{ matrix.php }} ${{ matrix.dependency-version }}
        runs-on: ubuntu-latest
        timeout-minutes: 15
        strategy:
            fail-fast: false
            matrix:
                php: [ '7.3', '7.4', '8.0', '8.1', '8.2', '8.3', '8.4' ]
                dependency-version: [ '' ]
                include:
                    -   php: '7.3'
                        dependency-version: '--prefer-lowest'
        steps:
            -   name: Checkout
                uses: actions/checkout@v4
            -   name: Setup PHP
                uses: shivammathur/setup-php@v2
                with:
                    php-version: ${{ matrix.php }}
                    coverage: none
            -   name: Cache Composer dependencies
                uses: actions/cache@v3
                with:
                    path: ~/.composer/cache
                    key: php-${{ matrix.php }}-composer-locked-${{ hashFiles('composer.lock') }}
                    restore-keys: php-${{ matrix.php }}-composer-locked-
            -   name: Install PHP dependencies
                run: composer update ${{ matrix.dependency-version }} --prefer-dist --no-interaction --no-progress --no-suggest
            -   name: PHPUnit
                run: vendor/bin/phpunit

    cs:
        name: Coding standards
        runs-on: ubuntu-latest
        steps:
            -   name: Checkout
                uses: actions/checkout@v4
            -   name: Setup PHP
                uses: shivammathur/setup-php@v2
                with:
                    php-version: 7.4
                    tools: cs2pr
                    coverage: none
            -   name: Cache Composer dependencies
                uses: actions/cache@v3
                with:
                    path: ~/.composer/cache
                    key: php-composer-locked-${{ hashFiles('composer.lock') }}
                    restore-keys: php-composer-locked-
            -   name: Install PHP dependencies
                run: composer install --no-interaction --no-progress --no-suggest
            -   name: PHP CodeSniffer
                run: vendor/bin/phpcs -q --no-colors --report=checkstyle | cs2pr
