name: CI

on:
    pull_request:
    push:
        branches: [ master ]

jobs:
    run:
        runs-on: ubuntu-latest
        strategy:
            fail-fast: false
            matrix:
                php:
                    - '7.3'
                    - '7.4'
                    - '8.0'
                    - '8.1'
                    - '8.2'
                    - '8.3'
                    - '8.4'
                    - '8.5'
                minimum_versions: [false]
                coverage: ['none']
                include:
                    - description: 'Minimum version'
                      php: '7.3'
                      minimum_versions: true
                    - description: 'Log Code Coverage'
                      php: '8.4'
                      coverage: 'xdebug'

        name: PHP ${{ matrix.php }} ${{ matrix.description }}
        steps:
            - name: Checkout
              uses: actions/checkout@v5

            - uses: actions/cache@v4
              with:
                  path: ~/.composer/cache/files
                  key: ${{ matrix.php }}

            - name: Setup PHP
              uses: shivammathur/setup-php@v2
              with:
                  php-version: ${{ matrix.php }}
                  coverage: ${{ matrix.coverage }}

            - name: Install dependencies
              run: composer install
              if: matrix.minimum_versions == false

            - name: Install dependencies (lowest versions)
              run: composer update --no-interaction --prefer-lowest
              if: matrix.minimum_versions == true

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

            - name: Upload code coverage
              uses: codecov/codecov-action@v4
              if: matrix.coverage == 'xdebug'
              with:
                  token: ${{ secrets.CODECOV_TOKEN }}
                  file: './build/logs/clover.xml'
                  fail_ci_if_error: true
