WordPress Core Trims PR PHPUnit Tests to 3 PHP Versions, Cutting CI Jobs 52%
Contents
Make WordPress Core announced on July 30, 2026 a reduction of PHPUnit runs ahead of the 7.1 release.
PHPUnit runs one job per combination (matrix) of PHP and database versions. Running the full matrix simultaneously across a large number of PRs and backport branches was straining GitHub Actions capacity.
| Metric | Change |
|---|---|
| Jobs per run | About 52% fewer |
| Job minutes per run | About 54% fewer |
| Runs that needed a rerun to go green | About 68% → about 36% |
The post says the numbers come from comparable runs before and after the change, pulled through the GitHub Actions API and measured for job counts, run time, and rerun counts.
PRs now test only 3 PHP versions
| Branch | PR | PHP versions tested on PRs | How dropped middle versions are caught |
|---|---|---|---|
| trunk | #12719 | 7.4, 8.0, 8.5 | Weekly Sunday cron runs all versions |
| 7.0 | #12720 | Oldest and newest (about 168 → about 72 combinations) | None |
| 6.8 | #12726 | 7.2, 7.4, 8.0, 8.4 (about 198 → about 99 jobs) | Not stated |
On trunk, PR runs now test the oldest and newest ends of the PHP range, and failures on the dropped middle versions are caught by a weekly Sunday cron.
flowchart TD
PR[PRs and pushes] --> BASE[Run only the base matrix<br/>oldest and newest PHP]
BASE --> MERGE[Merge into trunk]
MERGE --> CRON[Sunday cron runs<br/>all PHP versions weekly]
CRON --> MID[Failures on middle versions<br/>are caught here]
PR #12719 for trunk removed the middle versions 8.1, 8.2, 8.3, and 8.4 from the base matrix.
The include jobs were outside the change, though, so some 8.3 and 8.4 jobs still run on PRs.
On the 7.0 branch, scheduled workflows only run from the default branch, so no trunk-style weekly full-matrix run is configured there.
The Make post writes that the supported PHP range is preserved and that redundant database combinations were removed.
The PR descriptions for #12719 and #12720, on the other hand, state that their scope at least is PHP versions only, leaving database versions, multisite, memcached, and the include jobs unchanged.
The 6.8 branch has more test combinations
The Make post lists trimming the 6.8 branch’s test combinations among its next steps.
On the PR side, #12726 takes the setup that ran every PHP version from 7.2 to 8.4 across three job groups and narrows it to the four versions in the table.
PHP 7.x stays in the tests in the first place because of WordPress’s usage threshold.
WordPress marks a PHP version as a candidate for removal when its share among monitored sites falls below about 5%; 7.2 and 7.3 dropped below 4% combined, and their removal was announced in January 2026.
WordPress 7.0 raises the minimum supported PHP to 7.4, which is what trunk’s PR tests starting at 7.4 correspond to.
The recommended version, 8.3 or later, is communicated separately from this minimum.
Because 6.8 keeps an older PHP floor, the versions it retains as its oldest and newest also differ from trunk and 7.0.
In security releases and dry runs that build multiple branches at once, 6.8’s larger matrix means more concurrent jobs.
Gutenberg fetches and Docker image pulls fail in different ways
Gutenberg builds also moved from a per-job fetch to a single fetch per workflow run.
Before the change, every job re-downloaded the same artifact, so there were as many network-dependent failure points as there were jobs.
The announcement credits this, combined with capped retries for Docker image pulls, for the drop in the share of runs that needed a rerun.
| Fix | Change | Failures it reduces |
|---|---|---|
| Gutenberg build fetch | Per job → once per workflow run | Network-dependent failures that scale with job count |
| Docker image pre-pull (#12703) | Pull Compose services before env:start; up to 3 attempts, waiting 10 and 20 seconds after failures | Transient Docker Hub and network failures |
The Docker image PR #12703 changes the reusable PHPUnit workflow to pull the required Compose services before env:start.
It covers wordpress-develop, php, mysql, and cli, adding memcached only when memcached is enabled.
The Docker pull retries are a separate fix from the job-count reduction; they reduce transient Docker Hub and network failures.
The run time of the PHPUnit test cases themselves does not change.
The Make post also notes that this round cuts job counts, and the tests themselves can still be tuned.
A proposal to cut PR tests even further came up
In the comments on the Make post, there was also a proposal to run even fewer tests on PRs and catch failures with scheduled tests after merging into trunk.
That would cut CI usage further, but failure detection would shift to after the merge.
References
- Make WordPress Core: Leaner, steadier PHPUnit runs for upcoming releases
- Make WordPress Core: Dropping support for PHP 7.2 and 7.3
- PHP Compatibility and WordPress Versions
- WordPress/wordpress-develop #12719
- WordPress/wordpress-develop #12720
- WordPress/wordpress-develop #12701
- WordPress/wordpress-develop #12726
- WordPress/wordpress-develop #12703