Add client-only ability registration #310
Workflow file for this run
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: Test | |
on: | |
workflow_dispatch: | |
push: | |
branches: | |
- trunk | |
pull_request: | |
types: | |
- opened | |
- synchronize | |
- ready_for_review | |
# Cancels all previous workflow runs for pull requests that have not completed. | |
concurrency: | |
# The concurrency group contains the workflow name and the branch name for pull requests | |
# or the commit hash for any other events. | |
group: ${{ github.workflow }}-${{ github.event_name == 'pull_request' && github.head_ref || github.sha }} | |
cancel-in-progress: true | |
jobs: | |
# Runs the PHP coding standards checks. | |
# | |
# Violations are reported inline with annotations. | |
# | |
# Performs the following steps: | |
# - Checks out the repository. | |
# - Sets up PHP. | |
# - Configures caching for PHPCS scans. | |
# - Installs Composer dependencies. | |
# - Runs PHPCS on the full codebase. | |
# - Generate a report for displaying issues as pull request annotations. | |
phpcs: | |
name: Run PHPCS coding standards checks | |
runs-on: ubuntu-24.04 | |
permissions: | |
contents: read | |
timeout-minutes: 20 | |
steps: | |
- name: Checkout repository | |
uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0 | |
with: | |
show-progress: ${{ runner.debug == '1' && 'true' || 'false' }} | |
persist-credentials: false | |
- name: Set up PHP | |
uses: shivammathur/setup-php@ec406be512d7077f68eed36e63f4d91bc006edc4 # v2.35.4 | |
with: | |
php-version: '8.3' | |
coverage: none | |
tools: cs2pr | |
# This date is used to ensure that the PHPCS cache is cleared at least once every week. | |
# http://man7.org/linux/man-pages/man1/date.1.html | |
- name: "Get last Monday's date" | |
id: get-date | |
run: echo "date=$(/bin/date -u --date='last Mon' "+%F")" >> "$GITHUB_OUTPUT" | |
- name: Cache PHPCS scan cache | |
uses: actions/cache@0400d5f644dc74513175e3cd8d07132dd4860809 # v4.2.4 | |
with: | |
path: tests/_output/phpcs-cache.json | |
key: ${{ runner.os }}-date-${{ steps.get-date.outputs.date }}-phpcs-cache-${{ hashFiles('**/composer.json', 'phpcs.xml.dist') }} | |
# Since Composer dependencies are installed using `composer update` and no lock file is in version control, | |
# passing a custom cache suffix ensures that the cache is flushed at least once per week. | |
- name: Install Composer dependencies | |
uses: ramsey/composer-install@3cf229dc2919194e9e36783941438d17239e8520 # v3.1.1 | |
- name: Run PHPCS | |
id: phpcs | |
run: composer lint -- --report-full --report-checkstyle=./tests/_output/phpcs-report.xml | |
- name: Show PHPCS results in PR | |
if: ${{ always() && steps.phpcs.outcome == 'failure' }} | |
run: cs2pr ./tests/_output/phpcs-report.xml | |
# Runs PHP static analysis tests. | |
# | |
# Violations are reported inline with annotations. | |
# | |
# Performs the following steps: | |
# - Checks out the repository. | |
# - Sets up PHP. | |
# - Configures caching for PHP static analysis scans. | |
# - Installs Composer dependencies. | |
# - Makes Composer packages available globally. | |
# - Runs PHPStan static analysis (with Pull Request annotations). | |
# - Saves the PHPStan result cache. | |
phpstan: | |
name: Run PHP static analysis | |
runs-on: ubuntu-24.04 | |
permissions: | |
contents: read | |
timeout-minutes: 20 | |
steps: | |
- name: Checkout repository | |
uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0 | |
with: | |
show-progress: ${{ runner.debug == '1' && 'true' || 'false' }} | |
persist-credentials: false | |
- name: Set up PHP | |
uses: shivammathur/setup-php@ec406be512d7077f68eed36e63f4d91bc006edc4 # v2.35.4 | |
with: | |
php-version: 8.3 | |
coverage: none | |
tools: cs2pr | |
# This date is used to ensure that the PHPCS cache is cleared at least once every week. | |
# http://man7.org/linux/man-pages/man1/date.1.html | |
- name: "Get last Monday's date" | |
id: get-date | |
run: echo "date=$(/bin/date -u --date='last Mon' "+%F")" >> "$GITHUB_OUTPUT" | |
- name: Cache PHP Static Analysis scan cache | |
uses: actions/cache@0400d5f644dc74513175e3cd8d07132dd4860809 # v4.2.4 | |
with: | |
path: tests/_output # This is defined in the base.neon file. | |
key: 'phpstan-result-cache-${{ runner.os }}-date-${{ steps.get-date.outputs.date }}' | |
restore-keys: | | |
phpstan-result-cache- | |
- name: Install Composer dependencies | |
uses: ramsey/composer-install@3cf229dc2919194e9e36783941438d17239e8520 # v3.1.1 | |
- name: Make Composer packages available globally | |
run: echo "${PWD}/vendor/bin" >> "$GITHUB_PATH" | |
- name: Run PHP static analysis tests | |
id: phpstan | |
run: phpstan analyse -vvv --error-format=checkstyle | cs2pr | |
- name: Save result cache | |
uses: actions/cache@0400d5f644dc74513175e3cd8d07132dd4860809 # v4.2.4 | |
if: ${{ !cancelled() }} | |
with: | |
path: tests/_output | |
key: 'phpstan-result-cache-${{ runner.os }}-date-${{ steps.get-date.outputs.date }}' | |
# Runs the PHPUnit tests for WordPress. | |
# | |
# Performs the following steps: | |
# - Sets environment variables. | |
# - Checks out the repository. | |
# - Sets up PHP. | |
# - Installs Composer dependencies. | |
# - Sets up Node.js. | |
# - Installs npm dependencies. | |
# - Starts the WordPress Docker testing environment (with or without Xdebug coverage). | |
# - Logs PHP and WordPress versions from the container. | |
# - Runs PHPUnit tests (with coverage if enabled). | |
# - Uploads code coverage report to Codecov.io (if coverage is enabled). | |
# - Uploads HTML coverage report as an artifact (if coverage is enabled). | |
phpunit: | |
name: Test PHP ${{ matrix.php }} WP ${{ matrix.wp }}${{ matrix.coverage && ' with coverage' || '' }} | |
runs-on: ubuntu-24.04 | |
strategy: | |
fail-fast: false | |
matrix: | |
php: ['8.4', '8.3', '8.2', '8.1', '8.0', '7.4'] | |
wp: [latest, trunk] | |
coverage: [false] | |
include: | |
- php: '8.4' | |
wp: latest | |
coverage: true | |
env: | |
WP_ENV_PHP_VERSION: ${{ matrix.php }} | |
WP_ENV_CORE: ${{ matrix.wp == 'trunk' && 'WordPress/WordPress' || format( 'https://wordpress.org/wordpress-{0}.zip', matrix.wp ) }} | |
steps: | |
- name: Configure environment variables | |
run: | | |
echo "PHP_FPM_UID=$(id -u)" >> "$GITHUB_ENV" | |
echo "PHP_FPM_GID=$(id -g)" >> "$GITHUB_ENV" | |
- name: Checkout repository | |
uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0 | |
with: | |
show-progress: ${{ runner.debug == '1' && 'true' || 'false' }} | |
persist-credentials: false | |
## | |
# This allows Composer dependencies to be installed using a single step. | |
# | |
# Since the tests are currently run within the Docker containers where the PHP version varies, | |
# the same PHP version needs to be configured for the action runner machine so that the correct | |
# dependency versions are installed and cached. | |
## | |
- name: Set up PHP | |
uses: shivammathur/setup-php@ec406be512d7077f68eed36e63f4d91bc006edc4 # v2.35.4 | |
with: | |
php-version: '${{ matrix.php }}' | |
coverage: none | |
- name: Install Composer dependencies | |
uses: ramsey/composer-install@3cf229dc2919194e9e36783941438d17239e8520 # v3.1.1 | |
- name: Setup Node | |
uses: actions/setup-node@a0853c24544627f65ddf259abe73b1d18a591444 # v5.0.0 | |
with: | |
cache: 'npm' | |
node-version-file: '.nvmrc' | |
- name: Install NPM dependencies | |
run: npm ci | |
- name: Start the Docker testing environment | |
uses: nick-fields/retry@ce71cc2ab81d554ebbe88c79ab5975992d79ba08 # v3.0.2 | |
with: | |
timeout_minutes: 10 | |
max_attempts: 3 | |
command: | | |
if [ "${{ matrix.coverage }}" == "true" ]; then | |
npm run wp-env start -- --xdebug=coverage | |
else | |
npm run wp-env start | |
fi | |
- name: Log versions | |
run: | | |
npm run wp-env -- run cli php -- -v | |
npm run wp-env -- run cli wp core version | |
- name: Run PHPUnit tests${{ matrix.coverage && ' with coverage report' || '' }} | |
id: phpunit | |
run: | | |
npm run test:php | |
- name: Upload code coverage report | |
continue-on-error: true | |
if: ${{ matrix.coverage }} | |
uses: codecov/codecov-action@5a1091511ad55cbe89839c7260b706298ca349f7 # v5.5.1 | |
with: | |
token: ${{ secrets.CODECOV_TOKEN }} | |
files: tests/_output/php-coverage.xml | |
flags: unit | |
fail_ci_if_error: true | |
- name: Upload HTML coverage report as artifact | |
if: ${{ matrix.coverage }} | |
uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2 | |
with: | |
name: wp-code-coverage-${{ matrix.php }}-${{ matrix.wp }} | |
path: tests/_output/html | |
overwrite: true | |
# Runs JavaScript code quality checks. | |
# | |
# Performs the following steps: | |
# - Checks out the repository. | |
# - Sets up Node.js. | |
# - Installs NPM dependencies. | |
# - Runs Prettier formatting check. | |
# - Runs JavaScript linting. | |
# - Runs TypeScript type checking. | |
jslint: | |
name: Run JavaScript code quality checks | |
runs-on: ubuntu-24.04 | |
permissions: | |
contents: read | |
timeout-minutes: 20 | |
steps: | |
- name: Checkout repository | |
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 | |
with: | |
show-progress: ${{ runner.debug == '1' && 'true' || 'false' }} | |
persist-credentials: false | |
- name: Setup Node.js | |
uses: actions/setup-node@v4 | |
with: | |
cache: 'npm' | |
node-version-file: '.nvmrc' | |
- name: Install NPM dependencies | |
run: npm ci | |
- name: Run Prettier format check | |
run: npm run format | |
- name: Run JavaScript linting | |
run: npm run lint:js | |
- name: Run TypeScript type checking | |
run: npm run typecheck | |
# Runs JavaScript tests for the client package. | |
# | |
# Performs the following steps: | |
# - Checks out the repository. | |
# - Sets up Node.js. | |
# - Installs NPM dependencies. | |
# - Runs JavaScript tests with coverage. | |
# - Uploads coverage reports. | |
jstest: | |
name: Run JavaScript tests | |
runs-on: ubuntu-24.04 | |
permissions: | |
contents: read | |
timeout-minutes: 20 | |
steps: | |
- name: Checkout repository | |
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 | |
with: | |
show-progress: ${{ runner.debug == '1' && 'true' || 'false' }} | |
persist-credentials: false | |
- name: Setup Node.js | |
uses: actions/setup-node@v4 | |
with: | |
cache: 'npm' | |
node-version-file: '.nvmrc' | |
- name: Install NPM dependencies | |
run: npm ci | |
- name: Run JavaScript tests with coverage | |
run: npm run test:client:coverage | |
- name: Upload JavaScript coverage to Codecov | |
uses: codecov/codecov-action@0565863a31f2c772f9f0395002a31e3f06189574 # v5.4.0 | |
with: | |
token: ${{ secrets.CODECOV_TOKEN }} | |
files: packages/client/coverage/lcov.info | |
flags: javascript | |
fail_ci_if_error: true | |
- name: Upload JavaScript coverage report as artifact | |
uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2 | |
with: | |
name: javascript-coverage-report | |
path: packages/client/coverage/lcov-report | |
overwrite: true |