name: "PHPStan"

on:
  push:
    paths-ignore:
      - 'doc/**'
  pull_request:
    paths-ignore:
      - 'doc/**'

env:
  COMPOSER_FLAGS: "--ansi --no-interaction --prefer-dist"
  SYMFONY_PHPUNIT_VERSION: ""

permissions:
  contents: read

jobs:
  tests:
    name: "PHPStan"

    runs-on: ubuntu-latest
    continue-on-error: ${{ matrix.experimental }}

    strategy:
      matrix:
        include:
          - php-version: "7.2"
            experimental: false
          - php-version: "8.4"
            experimental: true
      fail-fast: false

    steps:
      - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2

      - uses: shivammathur/setup-php@44454db4f0199b8b9685a5d763dc37cbf79108e1 # 2.36.0
        with:
          coverage: "none"
          extensions: "intl, zip"
          ini-values: "memory_limit=-1"
          php-version: "${{ matrix.php-version }}"

      - name: "Determine composer cache directory"
        id: "determine-composer-cache-directory"
        run: "echo \"directory=$(composer config cache-dir)\" >> $GITHUB_OUTPUT"

      - name: "Cache dependencies installed with composer"
        uses: actions/cache@8b402f58fbc84540c8b491a91e594a4576fec3d7 # v5.0.2
        with:
          path: "${{ steps.determine-composer-cache-directory.outputs.directory }}"
          key: "php-${{ matrix.php-version }}-symfony-php-unit-version-${{ env.SYMFONY_PHPUNIT_VERSION }}-${{ hashFiles('**/composer.lock') }}"
          restore-keys: "php-${{ matrix.php-version }}-symfony-php-unit-version-${{ env.SYMFONY_PHPUNIT_VERSION }}"

      - name: "Install highest dependencies"
        if: "matrix.experimental == true"
        run: "composer config platform --unset && composer update ${{ env.COMPOSER_FLAGS }}"

      - name: "Install locked dependencies"
        if: "matrix.experimental == false"
        run: "composer config platform --unset && composer install ${{ env.COMPOSER_FLAGS }}"

      - name: "Initialize PHPUnit sources"
        run: "vendor/bin/simple-phpunit --filter NO_TEST_JUST_AUTOLOAD_THANKS"

      - name: "Run PHPStan"
        run: "composer phpstan"
