feat: Introduce @PER-CS
ruleset (#7321)
#816
This file contains 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: | |
- pull_request | |
- push | |
permissions: | |
contents: read # to fetch code (actions/checkout) | |
concurrency: | |
group: ci-${{ github.head_ref || github.run_id }} # will be canceled on subsequent pushes in pull requests but not branches | |
cancel-in-progress: true | |
jobs: | |
tests: | |
strategy: | |
fail-fast: false | |
matrix: | |
include: | |
- operating-system: 'ubuntu-20.04' | |
php-version: '7.4' | |
job-description: 'with lowest deps' | |
composer-flags: '--prefer-stable --prefer-lowest' # should be checked on the lowest supported PHP version | |
- operating-system: 'ubuntu-20.04' | |
php-version: '7.4' | |
job-description: 'with PHPDoc to type rules' | |
phpdoc-to-type-rules: 'yes' # should be checked on the lowest supported PHP version | |
- operating-system: 'ubuntu-20.04' | |
php-version: '7.4' | |
job-description: 'with Symfony ^5' | |
execute-flex-with-symfony-version: '^5' # explicit check for Symfony 5.x compatibility | |
- operating-system: 'ubuntu-20.04' | |
php-version: '8.0' | |
job-description: 'with Symfony ^6' | |
execute-flex-with-symfony-version: '^6' # explicit check for Symfony 6.x compatibility | |
- operating-system: 'ubuntu-20.04' | |
php-version: '8.1' | |
- operating-system: 'ubuntu-20.04' | |
php-version: '8.2' | |
job-description: 'with migration rules' | |
migration-rules: 'yes' # should be checked on the highest supported PHP version | |
- operating-system: 'ubuntu-20.04' | |
php-version: '8.2' | |
job-description: 'auto-review' | |
phpunit-flags: '--group auto-review' | |
- operating-system: 'ubuntu-20.04' | |
php-version: '8.2' | |
job-description: 'with calculating code coverage' | |
calculate-code-coverage: 'yes' | |
- operating-system: 'ubuntu-20.04' | |
php-version: '8.2' | |
job-description: 'with deployment' | |
execute-deployment: 'yes' | |
- operating-system: 'ubuntu-20.04' | |
php-version: '8.3' | |
PHP_CS_FIXER_IGNORE_ENV: 1 | |
composer-flags: '--ignore-platform-req=PHP' | |
- operating-system: 'windows-latest' | |
php-version: '8.2' | |
job-description: 'on Windows' | |
FAST_LINT_TEST_CASES: 1 | |
- operating-system: 'macos-latest' | |
php-version: '8.2' | |
job-description: 'on macOS' | |
FAST_LINT_TEST_CASES: 1 | |
name: PHP ${{ matrix.php-version }} ${{ matrix.job-description }} | |
runs-on: ${{ matrix.operating-system }} | |
steps: | |
- name: Checkout code | |
uses: actions/checkout@v3 | |
- name: Get code coverage driver | |
uses: actions/github-script@v6 | |
id: code-coverage-driver | |
with: | |
script: 'return "${{ matrix.calculate-code-coverage }}" == "yes" ? "pcov" : "none"' | |
result-encoding: string | |
- name: Setup PHP | |
uses: shivammathur/setup-php@v2 | |
with: | |
php-version: ${{ matrix.php-version }} | |
extensions: none, dom, json, opcache, simplexml, tokenizer, xml, xmlwriter, zip | |
coverage: ${{ steps.code-coverage-driver.outputs.result }} | |
tools: flex | |
env: | |
fail-fast: false # disabled as old PHP version cannot run flex | |
update: ${{ matrix.php-version == '8.0' }} # force update to 8.0.1+, ref https://github.com/shivammathur/setup-php/issues/394#issuecomment-760461251 | |
- name: Get Composer cache directory | |
id: composer-cache | |
shell: bash | |
run: echo "dir=$(composer config cache-dir)" >> $GITHUB_OUTPUT | |
- name: Cache dependencies | |
uses: actions/cache@v3 | |
with: | |
path: ${{ steps.composer-cache.outputs.dir }} | |
key: composer-${{ runner.os }}-${{ matrix.php-version }}-${{ hashFiles('**/composer.*') }}-${{ matrix.composer-flags }} | |
restore-keys: | | |
composer-${{ runner.os }}-${{ matrix.php-version }}-${{ hashFiles('**/composer.*') }}- | |
composer-${{ runner.os }}-${{ matrix.php-version }}- | |
composer-${{ runner.os }}- | |
composer- | |
- name: Configure Symfony Flex | |
if: matrix.execute-flex-with-symfony-version | |
run: composer config extra.symfony.require ${{ matrix.execute-flex-with-symfony-version }} | |
- name: Install dependencies | |
uses: nick-invision/retry@v2 | |
with: | |
timeout_minutes: 5 | |
max_attempts: 5 | |
retry_wait_seconds: 30 | |
command: | | |
composer update --optimize-autoloader --no-interaction --no-progress ${{ matrix.composer-flags }} | |
composer info -D | |
# execute migration rules before running tests and self-fixing, | |
# so that we know that our codebase is future-ready | |
- name: Run PHP CS Fixer with migration rules | |
if: matrix.migration-rules == 'yes' | |
run: php php-cs-fixer fix --config .php-cs-fixer.php-highest.php -q | |
- name: Disable time limit for tests when collecting coverage | |
if: matrix.calculate-code-coverage == 'yes' | |
run: sed 's/enforceTimeLimit="true"/enforceTimeLimit="false"/g' phpunit.xml.dist > phpunit.xml | |
- name: Run tests | |
if: matrix.calculate-code-coverage != 'yes' | |
env: | |
PHP_CS_FIXER_IGNORE_ENV: ${{ matrix.PHP_CS_FIXER_IGNORE_ENV }} | |
FAST_LINT_TEST_CASES: ${{ matrix.FAST_LINT_TEST_CASES }} | |
run: vendor/bin/paraunit run ${{ matrix.phpunit-flags || '--exclude-group auto-review' }} | |
- name: Collect code coverage | |
if: matrix.calculate-code-coverage == 'yes' | |
run: vendor/bin/paraunit coverage --testsuite coverage --exclude-group covers-nothing --clover build/logs/clover.xml | |
- name: Upload coverage results to Coveralls | |
if: matrix.calculate-code-coverage == 'yes' | |
env: | |
COVERALLS_REPO_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
run: php vendor/bin/php-coveralls --verbose | |
- name: Run PHP CS Fixer with PHPDoc to type rules | |
if: matrix.phpdoc-to-type-rules == 'yes' | |
run: php php-cs-fixer fix --diff --dry-run -v --config .php-cs-fixer.php-lowest.php | |
- name: Run PHP CS Fixer | |
env: | |
PHP_CS_FIXER_IGNORE_ENV: ${{ matrix.PHP_CS_FIXER_IGNORE_ENV }} | |
PHP_CS_FIXER_FUTURE_MODE: 1 | |
run: php php-cs-fixer fix --diff --dry-run -v | |
- name: Execute deployment checks | |
if: matrix.execute-deployment == 'yes' | |
run: | | |
./dev-tools/build.sh | |
PHP_CS_FIXER_TEST_ALLOW_SKIPPING_SMOKE_TESTS=0 vendor/bin/phpunit tests/Smoke/ |