Skip to content

Try: Run tests using wp-now instead of wp-env #1456

Try: Run tests using wp-now instead of wp-env

Try: Run tests using wp-now instead of wp-env #1456

Workflow file for this run

name: Lint and Test
on:
push:
branches:
- main
pull_request:
# 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
permissions: {}
jobs:
lint-js:
name: JS Lints
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Setup Node
uses: actions/setup-node@v4
with:
node-version-file: '.nvmrc'
cache: npm
- name: Install dependencies
run: npm ci
- name: package.json Lint
run: npm run lint:pkg-json
- name: Type checking
run: npm run build:package-types
- name: Lint JS
run: npm run lint:js
- name: Lint CSS
run: npm run lint:css
- name: Lint Markdown
run: npm run lint:md:docs
bundle-size:
name: Bundle size check
runs-on: ubuntu-latest
permissions:
pull-requests: write
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Setup Node
uses: actions/setup-node@v4
with:
node-version-file: '.nvmrc'
cache: npm
- name: Install dependencies
run: npm ci
- name: Bundle size check
uses: preactjs/compressed-size-action@v2
with:
pattern: 'build/*.{js,css,wasm}'
strip-hash: "\\.(\\w{8})\\.wasm$"
build-script: 'build'
minimum-change-threshold: 100
lint-php:
name: PHP Lints
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Setup PHP
uses: shivammathur/setup-php@v2
with:
php-version: latest
coverage: none
tools: composer, cs2pr
- name: Install PHP dependencies
uses: ramsey/composer-install@83af392bf5f031813d25e6fe4cd626cdba9a2df6
with:
composer-options: '--prefer-dist --no-scripts'
- name: Validate composer.json
run: composer validate --no-check-all --strict
- name: Lint PHP
run: composer lint
unit-js:
name: JS Tests
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Setup Node
uses: actions/setup-node@v4
with:
node-version-file: '.nvmrc'
cache: npm
- name: Install dependencies
run: npm ci
- name: Run tests
run: npm run test:unit -- --collectCoverage
- name: Upload code coverage report
uses: codecov/[email protected]
with:
file: artifacts/logs/lcov.info
flags: js
token: ${{ secrets.CODECOV_TOKEN }}
unit-php:
name: 'PHP ${{ matrix.php }} - WP ${{ matrix.wp }}'
runs-on: ubuntu-latest
services:
mysql:
image: mariadb:lts
env:
MARIADB_ALLOW_EMPTY_ROOT_PASSWORD: true
MARIADB_DATABASE: wordpress_test
MARIADB_MYSQL_LOCALHOST_USER: 1
MARIADB_MYSQL_LOCALHOST_GRANTS: USAGE
ports:
- 3306
options: --health-cmd="healthcheck.sh --su-mysql --connect --innodb_initialized" --health-interval=10s --health-timeout=5s --health-retries=3
continue-on-error: ${{ matrix.experimental }}
strategy:
matrix:
php: ['8.2', '8.1', '8.0']
wp: ['latest']
coverage: [false]
experimental: [false]
include:
- php: '8.3'
wp: 'latest'
coverage: true
experimental: false
- php: '8.3'
wp: 'trunk'
experimental: true
- php: '8.4'
wp: 'trunk'
experimental: true
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Setup PHP
uses: shivammathur/setup-php@v2
with:
php-version: ${{ matrix.php }}
extensions: mysql
coverage: xdebug
tools: composer, cs2pr
- name: Shutdown default MySQL service
run: sudo service mysql stop
- name: Verify MariaDB connection
run: |
while ! mysqladmin ping -h"127.0.0.1" -P"${{ job.services.mysql.ports[3306] }}" --silent; do
sleep 1
done
- name: Set up tests
run: bash bin/install-wp-tests.sh wordpress_test root '' 127.0.0.1:${{ job.services.mysql.ports['3306'] }} ${{ matrix.wp }} true
- name: Install PHP dependencies
uses: 'ramsey/composer-install@v2'
with:
composer-options: '--prefer-dist --no-progress --no-interaction --no-scripts'
# Installs a different PHPUnit version depending on the WP/PHP version combo we're testing against.
#
# | WP / PHP | PHPUnit |
# |-----------|---------|
# | * / 5.6 | 5 |
# | * / 7.4 | 9 |
# | * / 8 | 9 |
#
# See https://make.wordpress.org/core/handbook/references/phpunit-compatibility-and-wordpress-versions/
- name: Update PHPUnit
run: |
if [[ $PHP_VERSION == "8.0" || $PHP_VERSION == "8.1" || $PHP_VERSION == "8.2" ]]; then
echo "Installing latest version of PHPUnit"
composer update --ignore-platform-reqs --no-interaction --no-scripts yoast/phpunit-polyfills --with-dependencies --with "phpunit/phpunit:^9.6"
fi
env:
WP_VERSION: ${{ matrix.wp }}
PHP_VERSION: ${{ matrix.php }}
- name: Run tests
run: |
composer test
composer test:multisite
if: ${{ ! matrix.coverage }}
- name: Run tests with coverage
run: |
composer test -- --coverage-clover coverage.xml
composer test:multisite -- --coverage-clover coverage-multisite.xml
if: ${{ matrix.coverage }}
- name: Upload code coverage report
uses: codecov/[email protected]
with:
file: artifacts/coverage.xml
flags: default
token: ${{ secrets.CODECOV_TOKEN }}
if: ${{ matrix.coverage }}
- name: Upload code coverage report
uses: codecov/[email protected]
with:
file: coverage-multisite.xml
flags: multisite
token: ${{ secrets.CODECOV_TOKEN }}
if: ${{ matrix.coverage }}
plugin-check:
name: Plugin Check
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Setup PHP
uses: shivammathur/setup-php@v2
with:
php-version: latest
coverage: none
tools: wp-cli
- name: Install latest version of dist-archive-command
run: wp package install wp-cli/dist-archive-command:dev-main
- name: Setup Node
uses: actions/setup-node@v4
with:
node-version-file: '.nvmrc'
cache: npm
- name: Install dependencies
run: npm ci
- name: Build plugin
run: |
npm run build
wp dist-archive . ./media-experiments.zip
mkdir tmp-build
unzip media-experiments.zip -d tmp-build
- name: Run plugin check
uses: WordPress/plugin-check-action@v1
with:
build-dir: './tmp-build/media-experiments'
wp-version: 'trunk'
exclude-checks: |
late_escaping
plugin_review_phpcs
trademarks
plugin_readme
plugin_updater