Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
27 commits
Select commit Hold shift + click to select a range
d6a8fe0
Site Health: Add missing dashicons class to error span fixes #65014
Webizito Apr 3, 2026
e107c19
Update src/wp-admin/includes/class-wp-site-health.php
Webizito Apr 4, 2026
712a680
Merge branch 'trunk' into fix/65014-site-health-dashicons
Webizito Apr 4, 2026
ed90582
Merge branch 'trunk' into fix/65014-site-health-dashicons
Webizito Apr 5, 2026
f75ff52
Merge branch 'trunk' into fix/65014-site-health-dashicons
Webizito Apr 7, 2026
4a07384
Merge branch 'trunk' into fix/65014-site-health-dashicons
Webizito Apr 9, 2026
340f755
Merge branch 'trunk' into fix/65014-site-health-dashicons
Webizito Apr 12, 2026
2164a3f
Merge branch 'trunk' into fix/65014-site-health-dashicons
Webizito Apr 14, 2026
e70359a
Merge branch 'trunk' into fix/65014-site-health-dashicons
Webizito Apr 17, 2026
4175de4
Merge branch 'trunk' into fix/65014-site-health-dashicons
Webizito Apr 20, 2026
51d7f72
Merge branch 'trunk' into fix/65014-site-health-dashicons
Webizito May 20, 2026
33125d5
Merge branch 'trunk' into fix/65014-site-health-dashicons
Webizito Jun 18, 2026
9eaa554
Charset: Limit _wp_scan_utf8() ASCII scan to remaining code points.
sirreal Jun 18, 2026
ddb792b
Performance: avoid over-allocation in wp_is_numeric_array()
dmsnell Jun 18, 2026
30a91a9
Build/Test Tools: Ensure all built files are deleted as expected.
desrosj Jun 18, 2026
49e7fff
Editor: Allow publish meta box action row to wrap.
aaronjorbin Jun 18, 2026
a7a7612
Docs: Correct variable reference in `wpdb::delete()` DocBlock.
SergeyBiryukov Jun 18, 2026
76c934f
Docs: Clarify return value semantics of `wpdb` query methods.
westonruter Jun 18, 2026
eafa314
KSES: Allow SVG presentation attributes in safe_style_css.
t-hamano Jun 19, 2026
601ede9
KSES: Add command and commandfor to the list of allowed attributes fo…
afercia Jun 19, 2026
08be8ca
Docs: Correct typo in a comment in `WP_Upgrader::install_package()`.
SergeyBiryukov Jun 19, 2026
c0678ef
Build/Test Tools: Include unversioned and binary files in change dete…
desrosj Jun 19, 2026
4e2c223
Build/Test Tools: Account for old branches in file checks.
desrosj Jun 19, 2026
e9823d5
Build/Test Tools: Change file filters for testing old branches.
desrosj Jun 19, 2026
7976257
Build/Test Tools: Revert [62533], [62534].
desrosj Jun 19, 2026
eddc96c
Docs: Correct typo in a comment in `wp_create_image_subsizes()`.
SergeyBiryukov Jun 20, 2026
2004d63
Update src/wp-admin/includes/class-wp-site-health.php
Webizito Jun 21, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .github/workflows/test-old-branches.yml
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ on:
- trunk
paths:
- '.github/workflows/test-old-branches.yml'
- '.github/workflows/reusable-phpunit-tests-v[1-2].yml'
- '.github/workflows/reusable-phpunit-tests-v[1-3].yml'
# Run twice a month on the 1st and 15th at 00:00 UTC.
schedule:
- cron: '0 0 1 * *'
Expand Down
128 changes: 90 additions & 38 deletions Gruntfile.js
Original file line number Diff line number Diff line change
Expand Up @@ -41,18 +41,43 @@ module.exports = function(grunt) {
'wp-admin/css/colors/**/*.css',
],

// Built js files, in /src or /build.
// Built JavaScript files that do not belong to a more specific group.
jsFiles = [
'wp-admin/js/',
'wp-includes/js/',
'wp-includes/js/*',
/*
* This directory has shared responsibility and is managed through
* gutenbergUnversionedFiles, webpackFiles, and copy:vendor-js.
*/
'!wp-includes/js/dist',
'wp-includes/js/dist/vendor/*.js',
// Managed by the Gutenberg-related tasks.
'!wp-includes/js/dist/vendor/react-jsx-runtime*',
],

// Files sourced from the Gutenberg repository built asset that are ignored by version control.
gutenbergUnversionedFiles = [
SOURCE_DIR + 'wp-includes/blocks/*/*.css',
SOURCE_DIR + 'wp-includes/css/dist',
SOURCE_DIR + 'wp-includes/js/dist/*.js',
SOURCE_DIR + 'wp-includes/js/dist/script-modules',
SOURCE_DIR + 'wp-includes/js/dist/vendor/react-jsx-runtime*',
],

// All files copied from the Gutenberg repository excluded from version control.
gutenbergFiles = [
'wp-includes/js/dist',
'wp-includes/css/dist',
// Old location kept temporarily to ensure they are cleaned up.
'wp-includes/icons',
// Files sourced from the Gutenberg repository built asset that are managed through version control.
gutenbergVersionedFiles = [
// Block assets (block.json, top-level PHP, nested PHP helpers).
SOURCE_DIR + 'wp-includes/blocks/*',
'!' + SOURCE_DIR + 'wp-includes/blocks/index.php',
SOURCE_DIR + 'wp-includes/images/icon-library',
SOURCE_DIR + 'wp-includes/theme.json',
SOURCE_DIR + 'wp-includes/theme-i18n.json',
// Routes and pages.
SOURCE_DIR + 'wp-includes/build',
// PHP manifests generated by gutenberg:copy.
SOURCE_DIR + 'wp-includes/assets/icon-library-manifest.php',
SOURCE_DIR + 'wp-includes/assets/script-loader-packages.php',
SOURCE_DIR + 'wp-includes/assets/script-modules-packages.php',
],

// All files built by Webpack, in /src or /build.
Expand Down Expand Up @@ -241,10 +266,32 @@ module.exports = function(grunt) {
return setFilePath( WORKING_DIR, file );
} ),

// Clean files built by the tools/gutenberg scripts.
gutenberg: gutenbergFiles.map( function( file ) {
return setFilePath( WORKING_DIR, file );
}),
/*
* Clean files sourced from the downloaded zip file built by the Gutenberg repository.
*
* All files originating from the Gutenberg repository's built assets (both tracked and untracked by version
* control) are deleted when `clean:gutenberg` is explicitly called. This ensures that versioned files that
* have been deleted upstream are also removed from version control in this repository.
*
* When `clean:gutenberg` is not explicitly called and run through `grunt clean`, only ignored files are
* cleaned.
*/
gutenberg: {
get src() {
const cli = grunt.cli.tasks;
// Preserve versioned files only when running bare `grunt clean`.
const isBareCleanSweep =
cli.includes( 'clean' ) &&
! cli.includes( 'clean:gutenberg' );

if ( isBareCleanSweep ) {
return gutenbergUnversionedFiles;
} else {
return gutenbergUnversionedFiles.concat( gutenbergVersionedFiles );
}
},
},

