mirror of
https://github.com/WordPress/WordPress-Coding-Standards.git
synced 2026-07-27 10:37:02 +08:00
As of PHPCS 4.0, the base sniff test class has been renamed from `AbstractSniffUnitTest` to `AbstractSniffTestCase`. Additionally, the PHPCS test setup no longer uses the outdated custom test suite creation. This means that to allow for the tests to run on both PHPCS 3.x and 4.x, some changes are needed. This commit handles this by: * Changing all test files to `extend` the new test case class and adding a class alias to the test bootstrap for compatibility with PHPCS 3.x. * Adding separate scripts to the `composer.json` file for invoking the tests on PHPCS 3.x vs 4.x. * Updating the minimum PHPUnit 9 version to 9.3.4 as required by the PHPCS 4.x native test framework. * Add GH Actions jobs to test against PHPCS 4.x to all `test` matrices. * Updating the `quicktest` and `unit-tests` GH Actions jobs to use the correct Composer script based on the installed PHPCS version. * Run the `basic-qa` code-sniff and ruleset-test jobs against both PHPCS 3.x-dev and 4.x-dev. * Update `basic-qa` to accept the phpcbf NON_FIXABLE exit code (2) on PHPCS 4.x in the fixer-conflict check. PHPCS 4.0 reworked the phpcbf exit codes into a bitmask. _Note: even though PHPCS 4.x supports PHPUnit 10 and 11, we cannot widen the version restrictions for PHPUnit (yet) while PHPCS 3.x is also supported as it would lead to PHPUnit 10/11 being installed for PHPCS 3.x on PHP >= 8.1, which would break the test runs._ --------- Co-authored-by: Juliette <663378+jrfnl@users.noreply.github.com>
172 lines
6.5 KiB
YAML
172 lines
6.5 KiB
YAML
name: Unit Tests
|
|
|
|
on:
|
|
push:
|
|
branches:
|
|
- main
|
|
pull_request:
|
|
# Allow manually triggering the workflow.
|
|
workflow_dispatch:
|
|
|
|
# Cancels all previous workflow runs for the same branch that have not yet completed.
|
|
concurrency:
|
|
# The concurrency group contains the workflow name and the branch name.
|
|
group: ${{ github.workflow }}-${{ github.ref }}
|
|
cancel-in-progress: true
|
|
|
|
env:
|
|
PHPCS_3_DEV: '3.x-dev'
|
|
PHPCS_4_DEV: '4.x-dev'
|
|
UTILS_DEV: 'dev-develop'
|
|
EXTRA_DEV: 'dev-develop'
|
|
|
|
jobs:
|
|
# Runs the test suite against all supported branches and combinations.
|
|
# Linting is performed on all jobs run with dependencies `stable`.
|
|
test:
|
|
runs-on: ubuntu-latest
|
|
strategy:
|
|
matrix:
|
|
php: [ '7.3', '7.4', '8.0', '8.1', '8.2', '8.3', '8.4', '8.6' ]
|
|
dependencies: [ 'lowest', 'stable' ]
|
|
extensions: [ '' ]
|
|
coverage: [false]
|
|
|
|
include:
|
|
# Run code coverage builds against high/low PHP and high/low PHPCS.
|
|
- php: '7.2'
|
|
dependencies: 'stable'
|
|
extensions: ''
|
|
coverage: true
|
|
- php: '7.2'
|
|
dependencies: 'lowest'
|
|
extensions: ''
|
|
coverage: true
|
|
- php: '8.5'
|
|
dependencies: 'stable'
|
|
extensions: ''
|
|
coverage: true
|
|
- php: '8.5'
|
|
dependencies: 'lowest'
|
|
extensions: ''
|
|
coverage: true
|
|
|
|
# Test against dev versions of all dependencies with select PHP versions for early detection of issues.
|
|
- php: '7.2'
|
|
dependencies: 'phpcs-3-dev'
|
|
extensions: ''
|
|
coverage: false
|
|
- php: '7.2'
|
|
dependencies: 'phpcs-4-dev'
|
|
extensions: ''
|
|
coverage: false
|
|
- php: '8.1'
|
|
dependencies: 'phpcs-3-dev'
|
|
extensions: ''
|
|
coverage: false
|
|
- php: '8.1'
|
|
dependencies: 'phpcs-4-dev'
|
|
extensions: ''
|
|
coverage: false
|
|
- php: '8.4'
|
|
dependencies: 'phpcs-3-dev'
|
|
extensions: ''
|
|
coverage: false
|
|
- php: '8.5'
|
|
dependencies: 'phpcs-4-dev'
|
|
extensions: ''
|
|
coverage: false
|
|
|
|
|
|
# Add extra build to test against PHPCS 4.
|
|
#- php: '7.4'
|
|
# dependencies: '4.0.x-dev as 3.99.99'
|
|
|
|
name: PHP ${{ matrix.php }} on PHPCS ${{ matrix.dependencies }}
|
|
|
|
continue-on-error: ${{ matrix.php == '8.6' }}
|
|
|
|
steps:
|
|
- name: Checkout repository
|
|
uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
|
|
with:
|
|
persist-credentials: false
|
|
|
|
# With stable PHPCS dependencies, allow for PHP deprecation notices.
|
|
# Unit tests don't need to fail on those for stable releases where those issues won't get fixed anymore.
|
|
- name: Setup ini config
|
|
id: set_ini
|
|
run: |
|
|
if [ "${{ matrix.dependencies }}" != "phpcs-3-dev" ] && [ "${{ matrix.dependencies }}" != "phpcs-4-dev" ]; then
|
|
echo 'PHP_INI=error_reporting=E_ALL & ~E_DEPRECATED, display_errors=On, display_startup_errors=On' >> "$GITHUB_OUTPUT"
|
|
else
|
|
echo 'PHP_INI=error_reporting=-1, display_errors=On, display_startup_errors=On' >> "$GITHUB_OUTPUT"
|
|
fi
|
|
|
|
- name: Set up PHP
|
|
uses: shivammathur/setup-php@f3e473d116dcccaddc5834248c87452386958240 # 2.37.2
|
|
with:
|
|
php-version: ${{ matrix.php }}
|
|
ini-values: ${{ steps.set_ini.outputs.PHP_INI }}
|
|
coverage: ${{ matrix.coverage && 'xdebug' || 'none' }}
|
|
tools: cs2pr
|
|
|
|
- name: "Composer: set PHPCS dependencies for tests (dev)"
|
|
if: ${{ matrix.dependencies == 'phpcs-3-dev' || matrix.dependencies == 'phpcs-4-dev' }}
|
|
run: >
|
|
composer require --no-update --no-scripts --no-interaction
|
|
squizlabs/php_codesniffer:"${{ matrix.dependencies == 'phpcs-3-dev' && env.PHPCS_3_DEV || env.PHPCS_4_DEV }}"
|
|
phpcsstandards/phpcsutils:"${{ env.UTILS_DEV }}"
|
|
phpcsstandards/phpcsextra:"${{ env.EXTRA_DEV }}"
|
|
|
|
- name: Enable creation of `composer.lock` file
|
|
if: ${{ matrix.dependencies == 'lowest' }}
|
|
run: composer config --unset lock
|
|
|
|
- name: Install Composer dependencies
|
|
uses: ramsey/composer-install@65e4f84970763564f46a70b8a54b90d033b3bdda # 4.0.0
|
|
with:
|
|
# Bust the cache at least once a month - output format: YYYY-MM.
|
|
custom-cache-suffix: $(date -u "+%Y-%m")
|
|
|
|
- name: "Composer: downgrade PHPCS dependencies for tests (lowest)"
|
|
if: ${{ matrix.dependencies == 'lowest' }}
|
|
run: >
|
|
composer update --prefer-lowest --no-scripts --no-interaction
|
|
squizlabs/php_codesniffer
|
|
phpcsstandards/phpcsutils
|
|
phpcsstandards/phpcsextra
|
|
|
|
- name: Lint PHP files against parse errors
|
|
if: ${{ matrix.dependencies == 'stable' }}
|
|
run: composer lint -- --checkstyle | cs2pr
|
|
|
|
- name: Grab PHPCS version
|
|
id: phpcs_version
|
|
run: echo "VERSION=$(vendor/bin/phpcs --version | grep --only-matching --max-count=1 --extended-regexp '\b[0-9]+\.[0-9]+')" >> "$GITHUB_OUTPUT"
|
|
|
|
- name: Run the unit tests without code coverage (PHPCS 3.x)
|
|
if: ${{ startsWith( steps.phpcs_version.outputs.VERSION, '3.' ) && (matrix.coverage == false || github.event.repository.fork == true) }}
|
|
run: composer run-tests-phpcs3
|
|
|
|
- name: Run the unit tests without code coverage (PHPCS 4.x)
|
|
if: ${{ startsWith( steps.phpcs_version.outputs.VERSION, '4.' ) && (matrix.coverage == false || github.event.repository.fork == true) }}
|
|
run: composer run-tests-phpcs4
|
|
|
|
- name: Run the unit tests with code coverage (PHPCS 3.x)
|
|
if: ${{ startsWith( steps.phpcs_version.outputs.VERSION, '3.' ) && matrix.coverage == true && github.event.repository.fork == false }}
|
|
run: composer coverage-phpcs3
|
|
|
|
- name: Run the unit tests with code coverage (PHPCS 4.x)
|
|
if: ${{ startsWith( steps.phpcs_version.outputs.VERSION, '4.' ) && matrix.coverage == true && github.event.repository.fork == false }}
|
|
run: composer coverage-phpcs4
|
|
|
|
- name: Send coverage report to Codecov
|
|
if: ${{ success() && matrix.coverage == true && github.event.repository.fork == false }}
|
|
uses: codecov/codecov-action@fb8b3582c8e4def4969c97caa2f19720cb33a72f # v7.0.0
|
|
with:
|
|
files: ./build/logs/clover.xml
|
|
fail_ci_if_error: true
|
|
verbose: true
|
|
env:
|
|
CODECOV_TOKEN: ${{ secrets.CODECOV_TOKEN }}
|