name: PHP Code Quality on: pull_request: paths: - '**.php' - 'phpstan.neon' - 'phpunit.xml' # Allow manual triggering workflow_dispatch: # Allow other workflows (e.g. Publish) to invoke this one. workflow_call: env: fail-fast: true permissions: contents: read jobs: phpstan: name: PHPStan runs-on: ubuntu-latest steps: - name: Check out code uses: actions/checkout@v5 - name: Set up PHP uses: shivammathur/setup-php@v2 with: php-version: '8.4' coverage: none # PHPUnit is installed to support PHPStan checking tests/ tools: phpstan/phpstan:^2.1, phpunit/phpunit:^12.4 # https://phpstan.org/user-guide/result-cache - name: Restore result cache uses: actions/cache/restore@v4 with: path: .phpstan-tmp key: phpstan-result-cache-${{ github.run_id }} restore-keys: | phpstan-result-cache- - name: Run PHPStan run: phpstan analyze --no-progress # https://phpstan.org/user-guide/result-cache - name: Save result cache uses: actions/cache/save@v4 if: ${{ !cancelled() }} with: # same as in phpstan.neon path: .phpstan-tmp key: phpstan-result-cache-${{ github.run_id }} phpunit: name: PHPUnit runs-on: ubuntu-latest continue-on-error: ${{ matrix.experimental }} strategy: fail-fast: false matrix: php: ['8.3', '8.4'] experimental: [false] include: - php: '8.5' experimental: true steps: - name: Check out code uses: actions/checkout@v5 - name: Set up PHP ${{ matrix.php }} uses: shivammathur/setup-php@v2 with: # Check https://phpunit.de/supported-versions.html for PHP version compatibility php-version: ${{ matrix.php }} coverage: none tools: phpunit/phpunit:^12.4 - name: Run PHPUnit (standard tests) run: phpunit --exclude-group integration - name: PHPUnit (tests with mocked dependencies) run: | phpunit --no-configuration --bootstrap tests/MockedDepsBootstrap.php tests/mocked/ rector: name: Rector runs-on: ubuntu-latest steps: - name: Check out code uses: actions/checkout@v5 - name: Set up PHP uses: shivammathur/setup-php@v2 with: php-version: latest coverage: none tools: rector/rector:^2.2 # https://getrector.com/documentation/cache-in-ci#content-github-actions - name: Restore result cache uses: actions/cache/restore@v4 with: path: .rector-tmp key: rector-result-cache-${{ github.run_id }} restore-keys: | rector-result-cache- - name: Run Rector (dry run) run: rector --dry-run # https://getrector.com/documentation/cache-in-ci#content-github-actions - name: Save result cache uses: actions/cache/save@v4 if: ${{ !cancelled() }} with: # same as in rector.php path: .rector-tmp key: rector-result-cache-${{ github.run_id }}