Make WordPress Core

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

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

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.

  • MySQL: retain 5.7, 8.4, and 9.7 on routine runs; test 8.0 weekly.
  • MariaDB: retain 5.5, 10.11, 11.4, and 11.8 on routine runs; test 10.3, 10.5, and 10.6 weekly.

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.yml
  • uvx --offline zizmor@1.24.1 --persona=regular --offline .github/workflows/phpunit-tests.yml
  • Expanded the before/after matrices for push, pull request, manual, and scheduled events. Confirmed 86 → 62 for each routine event and 182 → 182 weekly; every retained job configuration matches exactly, including reporting and other additional configurations.

## 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.

#2 @lancewillett
4 weeks ago

  • Owner set to lancewillett
  • Resolution → fixed
  • Status new → closed

In 63584:

Build/Test Tools: Trim the routine PHPUnit database matrix.

Test MySQL 5.7, 8.0, and 8.4 and MariaDB 5.5, 10.6, 10.11, 11.4, and 11.8 on pushes, pull requests, and manual runs. Keep the complete database matrix on the weekly schedule.

Reduce routine coverage from 86 to 68 jobs while retaining the 182-job weekly matrix. Preserve the reporting, memcached, alternate-domain, HTML API, innovation-release, and PHP prerelease configurations.

Developed in: ​https://github.com/WordPress/wordpress-develop/pull/13447

Props lucatume, adrianmoldovanwp.
Fixes #66069.

#4 @lancewillett
4 weeks ago

  • Milestone Awaiting Review → 7.2

#5 @lancewillett
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_request and workflow_dispatch, before and after: 73 → 55 and 73 → 73.
  • actionlint and zizmor --persona=regular report 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_request and workflow_dispatch, before and after: 67 → 55 and 67 → 67.
  • actionlint and zizmor --persona=regular report 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_request and workflow_dispatch, before and after: 87 → 71 and 87 → 87.
  • actionlint and zizmor --persona=regular report the same findings before and after. The one existing actionlint error, an exclude naming 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_request and workflow_dispatch, before and after: 87 → 63 and 87 → 87.
  • actionlint and zizmor --persona=regular report 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

#21 @lancewillett
2 weeks ago

In 63779:

Build/Test Tools: Simplify PHPUnit matrix definitions.

List PHP and database versions directly in YAML and use conditional exclusions to select reduced coverage. Preserve the existing combinations for normal runs, weekly runs, and pull requests with the Full PHPUnit Matrix label, including the additional matrix jobs.

Developed in: ​https://github.com/WordPress/wordpress-develop/pull/13547

Props desrosj, adrianmoldovanwp, lucatume.
See #66069.

#22 @lancewillett
2 weeks ago

This ticket should remain open until we land backports for 7.1 back to 6.8.

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 --check passed.
  • 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-repository syntax 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 --check passed.
  • 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-repository syntax 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 --check passed.
  • 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-repository syntax 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 --check passed.
  • 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-repository syntax 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.

#32 @lancewillett
2 weeks ago

In 63891:

Build/Test Tools: Trim PHPUnit runs in 7.1.

Keep boundary PHP versions and a reduced database matrix for routine runs. Restore the full PHP and database lists for dispatched runs and pull requests with the Full PHPUnit Matrix label.

Merges [63584], [63585], and [63779] to the 7.1 branch, adapted to its supported versions and scheduled dispatches.

Developed in: ​https://github.com/WordPress/wordpress-develop/pull/13637

Reviewed by: desrosj.
Props adrianmoldovanwp, desrosj, lucatume.
See #66071.
See #66069.

#35 @lancewillett
2 weeks ago

In 63892:

Build/Test Tools: Trim PHPUnit runs in 7.0.

Keep boundary PHP versions and a reduced database matrix for routine runs. Restore the full PHP and database lists for dispatched runs and pull requests with the Full PHPUnit Matrix label.

Merges [63584], [63585], and [63779] to the 7.0 branch, adapted to its supported versions and scheduled dispatches.

Developed in: ​https://github.com/WordPress/wordpress-develop/pull/13638

Reviewed by: desrosj.
Props adrianmoldovanwp, desrosj, lucatume.
See #66071.
See #66069.

#35 @lancewillett
2 weeks ago

In 63893:

Build/Test Tools: Trim PHPUnit runs in 6.9.

Keep boundary PHP versions and a reduced database matrix for routine runs. Restore the full PHP and database lists for dispatched runs and pull requests with the Full PHPUnit Matrix label.

Merges [63584], [63585], and [63779] to the 6.9 branch, adapted to its supported versions and scheduled dispatches.

Developed in: ​https://github.com/WordPress/wordpress-develop/pull/13639

Reviewed by: desrosj.
Props adrianmoldovanwp, desrosj, lucatume.
See #66071.
See #66069.

#38 @lancewillett
2 weeks ago

  • Resolution → fixed
  • Status reopened → closed

In 63894:

Build/Test Tools: Trim PHPUnit runs in 6.8.

Keep boundary PHP versions and a reduced database matrix for routine runs. Restore the full PHP and database lists for dispatched runs and pull requests with the Full PHPUnit Matrix label.

Merges [63584], [63585], and [63779] to the 6.8 branch, adapted to its supported versions and scheduled dispatches.

Developed in: ​https://github.com/WordPress/wordpress-develop/pull/13640

Reviewed by: desrosj.
Props adrianmoldovanwp, desrosj, lucatume.
See #66071.
Fixes #66069.

Note: See TracTickets for help on using tickets.