name: PHP Tests & QC
on:
  pull_request:
    branches:
      - trunk
  push:
    branches:
      - trunk
jobs:
  test:
    runs-on: ubuntu-latest
    strategy:
      fail-fast: false
      matrix:
        php: [ '8.2', '8.3', '8.4', '8.5' ]
        laravel: [ 12.* ]
        dependency-version: [ prefer-stable ]
        include:
          - laravel: 12.*
            testbench: ^10.0

    name: P${{ matrix.php }} - L${{ matrix.laravel }} - ${{ matrix.dependency-version }}

    steps:
      - name: Checkout
        uses: actions/checkout@v3

      - name: Setup PHP
        uses: shivammathur/setup-php@v2
        with:
          php-version: ${{ matrix.php }}
          extensions: pcov, sqlsrv, pdo_sqlsrv

      - name: Install Dependencies
        run: |
          composer require "laravel/framework:${{ matrix.laravel }}" "orchestra/testbench:${{ matrix.testbench }}" --no-interaction --no-update
          composer update --${{ matrix.dependency-version }} --prefer-dist --no-interaction

      - name: Install ODBC Driver
        uses: Yarden-zamir/install-mssql-odbc@main
        with:
          ODBC_VERSION: 18
          DISTRO: Ubuntu

      - name: Install SQL Server + Tools
        uses: potatoqualitee/mssqlsuite@v1.7
        with:
          install: sqlengine, sqlclient
          sa-password: Testing1234%
          version: 2019
          show-log: true

      - name: Run Tests
        run: composer ci

      - name: Run Style Checks
        run: composer cs-dry
        # This env var enables PHP-CS-Fixer to run on PHP 8.4 even though the
        # package doesn't officially support it yet. We don't use any PHP 8.4
        # features, so this should be fine. Once 8.4 support drops, this should
        # be removed.
        env:
          PHP_CS_FIXER_IGNORE_ENV: ${{ matrix.php == '8.4' && '1' || '' }}
