name: Main workflow

on: [push, pull_request]

jobs:
  phpunit:
    runs-on: ubuntu-latest
    strategy:
      matrix:
        php-versions: ['7.4', '8.4']
        dependencies:
          - lowest
          - highest

    name: phpunit (${{ matrix.php-versions }}-${{ matrix.dependencies }})

    steps:
      - uses: actions/checkout@v5.0.0

      - uses: shivammathur/setup-php@2.35.4
        with:
          php-version: ${{ matrix.php-versions }}
          coverage: none
        if: matrix.php-versions != '8.4' || matrix.dependencies != 'highest'

      - uses: shivammathur/setup-php@2.35.4
        with:
          php-version: ${{ matrix.php-versions }}
          coverage: pcov
        if: matrix.php-versions == '8.4' && matrix.dependencies == 'highest'

      - name: Setup problem matcher for PHPUnit
        run: echo "::add-matcher::${{ runner.tool_cache }}/phpunit.json"

      - name: Install dependencies
        if: matrix.dependencies == 'lowest'
        run: composer update --prefer-lowest

      - name: Install dependencies
        if: matrix.dependencies == 'highest'
        run: composer install

      - name: Run PHPUnit
        run: vendor/bin/phpunit
        if: matrix.php-versions != '8.4' || matrix.dependencies != 'highest'

      - name: Run PHPUnit with coverage
        run: vendor/bin/phpunit --coverage-clover=coverage.xml
        if: matrix.php-versions == '8.4' && matrix.dependencies == 'highest'

      - name: Upload coverage to Codecov
        uses: codecov/codecov-action@v5.5.0
        with:
          token: ${{ secrets.CODECOV_TOKEN }}
        if: matrix.php-versions == '8.4' && matrix.dependencies == 'highest'

  phpcs:
    runs-on: ubuntu-latest

    steps:
      - uses: actions/checkout@v5.0.0
      - uses: shivammathur/setup-php@2.35.4
        with:
          php-version: 7.4
          coverage: none
          tools: cs2pr

      - name: Install dependencies
        run: composer install

      - name: Run PHP Codesniffer
        run: vendor/bin/phpcs --report=checkstyle -q | cs2pr --graceful-warnings

  phpstan:
    runs-on: ubuntu-latest

    steps:
      - uses: actions/checkout@v5.0.0
      - uses: shivammathur/setup-php@2.35.4
        with:
          php-version: 7.4
          coverage: none

      - name: Install dependencies
        run: composer install
        
      - name: Run PHPStan
        run: vendor/bin/phpstan
