name: Run tests

on: [push, pull_request]

jobs:
    php-tests:
        runs-on: ${{ matrix.os }}

        strategy:
            fail-fast: false
            matrix:
                os: [ubuntu-latest, windows-latest]
                php: [8.0, 8.1, 8.2]
                laravel: [9.*, 8.*]
                stability: [prefer-lowest, prefer-stable]

        name: P${{ matrix.php }} - L${{ matrix.laravel }} - ${{ matrix.stability }} - ${{ matrix.os }}

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

            - name: Setup PHP
              uses: shivammathur/setup-php@v2
              with:
                  php-version: ${{ matrix.php }}
                  extensions: mbstring, fileinfo
                  coverage: none
                  tools: composer:v2

            - name: Get composer cache directory
              id: composer-cache
              run: echo "::set-output name=dir::$(composer config cache-files-dir)"

            - name: Cache composer dependencies
              uses: actions/cache@v3
              with:
                  path: ${{ steps.composer-cache.outputs.dir }}
                  key: ${{ matrix.os }}-php-${{ matrix.php }}-laravel-${{ matrix.laravel }}-composer-${{ matrix.stability }}-${{ hashFiles('**/composer.json') }}
                  restore-keys: ${{ matrix.os }}-php-${{ matrix.php }}-laravel-${{ matrix.laravel }}-composer-${{ matrix.stability }}-

            -  name: Install dependencies
               run: |
                    composer require "laravel/framework:${{ matrix.laravel }}" "nesbot/carbon:^2.62.1" --no-interaction --no-update
                    composer update --${{ matrix.stability }} --prefer-dist --no-interaction --no-suggest

            - name: Execute tests
              run: vendor/bin/pest

