Skip to content

Refresh CI for WordPress 7.0 and consolidate quality gates#35

Merged
GaryJones merged 8 commits into
mainfrom
GaryJones/ci-refresh
Jun 11, 2026
Merged

Refresh CI for WordPress 7.0 and consolidate quality gates#35
GaryJones merged 8 commits into
mainfrom
GaryJones/ci-refresh

Conversation

@GaryJones

@GaryJones GaryJones commented Jun 11, 2026

Copy link
Copy Markdown
Owner

The workflow only ran on push, so pull requests from forks never received CI, and the test matrix still treated master as the latest WordPress even though 7.0 shipped in May. CI now runs on pull requests and manual dispatch, tests the two supported pairs (PHP 8.4 with WordPress 6.9, PHP 8.5 with WordPress 7.0), and bumps the pinned checkout and setup-php actions to their latest releases, with timeouts on both jobs.

The lint job now leans on the composer scripts so local runs and CI share one code path: composer lint covers the PHP and XML files, replacing the two xmllint actions, while PHPCS pipes through cs2pr for inline PR annotations. Strict composer validation, a normalisation check, Rector, PHPStan, and composer audit round out the static checks. Mutation testing runs once, on the latest PHP leg, and now fails properly because the Infection config gates on a minimum MSI; wp-env is pinned to 11.8.0 for reproducible integration environments, which now include a multisite run. Dependabot gains github-actions and npm ecosystems, so the SHA-pinned actions and the wp-env devDependency finally get update PRs, with Composer moving to weekly updates that group minor and patch bumps.

This PR merges last and is stacked on #34 (which stacks on #40), so it retargets to main automatically as each base merges and every layer stays green: #40 carries temporary unit/integration aliases and a bin/php-lint shim for the old workflow, and this PR removes them as it switches CI to the new entry points. Merge #36 first for the package.json devDependency the npm Dependabot ecosystem expects, and #37 for the refreshed Rector config. If #34 is declined, drop the PHPStan step here.

The push-only trigger meant pull requests from forks never received
CI feedback. Run on all pull requests, restrict pushes to main so
branches with open PRs are not built twice, and allow manual runs
via workflow_dispatch.
Refresh the SHA-pinned actions to their latest releases.
Replace the ChristophWurst/xmllint-action steps and the separate PHP
lint step with composer lint, so php-parallel-lint and bin/xml-lint
give one code path locally and in CI. Validate composer.json strictly,
check normalisation, and run PHPCS through cs2pr for inline PR
annotations. Add Rector (dry run), PHPStan, and composer audit so
static analysis and advisory checks run on every change. Drop the
deprecated --no-suggest install option and cap the job at 15 minutes.
WordPress 7.0 shipped on 2026-05-20, so the supported pairs are now
PHP 8.4 with WP 6.9 and PHP 8.5 with WP 7.0; the master leg goes as
only the latest two releases are supported. Use the new split test
scripts, adding a multisite integration run, and pin wp-env to
11.8.0 for reproducible environments. Infection now runs on the
latest PHP leg only and without continue-on-error, since its config
gates on a minimum MSI. Cap the job at 30 minutes.
The SHA-pinned workflow actions and the package.json devDependency
had no update coverage, so add github-actions and npm ecosystems
with weekly schedules and their own commit prefixes. Composer moves
from daily to weekly with minor and patch updates grouped into one
pull request to cut review noise, and all ecosystems now use the
dependencies label.
With the workflow now calling the new script names directly, the
deprecated unit and integration aliases and the bin/php-lint shim from
the testing branch have no remaining callers.
@GaryJones GaryJones changed the base branch from main to GaryJones/phpstan June 11, 2026 14:38
The ubuntu-latest image no longer ships libxml2-utils, so bin/xml-lint
failed with command not found once CI switched from the Docker-based
xmllint action to the shared composer lint script.
@GaryJones GaryJones force-pushed the GaryJones/ci-refresh branch from ef26f09 to 9fcd28d Compare June 11, 2026 14:46
Base automatically changed from GaryJones/phpstan to main June 11, 2026 18:12
@GaryJones GaryJones merged commit 825006e into main Jun 11, 2026
3 checks passed
@GaryJones GaryJones deleted the GaryJones/ci-refresh branch June 11, 2026 18:18
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant