docs(claude-md): resync rule-version markers to shipped tags #135
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| name: CI | |
| on: | |
| push: | |
| branches: [main] | |
| pull_request: | |
| branches: [main] | |
| jobs: | |
| check: | |
| runs-on: ubuntu-latest | |
| strategy: | |
| fail-fast: false | |
| matrix: | |
| php: ['8.4', '8.5'] | |
| steps: | |
| - uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0 | |
| - name: Setup PHP ${{ matrix.php }} | |
| uses: shivammathur/setup-php@728c6c6b8cf02c2e48117716a91ee48313958a19 # v2 | |
| with: | |
| php-version: ${{ matrix.php }} | |
| coverage: pcov | |
| tools: composer:v2 | |
| - name: Install dependencies | |
| run: composer install --prefer-dist --no-progress --no-interaction | |
| - name: Audit dependencies | |
| run: composer audit | |
| - name: Format check | |
| run: composer format:check | |
| - name: Static analysis (self) | |
| run: composer phpstan | |
| - name: Tests with coverage | |
| run: composer test:coverage | |
| - name: Coverage threshold gate | |
| run: composer coverage:check | |
| - name: Upload coverage report | |
| if: always() | |
| uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7 | |
| with: | |
| name: clover-php-${{ matrix.php }} | |
| path: build/logs/clover.xml | |
| retention-days: 14 | |
| if-no-files-found: ignore | |
| - name: Mutation testing | |
| run: composer mutation:ci | |
| - name: Upload mutation report | |
| if: always() | |
| uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7 | |
| with: | |
| name: infection-php-${{ matrix.php }} | |
| path: build/logs/infection.* | |
| retention-days: 14 | |
| if-no-files-found: ignore | |
| # Aggregate tracked by the town-crier trial (TC-0069); intended as the single | |
| # required check (the matrix legs stop being individually required). A `needs` | |
| # on a matrix job waits for every leg. | |
| ci-passed: | |
| name: ci-passed | |
| runs-on: ubuntu-latest | |
| needs: [check] | |
| if: always() | |
| steps: | |
| - name: Verify all matrix legs passed | |
| if: ${{ contains(needs.*.result, 'failure') || contains(needs.*.result, 'cancelled') }} | |
| run: | | |
| echo "One or more CI lanes did not pass." | |
| exit 1 |