name: Build

on:
    pull_request: ~
    push: ~

jobs:
    check:
        runs-on: ubuntu-20.04
        steps:
            - name: Checkout
              uses: actions/checkout@v4
            - name: Setup PHP
              uses: shivammathur/setup-php@v2
            - name: Validate composer.json
              run: composer validate --strict --no-check-lock
    cs-fixer:
        runs-on: ubuntu-20.04
        name: PHP-CS-Fixer
        steps:
            - name: Checkout
              uses: actions/checkout@v4
            - name: Setup PHP
              uses: shivammathur/setup-php@v2
              with:
                  php-version: '8.1'
            - run: composer install --prefer-dist --no-interaction --no-progress --ansi
            - run: vendor/bin/php-cs-fixer fix --diff --dry-run --verbose
    tests:
        runs-on: ubuntu-20.04
        strategy:
            fail-fast: false
            matrix:
                include:
                    - description: 'Symfony 7.2 DEV'
                      php: '8.2'
                      symfony: '7.2.*@dev'
                    - description: 'Symfony 7.0'
                      php: '8.4'
                      symfony: '7.0.*'
                    - description: 'Symfony 7.0'
                      php: '8.3'
                      symfony: '7.0.*'
                    - description: 'Symfony 6.4'
                      php: '8.1'
                      symfony: '6.4.*'
                    - description: 'Symfony 6.0'
                      php: '8.3'
                      symfony: '6.0.*'
                    - description: 'Symfony 5.4'
                      php: '8.1'
                      symfony: '5.4.*'
                    - description: 'Symfony 5.0'
                      php: '8.3'
                      symfony: '5.0.*'
                    - description: 'Beta deps'
                      php: '8.1'
                      beta: true
        name: PHP ${{ matrix.php }} tests (${{ matrix.description }})
        steps:
            - name: Checkout
              uses: actions/checkout@v4
            - name: Cache
              uses: actions/cache@v4
              with:
                  path: ~/.composer/cache/files
                  key: composer-${{ matrix.php }}-${{ matrix.symfony }}-${{ matrix.composer_option }}
            - name: Setup PHP
              uses: shivammathur/setup-php@v2
              with:
                  php-version: ${{ matrix.php }}
            - run: |
                  sed -ri 's/"symfony\/(.+)": "(.+)"/"symfony\/\1": "'${{ matrix.symfony }}'"/' composer.json;
              if: matrix.symfony
            - run: |
                  composer config minimum-stability dev
                  composer config prefer-stable true
              if: matrix.beta
            - name: remove cs-fixer for Symfony 7 (temporary as not-supported yet)
              if: contains(matrix.symfony, '7.2.*@dev') || contains(matrix.symfony, '7.0.*')
              run: |
                  composer remove --dev friendsofphp/php-cs-fixer pedrotroller/php-cs-custom-fixer --no-update
            - run: composer update --prefer-dist --no-interaction --no-progress --ansi ${{ matrix.composer_option }}
            - run: vendor/bin/phpunit
            - run: vendor/bin/phpstan analyse --ansi --no-progress
    tests-windows:
        runs-on: windows-2022
        strategy:
            fail-fast: false
            matrix:
                include:
                    - description: 'Symfony 7.2 DEV'
                      php: '8.2'
                      symfony: '7.2.*@dev'
                    - description: 'Symfony 7.0'
                      php: '8.4'
                      symfony: '7.0.*'
                    - description: 'Symfony 7.0'
                      php: '8.3'
                      symfony: '7.0.*'
                    - description: 'Symfony 6.4'
                      php: '8.1'
                      symfony: '6.4.*'
                    - description: 'Symfony 5.4'
                      php: '8.1'
                      symfony: '5.4.*'
        name: "[WINDOWS] PHP ${{ matrix.php }} tests (${{ matrix.description }})"
        steps:
            - name: Checkout
              uses: actions/checkout@v4
            - name: Cache
              uses: actions/cache@v4
              with:
                  path: ~/.composer/cache/files
                  key: composer-${{ matrix.php }}-${{ matrix.symfony }}-${{ matrix.composer_option }}
            - name: Setup PHP
              uses: shivammathur/setup-php@v2
              with:
                  php-version: ${{ matrix.php }}
            - run: |
                  (Get-Content composer.json) -replace '("symfony/[^"]+": )"[^"]+"', '$1"${{ matrix.symfony }}"' | Out-File -encoding ASCII composer.json
              if: matrix.symfony
            - run: |
                  composer config minimum-stability dev
                  composer config prefer-stable true
              if: matrix.beta
            - name: remove cs-fixer for Symfony 7 (temporary as not-supported yet)
              if: contains(matrix.symfony, '7.2.*@dev') || contains(matrix.symfony, '7.0.*')
              run: |
                  composer remove --dev friendsofphp/php-cs-fixer pedrotroller/php-cs-custom-fixer --no-update
            - run: composer update --prefer-dist --no-interaction --no-progress --ansi ${{ matrix.composer_option }}
            - run: vendor/bin/phpunit
            - run: vendor/bin/phpstan analyse --ansi --no-progress
