Tech5 min read

WordPress Core Trims PR PHPUnit Tests to 3 PHP Versions, Cutting CI Jobs 52%

IkesanContents

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.

MetricChange
Jobs per runAbout 52% fewer
Job minutes per runAbout 54% fewer
Runs that needed a rerun to go greenAbout 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

BranchPRPHP versions tested on PRsHow dropped middle versions are caught
trunk#127197.4, 8.0, 8.5Weekly Sunday cron runs all versions
7.0#12720Oldest and newest (about 168 → about 72 combinations)None
6.8#127267.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.

FixChangeFailures it reduces
Gutenberg build fetchPer job → once per workflow runNetwork-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 failuresTransient 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