Opened 4 weeks ago
Closed 2 weeks ago
#66069 closed task (blessed) (fixed)
Trim the PHPUnit test matrix to supported MySQL and MariaDB LTS versions, with full coverage on the weekly run
| Reported by: | lancewillett | Owned by: | lancewillett |
|---|---|---|---|
| Priority: | normal | Milestone: | 7.2 |
| Component: | Build/Test Tools | Version: | |
| Severity: | normal | Keywords: | has-patch has-unit-tests |
| Cc: | Focuses: |
Description
#65736 trimmed the PHP axis of the PHPUnit matrix to boundary versions on push and pull request events, with the weekly scheduled run still covering every supported PHP version. Its description named a database-axis trim on the same principle as a separate follow-up. This is that follow-up.
Today
Every push and pull request runs the three boundary PHP versions against four MySQL versions and seven MariaDB versions, single site and multisite. With the memcached, alternate-domain, report, HTML API, innovation-release, and PHP 8.6 jobs, that is 86 PHPUnit jobs per run, from phpunit-tests.yml on trunk as of 2026-09-08. The weekly scheduled run is 182.
Four of the eleven database versions have reached end of life:
| Version | End of life | Share of WordPress sites |
|---|---|---|
| MySQL 8.0 | 2026-04-30 | 14.1% |
| MariaDB 10.3 | 2023-05-25 | 1.6% |
| MariaDB 10.5 | 2025-06-24 | 3.9% |
| MariaDB 10.6 | 2026-07-06 | 9.7% |
MySQL 5.7 and MariaDB 5.5 are also past end of life, but they are the floor of the matrix. 5.7 is the oldest MySQL with a working Docker image, and MariaDB 5.5 stands in for MySQL 5.5, as the workflow comments explain. They stay.
Proposal
On push and pull request events, test each engine's floor plus its currently supported LTS releases:
- MySQL: 5.7, 8.4, 9.7 (drops 8.0)
- MariaDB: 5.5, 10.11, 11.4, 11.8 (drops 10.3, 10.5, 10.6)
The weekly scheduled run keeps the full lists, using the same github.event_name == 'schedule' conditional that #65736 introduced for the php axis. Nothing loses coverage. The end-of-life versions move from every push to once a week.
That takes a push or pull request run from 86 PHPUnit jobs to 62, about 28% fewer. Engines, site modes, memcached, the alternate-domain and report jobs, the HTML API group, and the innovation-release and PHP 8.6 jobs are unchanged.
Why
Same reasoning as #65736 and #64083. The intermediate versions add job count without adding coverage. Database behavior that affects the test suite changes at the floor, in SQL modes and character set handling, and on the newest release, not in the end-of-life versions between them. The immediate benefit is at release time, when many backports land on the current branch at once and the full matrix floods the shared runner pool.
Notes
- Site share figures are from https://api.wordpress.org/stats/mysql/1.0/ on 2026-09-08. Lifecycle dates are from the vendors via https://endoflife.date/mysql and https://endoflife.date/mariadb.
- MariaDB 12.3 has been the current LTS since 2026-05-28 and is not in the matrix yet, and the innovation-release job's MariaDB 12.1 reached end of life on 2026-02-13. Adding 12.3 could ride along here (six more jobs on the trimmed list) or go in its own ticket.
- Older branches can follow trunk in separate changes, as #65736 did for 7.0, 6.9, and 6.8.
Use of AI tools: Claude Code helped gather the lifecycle and usage figures and draft this description. Verified manually.
Change History (39)
This ticket was mentioned in PR #13447 on WordPress/wordpress-develop by @lancewillett.
4 weeks ago
#1
- Keywords has-patch added
@lancewillett commented on PR #13447:
4 weeks ago
#3
#5
@
3 weeks ago
- Resolution fixed
- Status closed → reopened
Reopening for the release branches, following #65736, which carried the PHP-axis trim to 7.0, 6.9, and 6.8 in separate changes.
The branches still test the full MySQL and MariaDB lists on every push and pull request. When a batch of backports lands across branches at once, those jobs add up. MySQL and MariaDB jobs per pull request run:
| Branch | Before | After |
| 7.1 | 73 | 55 |
| 7.0 | 67 | 55 |
| 6.9 | 87 | 71 |
| 6.8 | 87 | 63 |
Scheduled runs only fire from the default branch, so a branch has no weekly full run to fall back on. These changes keep the full lists on workflow_dispatch instead, which is how test-old-branches.yml runs each branch every month. The dropped versions move from every push to that monthly run, so no branch loses coverage.
6.8 drops MariaDB 10.3, 10.4, and 10.5. 7.0 and 6.9 drop MariaDB 10.3 and 10.5. 7.1 drops those two plus MySQL 9.7, matching trunk. Branches 6.7 and older already run much shorter database lists, so this stops at 6.8.
This ticket was mentioned in PR #13540 on WordPress/wordpress-develop by @lancewillett.
3 weeks ago
#6
Carries the routine database trim from r63584 to the 7.1 branch.
- MySQL: 5.7, 8.0, and 8.4 on pushes and pull requests. 9.7 runs on dispatched runs.
- MariaDB: 5.5, 10.6, 10.11, 11.4, and 11.8 on pushes and pull requests. 10.3 and 10.5 run on dispatched runs.
Scheduled runs only fire from the default branch, so this keys the full lists on workflow_dispatch rather than schedule. test-old-branches.yml dispatches this branch's PHPUnit workflow twice a month, so the dropped versions keep running there.
The PHP axis in this file still keys on schedule, which never fires on a branch. That is left alone to keep this change to the database axis.
MySQL and MariaDB jobs on a pull request: 73 → 55. Dispatched runs: 73, unchanged.
## Validation
- Expanded both matrices for
pull_requestandworkflow_dispatch, before and after: 73 → 55 and 73 → 73. actionlintandzizmor --persona=regularreport the same findings before and after.
## Use of AI tools
AI assistance: Yes
Tool(s): Claude Code
Model(s): Claude Opus 5
Used for: Measuring job counts, the workflow edit, matrix validation, and drafting this description. Reviewed by me.
This ticket was mentioned in PR #13541 on WordPress/wordpress-develop by @lancewillett.
3 weeks ago
#7
Carries the routine MariaDB trim from r63584 to the 7.0 branch. The MySQL list already matches trunk's routine set.
- MariaDB: 5.5, 10.6, 10.11, 11.4, and 11.8 on pushes and pull requests. 10.3 and 10.5 run on dispatched runs.
Scheduled runs only fire from the default branch, so this keys the full list on workflow_dispatch rather than schedule. test-old-branches.yml dispatches this branch's PHPUnit workflow monthly, so the dropped versions keep running there.
MySQL and MariaDB jobs on a pull request: 67 → 55. Dispatched runs: 67, unchanged.
## Validation
- Expanded both matrices for
pull_requestandworkflow_dispatch, before and after: 67 → 55 and 67 → 67. actionlintandzizmor --persona=regularreport the same findings before and after.
## Use of AI tools
AI assistance: Yes
Tool(s): Claude Code
Model(s): Claude Opus 5
Used for: Measuring job counts, the workflow edit, matrix validation, and drafting this description. Reviewed by me.
This ticket was mentioned in PR #13542 on WordPress/wordpress-develop by @lancewillett.
3 weeks ago
#8
Carries the routine MariaDB trim from r63584 to the 6.9 branch. The MySQL list already matches trunk's routine set.
- MariaDB: 5.5, 10.6, 10.11, 11.4, and 11.8 on pushes and pull requests. 10.3 and 10.5 run on dispatched runs.
Scheduled runs only fire from the default branch, so this keys the full list on workflow_dispatch rather than schedule. test-old-branches.yml dispatches this branch's PHPUnit workflow monthly, so the dropped versions keep running there.
MySQL and MariaDB jobs on a pull request: 87 → 71. Dispatched runs: 87, unchanged.
## Validation
- Expanded both matrices for
pull_requestandworkflow_dispatch, before and after: 87 → 71 and 87 → 87. actionlintandzizmor --persona=regularreport the same findings before and after. The one existingactionlinterror, anexcludenaming PHP 7.3, predates this change.
## Use of AI tools
AI assistance: Yes
Tool(s): Claude Code
Model(s): Claude Opus 5
Used for: Measuring job counts, the workflow edit, matrix validation, and drafting this description. Reviewed by me.
This ticket was mentioned in PR #13543 on WordPress/wordpress-develop by @lancewillett.
3 weeks ago
#9
Carries the routine MariaDB trim from r63584 to the 6.8 branch. The MySQL list already matches trunk's routine set.
- MariaDB: 5.5, 10.6, 10.11, and 11.4 on pushes and pull requests. 10.3, 10.4, and 10.5 run on dispatched runs. 11.8 is not in this branch's list, so it is not added.
Scheduled runs only fire from the default branch, so this keys the full list on workflow_dispatch rather than schedule. test-old-branches.yml dispatches this branch's PHPUnit workflow monthly, so the dropped versions keep running there.
MySQL and MariaDB jobs on a pull request: 87 → 63. Dispatched runs: 87, unchanged.
## Validation
- Expanded both matrices for
pull_requestandworkflow_dispatch, before and after: 87 → 63 and 87 → 87. actionlintandzizmor --persona=regularreport the same findings before and after.
## Use of AI tools
AI assistance: Yes
Tool(s): Claude Code
Model(s): Claude Opus 5
Used for: Measuring job counts, the workflow edit, matrix validation, and drafting this description. Reviewed by me.
@lancewillett commented on PR #13542:
3 weeks ago
#10
The failing Run actionlint check here predates this PR. r62945 removed PHP 7.3 from the 6.9 matrix but left an exclusion that names it, and the lint check only runs on 6.9 when a workflow file changes.
Fixed separately in https://github.com/WordPress/wordpress-develop/pull/13544. The other branch PRs, #13540, #13541, and #13543, pass actionlint.
This ticket was mentioned in PR #13547 on WordPress/wordpress-develop by @desrosj.
3 weeks ago
#11
This is an alternative approach to #13447 and #12719.
In r62858 and r63584, the PHP and database version matrix values were trimmed for the majority of triggering events. However, the use of inline JSON makes it really difficult to understand which versions are being tested and when.
This converts these matrix values to use exclude statements based on a conditional matrix value that determines the desired depth of combinations to test.
Trac ticket: Core-66069.
Use of AI Tools
Claude was used to create this PR. Reviewed by me.
@desrosj commented on PR #13540:
3 weeks ago
#12
The changes themselves look fine. However, I find the new syntax to be pretty hard to read. I've opened #13547 to propose a different syntax to accomplish the same thing. Not a hill I am going to die on, but happy for you to at least consider this as a suggestion to improve readability.
@desrosj commented on PR #13541:
3 weeks ago
#13
I did just notice that there's no support for the full matrix label in this branch, though. Is that intentional?
@desrosj commented on PR #13540:
3 weeks ago
#14
Is it intentional to not support the full matrix label in this branch?
@lancewillett commented on PR #13547:
3 weeks ago
#15
@desrosj Could you please also create backport PRs for older WP versions? 7.1, 7.0, 6.9, and 6.8 I believe
@lancewillett commented on PR #13540:
3 weeks ago
#16
@desrosj Let's go with the new syntax
Is it intentional to not support the full matrix label in this branch?
Yes. I'd kept this PR scoped to the database trim from r63584. The Full PHPUnit Matrix label support landed separately in r63585 and hasn't been backported to 7.1 yet.
Good point, though: the dispatched runs retain full database coverage, but still use the reduced PHP matrix. They don't provide the same coverage or PR-visible results as the label.
What do you think about backporting the label support to 7.1 alongside this change, so reviewers can request the full matrix when needed? CC @adimoldovan
@lancewillett commented on PR #13540:
3 weeks ago
#17
@lancewillett commented on PR #13541:
3 weeks ago
#18
@lancewillett commented on PR #13542:
3 weeks ago
#19
@lancewillett commented on PR #13543:
3 weeks ago
#20
This ticket was mentioned in PR #13637 on WordPress/wordpress-develop by @lancewillett.
2 weeks ago
#23
- Keywords has-unit-tests added
Replaces #13540 with the explicit matrix lists and conditional exclusions from r63779, and adds the label-triggered full matrix from r63585 to the 7.1 branch. The database trim follows r63584.
Routine pushes and pull requests keep the branch's current boundary PHP versions and trim the database list. Adding Full PHPUnit Matrix starts a separate full run without a code push; subsequent commits keep full coverage while the label remains. Dispatched runs also test the full PHP and database lists, so scheduled testing of older branches retains that coverage.
| MySQL and MariaDB jobs | Before | After |
| --- | ---: | ---: |
| Routine PR | 72 | 54 |
| Dispatch | 72 | 160 |
| PR with full-matrix label | 72 | 160 |
Full runs restore the historical PHP list: 7.4, 8.0, 8.1, 8.2, 8.3, 8.4, 8.5. Routine runs retain 7.4, 8.0, 8.5. Existing memcached, alternate-domain, report, HTML API, and fork configurations are preserved. The counts above exclude innovation-release and other job groups.
The separate label workflow follows trunk's implementation and matches this branch's existing PHPUnit path filters. Unrelated labels do not enter the reusable workflow or cancel active tests. Contributors without label access can ask a reviewer to add it, as documented in tests/phpunit/README.md.
Validation
- Actionlint and
git diff --checkpassed. - 54 exact matrix comparisons for this branch covered push, PR, schedule, dispatch, and called-workflow contexts, with and without the full-matrix label. Full lists were checked against the pre-trim workflow history; routine jobs were checked against the current branch with only the intended database removals.
- Verified unchanged special jobs and reusable-workflow inputs, matching normal/label path filters, and the existing concurrency behavior.
- Zizmor's existing branch findings are unchanged. The new local reusable-workflow reference adds one low-severity
self-repositorysyntax suggestion, matching trunk's existing pattern. - GitHub Actions results will be available on this PR. Live label-triggered execution has not yet been verified on this branch.
This needs a second committer's review before SVN landing. Keep #66069 open until all four branch changes have landed.
Use of AI tools
AI assistance: Yes.
Tool: Codex.
Model: GPT-6.
Used for: Workflow implementation, matrix validation, review, and this description. Reviewed by me.
This ticket was mentioned in PR #13638 on WordPress/wordpress-develop by @lancewillett.
2 weeks ago
#24
Replaces #13541 with the explicit matrix lists and conditional exclusions from r63779, and adds the label-triggered full matrix from r63585 to the 7.0 branch. The database trim follows r63584.
Routine pushes and pull requests keep the branch's current boundary PHP versions and trim the database list. Adding Full PHPUnit Matrix starts a separate full run without a code push; subsequent commits keep full coverage while the label remains. Dispatched runs also test the full PHP and database lists, so scheduled testing of older branches retains that coverage.
| MySQL and MariaDB jobs | Before | After |
| --- | ---: | ---: |
| Routine PR | 66 | 54 |
| Dispatch | 66 | 146 |
| PR with full-matrix label | 66 | 146 |
Full runs restore the historical PHP list: 7.4, 8.0, 8.1, 8.2, 8.3, 8.4, 8.5. Routine runs retain 7.4, 8.0, 8.5. Existing memcached, alternate-domain, report, HTML API, and fork configurations are preserved. The counts above exclude innovation-release and other job groups.
The separate label workflow follows trunk's implementation and matches this branch's existing PHPUnit path filters. Unrelated labels do not enter the reusable workflow or cancel active tests. Contributors without label access can ask a reviewer to add it, as documented in tests/phpunit/README.md.
Validation
- Actionlint and
git diff --checkpassed. - 54 exact matrix comparisons for this branch covered push, PR, schedule, dispatch, and called-workflow contexts, with and without the full-matrix label. Full lists were checked against the pre-trim workflow history; routine jobs were checked against the current branch with only the intended database removals.
- Verified unchanged special jobs and reusable-workflow inputs, matching normal/label path filters, and the existing concurrency behavior.
- Zizmor's existing branch findings are unchanged. The new local reusable-workflow reference adds one low-severity
self-repositorysyntax suggestion, matching trunk's existing pattern. - GitHub Actions results will be available on this PR. Live label-triggered execution has not yet been verified on this branch.
This needs a second committer's review before SVN landing. Keep #66069 open until all four branch changes have landed.
Use of AI tools
AI assistance: Yes.
Tool: Codex.
Model: GPT-6.
Used for: Workflow implementation, matrix validation, review, and this description. Reviewed by me.
This ticket was mentioned in PR #13639 on WordPress/wordpress-develop by @lancewillett.
2 weeks ago
#25
Replaces #13542 with the explicit matrix lists and conditional exclusions from r63779, and adds the label-triggered full matrix from r63585 to the 6.9 branch. The database trim follows r63584.
Routine pushes and pull requests keep the branch's current boundary PHP versions and trim the database list. Adding Full PHPUnit Matrix starts a separate full run without a code push; subsequent commits keep full coverage while the label remains. Dispatched runs also test the full PHP and database lists, so scheduled testing of older branches retains that coverage.
| MySQL and MariaDB jobs | Before | After |
| --- | ---: | ---: |
| Routine PR | 86 | 70 |
| Dispatch | 86 | 186 |
| PR with full-matrix label | 86 | 186 |
Full runs restore the historical PHP list: 7.2, 7.3, 7.4, 8.0, 8.1, 8.2, 8.3, 8.4, 8.5. Routine runs retain 7.2, 7.4, 8.0, 8.5. Existing memcached, alternate-domain, report, HTML API, and fork configurations are preserved. The counts above exclude innovation-release and other job groups.
Restore the PHP 7.3/MySQL 9 compatibility exclusion alongside the full PHP list.
The separate label workflow follows trunk's implementation and matches this branch's existing PHPUnit path filters. Unrelated labels do not enter the reusable workflow or cancel active tests. Contributors without label access can ask a reviewer to add it, as documented in tests/phpunit/README.md.
Validation
- Actionlint and
git diff --checkpassed. - 54 exact matrix comparisons for this branch covered push, PR, schedule, dispatch, and called-workflow contexts, with and without the full-matrix label. Full lists were checked against the pre-trim workflow history; routine jobs were checked against the current branch with only the intended database removals.
- Verified unchanged special jobs and reusable-workflow inputs, matching normal/label path filters, and the existing concurrency behavior.
- Zizmor's existing branch findings are unchanged. The new local reusable-workflow reference adds one low-severity
self-repositorysyntax suggestion, matching trunk's existing pattern. - GitHub Actions results will be available on this PR. Live label-triggered execution has not yet been verified on this branch.
This needs a second committer's review before SVN landing. Keep #66069 open until all four branch changes have landed.
Use of AI tools
AI assistance: Yes.
Tool: Codex.
Model: GPT-6.
Used for: Workflow implementation, matrix validation, review, and this description. Reviewed by me.
This ticket was mentioned in PR #13640 on WordPress/wordpress-develop by @lancewillett.
2 weeks ago
#26
Replaces #13543 with the explicit matrix lists and conditional exclusions from r63779, and adds the label-triggered full matrix from r63585 to the 6.8 branch. The database trim follows r63584.
Routine pushes and pull requests keep the branch's current boundary PHP versions and trim the database list. Adding Full PHPUnit Matrix starts a separate full run without a code push; subsequent commits keep full coverage while the label remains. Dispatched runs also test the full PHP and database lists, so scheduled testing of older branches retains that coverage.
| MySQL and MariaDB jobs | Before | After |
| --- | ---: | ---: |
| Routine PR | 86 | 62 |
| Dispatch | 86 | 166 |
| PR with full-matrix label | 86 | 166 |
Full runs restore the historical PHP list: 7.2, 7.3, 7.4, 8.0, 8.1, 8.2, 8.3, 8.4. Routine runs retain 7.2, 7.4, 8.0, 8.4. Existing memcached, alternate-domain, report, HTML API, and fork configurations are preserved. The counts above exclude innovation-release and other job groups.
Restore the PHP 7.3/MySQL 9 compatibility exclusion alongside the full PHP list.
The separate label workflow follows trunk's implementation and matches this branch's existing PHPUnit path filters. Unrelated labels do not enter the reusable workflow or cancel active tests. Contributors without label access can ask a reviewer to add it, as documented in tests/phpunit/README.md.
Validation
- Actionlint and
git diff --checkpassed. - 54 exact matrix comparisons for this branch covered push, PR, schedule, dispatch, and called-workflow contexts, with and without the full-matrix label. Full lists were checked against the pre-trim workflow history; routine jobs were checked against the current branch with only the intended database removals.
- Verified unchanged special jobs and reusable-workflow inputs, matching normal/label path filters, and the existing concurrency behavior.
- Zizmor's existing branch findings are unchanged. The new local reusable-workflow reference adds one low-severity
self-repositorysyntax suggestion, matching trunk's existing pattern. - GitHub Actions results will be available on this PR. Live label-triggered execution has not yet been verified on this branch.
This needs a second committer's review before SVN landing. Keep #66069 open until all four branch changes have landed.
Use of AI tools
AI assistance: Yes.
Tool: Codex.
Model: GPT-6.
Used for: Workflow implementation, matrix validation, review, and this description. Reviewed by me.
@lancewillett commented on PR #13637:
2 weeks ago
#27
This PR, along with https://github.com/WordPress/wordpress-develop/pull/13638, https://github.com/WordPress/wordpress-develop/pull/13639, and https://github.com/WordPress/wordpress-develop/pull/13640 will need:
- at least 1 approval
- at least 2 core committer as 2nd reviewer
@lancewillett commented on PR #13638:
2 weeks ago
#28
This PR, along with https://github.com/WordPress/wordpress-develop/pull/13637, https://github.com/WordPress/wordpress-develop/pull/13639, and https://github.com/WordPress/wordpress-develop/pull/13640 will need:
- at least 1 approval
- at least 2 core committer as 2nd reviewer
@lancewillett commented on PR #13639:
2 weeks ago
#29
This PR, along with https://github.com/WordPress/wordpress-develop/pull/13637, https://github.com/WordPress/wordpress-develop/pull/13638, and https://github.com/WordPress/wordpress-develop/pull/13640 will need:
- at least 1 approval
- at least 2 core committer as 2nd reviewer
@lancewillett commented on PR #13640:
2 weeks ago
#30
This PR, along with https://github.com/WordPress/wordpress-develop/pull/13637, https://github.com/WordPress/wordpress-develop/pull/13638, and https://github.com/WordPress/wordpress-develop/pull/13639 will need:
- at least 1 approval
- at least 2 core committer as 2nd reviewer
![(please configure the [header_logo] section in trac.ini)](/chrome/site/your_project_logo.png)
Reduce the database versions tested on pushes, pull requests, and manual runs. Keep the complete database lists on the weekly schedule, following the existing PHP matrix pattern.
Routine runs drop from 86 to 62 jobs (28% fewer); weekly runs remain at 182. These totals include shared Gutenberg preparation and exclude notification and failure-handling jobs. Memcached, alternate-domain, reporting, HTML API, innovation-release, and PHP prerelease configurations are preserved.
Label-triggered full-matrix runs on PRs are tracked separately in https://core.trac.wordpress.org/ticket/66071.
## Validation
actionlint .github/workflows/phpunit-tests.ymluvx --offline zizmor@1.24.1 --persona=regular --offline .github/workflows/phpunit-tests.yml## Use of AI tools
AI assistance: Yes
Tool(s): Codex
Model(s): GPT-6, GPT-5.6
Used for: Workflow edits, matrix validation, code review, and drafting this description. I take responsibility for the submitted change.