dynamic: {
dot: true,
expand: true,
Expand Down Expand Up @@ -289,7 +336,6 @@ module.exports = function(grunt) {
expand: true,
cwd: SOURCE_DIR,
src: buildFiles.concat( [
'!wp-includes/assets/**', // Assets is extracted into separate copy tasks.
'!js/**', // JavaScript is extracted into separate copy tasks.
'!.{svn,git}', // Exclude version control folders.
'!wp-includes/version.php', // Exclude version.php.
Expand Down Expand Up @@ -666,24 +712,18 @@ module.exports = function(grunt) {
'constants.php',
'pages/**/*.php',
],
dest: WORKING_DIR + 'wp-includes/build/',
dest: SOURCE_DIR + 'wp-includes/build/',
} ],
},
/*
* Only copy files relevant to the routes specified in the registry file.
*
* While the registry file does not contain any experimental routes, the `gutenberg/build/routes` directory
* includes the files for all registered routes. Only the files related to the routes specified in the
* registry should be included in the WordPress build.
*
* The `src` list is populated at task runtime by `routes:setup`, which reads the registry after
* `gutenberg:download` has run. See the `routes:setup` task registration for implementation details.
* The list of route source files is populated from the contents of the registry.php file at task runtime by
* `routes:setup`.
*/
routes: {
expand: true,
cwd: 'gutenberg/build',
src: [],
dest: WORKING_DIR + 'wp-includes/build/',
dest: SOURCE_DIR + 'wp-includes/build/',
},
'gutenberg-js': {
files: [ {
Expand All @@ -692,7 +732,7 @@ module.exports = function(grunt) {
src: [
'pages/**/*.js',
],
dest: WORKING_DIR + 'wp-includes/build/',
dest: SOURCE_DIR + 'wp-includes/build/',
} ],
},
'gutenberg-modules': {
Expand All @@ -706,7 +746,7 @@ module.exports = function(grunt) {
// with no debugging value over the minified versions.
'!vips/!(*.min).js',
],
dest: WORKING_DIR + 'wp-includes/js/dist/script-modules/',
dest: SOURCE_DIR + 'wp-includes/js/dist/script-modules/',
} ],
},
'gutenberg-styles': {
Expand All @@ -719,7 +759,7 @@ module.exports = function(grunt) {
// Per-block CSS is copied to wp-includes/blocks/ by tools/gutenberg/copy.js.
'!block-library/*/**',
],
dest: WORKING_DIR + 'wp-includes/css/dist/',
dest: SOURCE_DIR + 'wp-includes/css/dist/',
} ],
},
'gutenberg-theme-json': {
Expand All @@ -738,20 +778,20 @@ module.exports = function(grunt) {
files: [
{
src: 'gutenberg/lib/theme.json',
dest: WORKING_DIR + 'wp-includes/theme.json',
dest: SOURCE_DIR + 'wp-includes/theme.json',
},
{
src: 'gutenberg/lib/theme-i18n.json',
dest: WORKING_DIR + 'wp-includes/theme-i18n.json',
dest: SOURCE_DIR + 'wp-includes/theme-i18n.json',
},
],
},
'icon-library-images': {
files: [ {
expand: true,
cwd: 'gutenberg/packages/icons/src/library',
src: '*.svg',
dest: WORKING_DIR + 'wp-includes/images/icon-library',
src: [ '*.svg' ],
dest: SOURCE_DIR + 'wp-includes/images/icon-library',
} ],
},
'icon-library-manifest': {
Expand All @@ -773,7 +813,7 @@ module.exports = function(grunt) {
},
files: [ {
src: 'gutenberg/packages/icons/src/manifest.php',
dest: WORKING_DIR + 'wp-includes/assets/icon-library-manifest.php',
dest: SOURCE_DIR + 'wp-includes/assets/icon-library-manifest.php',
} ],
},
},
Expand Down Expand Up @@ -1667,7 +1707,7 @@ module.exports = function(grunt) {
*/
grunt.util.spawn( {
grunt: true,
args: [ 'build:gutenberg', '--dev' ],
args: [ 'build:gutenberg' ],
opts: { stdio: 'inherit' }
}, function( buildError ) {
done( ! buildError );
Expand All @@ -1677,10 +1717,9 @@ module.exports = function(grunt) {

grunt.registerTask( 'gutenberg:copy', 'Copies Gutenberg JS packages and block assets to WordPress Core.', function() {
const done = this.async();
const buildDir = grunt.option( 'dev' ) ? 'src' : 'build';
grunt.util.spawn( {
cmd: 'node',
args: [ 'tools/gutenberg/copy.js', `--build-dir=${ buildDir }` ],
args: [ 'tools/gutenberg/copy.js' ],
opts: { stdio: 'inherit' }
}, function( error ) {
done( ! error );
Expand Down Expand Up @@ -2164,10 +2203,23 @@ module.exports = function(grunt) {
} );
} );

grunt.registerTask( 'build:gutenberg', [
'copy:gutenberg-php',
// Detects and copies stable routes.
grunt.registerTask( 'build:routes', [
'routes:setup',
'copy:routes',
] );

/*
* Refresh the Gutenberg-sourced content in src/.
*
* clean:gutenberg must run first to ensure files removed upstream are purged.
*
* Because all of these tasks write to src/, the outcome is identical for build and build:dev.
*/
grunt.registerTask( 'build:gutenberg', [
'clean:gutenberg',
'copy:gutenberg-php',
'build:routes',
'copy:gutenberg-js',
'gutenberg:copy',
'copy:gutenberg-modules',
Expand All @@ -2181,21 +2233,21 @@ module.exports = function(grunt) {
if ( grunt.option( 'dev' ) ) {
grunt.task.run( [
'gutenberg:verify',
'build:gutenberg',
'build:js',
'build:css',
'build:codemirror',
'build:gutenberg',
'build:certificates'
] );
} else {
grunt.task.run( [
'gutenberg:verify',
'build:gutenberg',
'build:certificates',
'build:files',
'build:js',
'build:css',
'build:codemirror',
'build:gutenberg',
'replace:source-maps',
'verify:build'
] );
Expand Down
3 changes: 2 additions & 1 deletion composer.json
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,8 @@
"php": ">=7.4"
},
"suggest": {
"ext-dom": "*"
"ext-dom": "*",
"ext-mysqli": "*"
},
"require-dev": {
"composer/ca-bundle": "1.5.12",
Expand Down
2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
Expand Up @@ -141,6 +141,6 @@
"typecheck:php": "node ./tools/local-env/scripts/docker.js run --rm php composer phpstan",
"gutenberg:copy": "node tools/gutenberg/copy.js",
"gutenberg:verify": "node tools/gutenberg/utils.js",
"gutenberg:download": "node tools/gutenberg/download.js && grunt build:gutenberg --dev"
"gutenberg:download": "node tools/gutenberg/download.js && grunt build:gutenberg"
}
}
1 change: 1 addition & 0 deletions src/wp-admin/css/common.css
Original file line number Diff line number Diff line change
Expand Up @@ -934,6 +934,7 @@ a#remove-post-thumbnail:hover,
border-top: 1px solid #dcdcde;
background: #f6f7f7;
display: flex;
flex-wrap: wrap;
align-items: center;
justify-content: space-between;
}
Expand Down
2 changes: 1 addition & 1 deletion src/wp-admin/includes/class-wp-site-health.php
Original file line number Diff line number Diff line change
Expand Up @@ -1357,7 +1357,7 @@ public function get_test_dotorg_communication() {
$result['description'] .= sprintf(
'<p>%s</p>',
sprintf(
'<span class="error"><span class="screen-reader-text">%s</span></span> %s',
'<span class="dashicons error" aria-hidden="true"></span><span class="screen-reader-text">%s</span> %s',
/* translators: Hidden accessibility text. */
__( 'Error' ),
sprintf(
Expand Down
2 changes: 1 addition & 1 deletion src/wp-admin/includes/class-wp-upgrader.php
Original file line number Diff line number Diff line change
Expand Up @@ -528,7 +528,7 @@ public function install_package( $args = array() ) {
/*
* Give the upgrade an additional 300 seconds (5 minutes) to ensure the install
* doesn't prematurely timeout having used up the maximum script execution time
* upacking and downloading in WP_Upgrader->run().
* downloading and unpacking in WP_Upgrader->run().
*/
if ( function_exists( 'set_time_limit' ) ) {
set_time_limit( 300 );
Expand Down
2 changes: 1 addition & 1 deletion src/wp-admin/includes/image.php
Original file line number Diff line number Diff line change
Expand Up @@ -316,7 +316,7 @@ function wp_create_image_subsizes( $file, $attachment_id ) {
}

if ( $scale_down ) {
// Resize the image. This will also convet it if needed.
// Resize the image. This will also convert it if needed.
$resized = $editor->resize( $threshold, $threshold );
} elseif ( $convert ) {
// The image will be converted (if possible) when saved.
Expand Down
Loading
Loading