Merge latest changes to feature branch - #2633
Merged
Merged
Conversation
Assemble the release notes for the plugins currently being released — those with an open, dated milestone whose title does not contain "n.e.x.t" — by reading each plugin's stable-tag changelog entry from its readme.txt (as populated by npm run readme). Progress and warnings go to STDERR so STDOUT (the Markdown notes) can be piped to a file or the clipboard. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Create a draft GitHub release for the release date, using the combined per-plugin changelogs from `npm run prepare-release-notes` as the body. The tag and title are $RELEASE_DATE and the target is the release/$RELEASE_DATE branch. Fails early if the target branch is missing on origin or a release for the tag already exists, and authenticates the milestone lookup with the gh token to avoid rate limiting. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Co-authored-by: b1ink0 <b1ink0@git.wordpress.org>
Co-authored-by: mukeshpanchal27 <mukesh27@git.wordpress.org>
Add `@covers` tags to the existing Test_WebP_Uploads_REST_API tests and add regression tests for the defensive guards in webp_uploads_update_rest_attachment(), covering a missing/non-string `source_url`, a missing/invalid mime source `file` in both the per-size and full-size loops, and non-array response data. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…ssing non-string as arg
…filter Convert the query-string test into a data-provider-driven test covering an empty string, a query string, an array, and an invalid `false` value passed as the `$attr` argument, asserting each is normalized before being passed to the inner `webp_uploads_filter_wp_get_attachment_image` filter. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
`build-plugins:zip` rebuilds each plugin archive from a freshly re-copied build directory, so the `zip` command embeds new entry timestamps every run and the resulting bytes always differ even when the file contents are identical. This bumped the ZIP's modified time on every build regardless of whether anything actually changed. Build the archive into a temporary file and compare it against the existing ZIP using a timestamp-independent content fingerprint (each entry's uncompressed size, CRC-32, and name via `unzip -v`). The existing ZIP is only replaced when its contents actually change; otherwise the temporary file is discarded and the existing file — including its modified time — is left untouched. Building fresh into a temporary file each time also ensures files removed from a plugin no longer linger in an updated-in-place archive. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
When zipping a plugin, stray files left in the plugin source directory get copied into the build output and silently bundled into the archive. This makes it easy to ship files that were never meant to be part of a release. Before creating the archive, check the plugin source directory for files that Git considers untracked (and are not ignored via .gitignore), narrowed to those that actually made it into the build output — i.e. files not excluded by the copy step's ignore patterns. If any are found, fail the build with a message listing them. Generated build artifacts are unaffected because they are either committed or gitignored. The check can be bypassed with `--env force=true` for cases where including untracked files is intentional. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
The `build-plugins:zip` script wraps `build:plugin:*` via `npm-run-all`, which
did not pass extra command-line arguments through to the matched scripts. As a
result there was no way to reach the whole-suite zip build with the new
`--env force=true` override.
Add npm-run-all's `{@}` argument placeholder (and the required trailing `--`)
so arguments after `--` are forwarded to each plugin build. This makes
`npm run build-plugins:zip -- --env force=true` bypass the untracked-files
check across all plugins, while `npm run build-plugins:zip` continues to work
unchanged when no arguments are given.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…ttachment-image Prevent fatal error in `webp_uploads_filter_wp_get_attachment_image()` when `wp_get_attachment_image_src()` returns false
Prepare 2026-07-03 release
Post 2026-07-03 release merge
Only suggest `gh release delete` when the existing release is still a draft. A published release is immutable, so advise supplying a different RELEASE_DATE instead. Co-authored-by: thelovekesh <thelovekesh@git.wordpress.org> Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…nchanged Build: Preserve plugin ZIP modified time when contents are unchanged Co-authored-by: westonruter <westonruter@git.wordpress.org> Co-authored-by: b1ink0 <b1ink0@git.wordpress.org>
Build: Fail plugin ZIP build when untracked files would be included Co-authored-by: westonruter <westonruter@git.wordpress.org> Co-authored-by: b1ink0 <b1ink0@git.wordpress.org>
Bumps the phpstan-packages group with 2 updates: [phpstan/phpstan](https://github.com/phpstan/phpstan-phar-composer-source) and [phpstan/phpstan-phpunit](https://github.com/phpstan/phpstan-phpunit). Updates `phpstan/phpstan` from 2.2.2 to 2.2.3 - [Commits](https://github.com/phpstan/phpstan-phar-composer-source/commits) Updates `phpstan/phpstan-phpunit` from 2.0.16 to 2.0.17 - [Release notes](https://github.com/phpstan/phpstan-phpunit/releases) - [Commits](phpstan/phpstan-phpunit@2.0.16...2.0.17) --- updated-dependencies: - dependency-name: phpstan/phpstan dependency-version: 2.2.3 dependency-type: direct:development update-type: version-update:semver-patch dependency-group: phpstan-packages - dependency-name: phpstan/phpstan-phpunit dependency-version: 2.0.17 dependency-type: direct:development update-type: version-update:semver-patch dependency-group: phpstan-packages ... Signed-off-by: dependabot[bot] <support@github.com>
Bumps [crate-ci/typos](https://github.com/crate-ci/typos) from 1.47.2 to 1.48.0. - [Release notes](https://github.com/crate-ci/typos/releases) - [Changelog](https://github.com/crate-ci/typos/blob/master/CHANGELOG.md) - [Commits](crate-ci/typos@37bb988...bee27e3) --- updated-dependencies: - dependency-name: crate-ci/typos dependency-version: 1.48.0 dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] <support@github.com>
Bumps the wordpress-packages group with 3 updates: [@wordpress/e2e-test-utils-playwright](https://github.com/WordPress/gutenberg/tree/HEAD/packages/e2e-test-utils-playwright), [@wordpress/env](https://github.com/WordPress/gutenberg/tree/HEAD/packages/env) and [@wordpress/scripts](https://github.com/WordPress/gutenberg/tree/HEAD/packages/scripts). Updates `@wordpress/e2e-test-utils-playwright` from 1.49.0 to 1.50.0 - [Release notes](https://github.com/WordPress/gutenberg/releases) - [Changelog](https://github.com/WordPress/gutenberg/blob/trunk/packages/e2e-test-utils-playwright/CHANGELOG.md) - [Commits](https://github.com/WordPress/gutenberg/commits/@wordpress/e2e-test-utils-playwright@1.50.0/packages/e2e-test-utils-playwright) Updates `@wordpress/env` from 11.9.0 to 11.10.0 - [Release notes](https://github.com/WordPress/gutenberg/releases) - [Changelog](https://github.com/WordPress/gutenberg/blob/trunk/packages/env/CHANGELOG.md) - [Commits](https://github.com/WordPress/gutenberg/commits/@wordpress/env@11.10.0/packages/env) Updates `@wordpress/scripts` from 32.5.0 to 32.6.0 - [Release notes](https://github.com/WordPress/gutenberg/releases) - [Changelog](https://github.com/WordPress/gutenberg/blob/trunk/packages/scripts/CHANGELOG.md) - [Commits](https://github.com/WordPress/gutenberg/commits/@wordpress/scripts@32.6.0/packages/scripts) --- updated-dependencies: - dependency-name: "@wordpress/e2e-test-utils-playwright" dependency-version: 1.50.0 dependency-type: direct:development update-type: version-update:semver-minor dependency-group: wordpress-packages - dependency-name: "@wordpress/env" dependency-version: 11.10.0 dependency-type: direct:development update-type: version-update:semver-minor dependency-group: wordpress-packages - dependency-name: "@wordpress/scripts" dependency-version: 32.6.0 dependency-type: direct:development update-type: version-update:semver-minor dependency-group: wordpress-packages ... Signed-off-by: dependabot[bot] <support@github.com>
Bumps [fs-extra](https://github.com/jprichardson/node-fs-extra) from 11.3.5 to 11.3.6. - [Changelog](https://github.com/jprichardson/node-fs-extra/blob/master/CHANGELOG.md) - [Commits](jprichardson/node-fs-extra@11.3.5...11.3.6) --- updated-dependencies: - dependency-name: fs-extra dependency-version: 11.3.6 dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] <support@github.com>
Run via: ```bash npm run bump-versions -- --increment prerelease embed-optimizer image-prioritizer ```
Fill in the empty changelog entries that bump-versions stubbed out for the seven plugins being released. The entries are written by hand because the changelog and prepare-release-notes commands derive their content from a release milestone, and these releases deliberately skip milestones. The bulk of each entry is the same across all seven plugins, since what is pending is a single cross-cutting sweep: strict types, native property types, and the raised WordPress 6.9 and PHP 7.4 minimums. Only three plugins carry anything beyond that: * Optimization Detective moved the URL Metrics storage HMAC validation into the REST endpoint callback and dropped its deprecated constants. * Speculative Loading hardened the JSON encoding of its inline scripts. * Image Prioritizer fixed TypeScript 6 type errors in the video lazy-loading script. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
The script could report a plugin as having no pending changes when it actually had some. Bumping "Tested up to: 7.0" to "7.1" replaces a line with one of exactly the same length, and the working copy is reused between runs, so a previous run's rsync leaves the build file's mtime on the copy. Both rsync's default quick check and SVN's own stat cache compare size and mtime rather than content, so each concludes the file is unchanged and "svn status" comes back clean. The failure is intermittent, since it only bites once a prior run has left a matching mtime behind, and it is silent in the worst way: the affected plugin is reported under a "No changes." note, which reads as confirmation that there is nothing to release. Pass -c so rsync compares checksums, and --no-times so the files it copies get a fresh mtime that invalidates SVN's stat cache. Both are needed; -c alone still leaves SVN unable to see the change. Verified against a cold checkout and a warm one, with identical results. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
The two web-vitals bundles under build/ accounted for 35% of the whole diff, 42 KB out of 124 KB, for what amounts to a library upgrade. They are minified despite not carrying a .min.js suffix, so the existing *.min.js exclusion misses them, and each is a single line, meaning any change at all renders as a whole-file rewrite. Exclude build/*.js, which brings the diff down from 127 KB to 85 KB. The sibling build/*.asset.php is deliberately left in, since its 'version' is the compact signal that the bundled library changed: two lines showing 5.1.0 becoming 6.1.0, in place of 42 KB of unreadable bundle. That signal turned out to be worth keeping. It surfaced that web-vitals is going from 5.1.0 to 6.1.0, across a major release, which was missing from Optimization Detective's changelog entry and is now added. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Excluding generated assets from the rsync kept the diff readable but blinded "svn status" to them, which is the wrong trade: status is the view that answers which files are being added, removed, and modified, and it should be complete. Worse, the exclusion also protected those files from --delete, so a stray minified asset dropped into an already-tracked directory was reported nowhere at all. Only one landing in a brand new directory showed up, and then merely as its parent directory, with no indication of what was inside. Copy everything instead, and filter "svn diff" so that generated files keep their header but have their contents replaced with a placeholder. They stay visible as changed without dragging in tens of KB of unreadable bundle: the whole report goes from 127 KB to 88 KB. The *.asset.php files are left intact, since their 'version' is the readable signal that a bundled library changed. Also expand unversioned directories in the status output, so that a batch of added files is listed file by file rather than collapsing into its parent. This supersedes the build/*.js exclusion added in the previous commit, whose carve-out for *.asset.php is preserved here by the same reasoning. Both edge cases are now covered: a stray min file in a tracked directory shows as "? stray.min.js", and a new directory lists its contents. It immediately turned up a real pending change that the exclusion had been hiding, a modified view-transitions .min.css, which on inspection is only a minifier emitting #0000 where it used to emit transparent. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
web-vitals began publishing source maps in 6.0.0, and emits a sourceMappingURL comment alongside them. That reference is correct inside the package, where the map sits next to the bundle, but the webpack config copies only the bundles out of node_modules. The upgrade would therefore have shipped two files pointing at maps that do not exist, making browsers request a URL that 404s whenever devtools is open. Copy the maps too, rather than stripping the comment. Upstream publishes them deliberately for exactly this case, and Optimization Detective is a plugin whose entire purpose is measuring real user performance, so readable web-vitals frames are worth having when debugging it or an extension built on it. Both maps carry sourcesContent, so they are self-contained and need nothing else fetched. The Gutenberg plugin ships source maps for the same reason; WordPress core does not, but core is not distributed as a plugin. The cost is 49 KB on a 106 KB zip, and nothing at runtime: browsers only request a map once devtools is open, so no visitor ever pays for it. Two renames had to be handled, since web-vitals.attribution.js is copied in as web-vitals-attribution.js. Its map is now named to match, the sourceMappingURL comment in the bundle is repointed at the new name, and the map's own "file" field is repointed at the renamed bundle. Both transformers are written as factories over a file name rather than hardcoded, since any vendored bundle renamed on the way in needs the same treatment. Note that the two added .map files are visible in the pending release diff as untracked additions only because generated assets are now copied and suppressed rather than excluded. Under the previous exclusion they would have been added to the plugin without appearing anywhere in the report. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
The release notes were the last step still requiring milestones, and it failed quietly rather than loudly. Only one of the seven plugins being released has a dated milestone, so prepare-release-notes produced notes for that one alone, and create-draft-release checked only that the notes file was non-empty. A draft release would therefore have been created covering one plugin out of seven, with nothing to indicate the other six were missing. The milestone was never the source of the content: getReadmeChangelogEntry() already reads each plugin's changelog from its readme.txt, and the milestone only decided which plugins to include. So accept plugin slugs as positional arguments and skip the lookup entirely when any are given, matching what bump-versions already does. There is deliberately no option to select every plugin here, unlike bump-versions where one exists but is rarely useful. A plugin that is not being released still has a changelog entry for its current stable tag, so including it would repeat an already-published entry in the new release notes. When plugins are named explicitly, a failure on any of them is now fatal and nothing at all is written, rather than the previous per-plugin tolerance emitting a subset. Asking for specific plugins and silently getting fewer is the exact failure this commit exists to prevent. Milestone selection keeps the old behaviour, since there the set was never asserted by hand. create-draft-release forwards any slugs through, then verifies each one is present in the generated notes before creating the draft. Where no slugs are given it now lists which plugins the notes actually cover, so an omission is visible rather than implied by silence. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Prepare 2026-08-18 release
Post 2026-08-25 release merge Co-authored-by: westonruter <westonruter@git.wordpress.org> Co-authored-by: b1ink0 <b1ink0@git.wordpress.org>
…check-action-1.1.9
…dpress/plugin-check-action-1.1.9 Bump wordpress/plugin-check-action from 1.1.7 to 1.1.9
mukeshpanchal27
temporarily deployed
to
github-pages
August 26, 2026 08:02 — with
GitHub Pages
Inactive
Bumps [globals](https://github.com/sindresorhus/globals) from 17.9.0 to 17.11.0. - [Release notes](https://github.com/sindresorhus/globals/releases) - [Commits](sindresorhus/globals@v17.9.0...v17.11.0) --- updated-dependencies: - dependency-name: globals dependency-version: 17.11.0 dependency-type: direct:development update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] <support@github.com>
…ls-17.11.0 Bump globals from 17.9.0 to 17.11.0
mukeshpanchal27
temporarily deployed
to
github-pages
August 26, 2026 08:14 — with
GitHub Pages
Inactive
Bumps [wp-phpunit/wp-phpunit](https://github.com/wp-phpunit/wp-phpunit) from 7.0.2 to 7.0.4. - [Commits](wp-phpunit/wp-phpunit@7.0.2...7.0.4) --- updated-dependencies: - dependency-name: wp-phpunit/wp-phpunit dependency-version: 7.0.4 dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] <support@github.com>
…t/wp-phpunit-7.0.4 Bump wp-phpunit/wp-phpunit from 7.0.2 to 7.0.4
mukeshpanchal27
temporarily deployed
to
github-pages
August 26, 2026 08:26 — with
GitHub Pages
Inactive
Bumps the wordpress-packages group with 4 updates in the / directory: [@wordpress/e2e-test-utils-playwright](https://github.com/WordPress/gutenberg/tree/HEAD/packages/e2e-test-utils-playwright), [@wordpress/env](https://github.com/WordPress/gutenberg/tree/HEAD/packages/env), [@wordpress/prettier-config](https://github.com/WordPress/gutenberg/tree/HEAD/packages/prettier-config) and [@wordpress/scripts](https://github.com/WordPress/gutenberg/tree/HEAD/packages/scripts). Updates `@wordpress/e2e-test-utils-playwright` from 1.52.0 to 1.53.0 - [Release notes](https://github.com/WordPress/gutenberg/releases) - [Changelog](https://github.com/WordPress/gutenberg/blob/trunk/packages/e2e-test-utils-playwright/CHANGELOG.md) - [Commits](https://github.com/WordPress/gutenberg/commits/@wordpress/e2e-test-utils-playwright@1.53.0/packages/e2e-test-utils-playwright) Updates `@wordpress/env` from 11.12.0 to 11.13.0 - [Release notes](https://github.com/WordPress/gutenberg/releases) - [Changelog](https://github.com/WordPress/gutenberg/blob/trunk/packages/env/CHANGELOG.md) - [Commits](https://github.com/WordPress/gutenberg/commits/@wordpress/env@11.13.0/packages/env) Updates `@wordpress/prettier-config` from 4.52.0 to 4.53.0 - [Release notes](https://github.com/WordPress/gutenberg/releases) - [Changelog](https://github.com/WordPress/gutenberg/blob/trunk/packages/prettier-config/CHANGELOG.md) - [Commits](https://github.com/WordPress/gutenberg/commits/@wordpress/prettier-config@4.53.0/packages/prettier-config) Updates `@wordpress/scripts` from 34.0.0 to 34.1.0 - [Release notes](https://github.com/WordPress/gutenberg/releases) - [Changelog](https://github.com/WordPress/gutenberg/blob/trunk/packages/scripts/CHANGELOG.md) - [Commits](https://github.com/WordPress/gutenberg/commits/@wordpress/scripts@34.1.0/packages/scripts) --- updated-dependencies: - dependency-name: "@wordpress/e2e-test-utils-playwright" dependency-version: 1.53.0 dependency-type: direct:development update-type: version-update:semver-minor dependency-group: wordpress-packages - dependency-name: "@wordpress/env" dependency-version: 11.13.0 dependency-type: direct:development update-type: version-update:semver-minor dependency-group: wordpress-packages - dependency-name: "@wordpress/prettier-config" dependency-version: 4.53.0 dependency-type: direct:development update-type: version-update:semver-minor dependency-group: wordpress-packages - dependency-name: "@wordpress/scripts" dependency-version: 34.1.0 dependency-type: direct:development update-type: version-update:semver-minor dependency-group: wordpress-packages ... Signed-off-by: dependabot[bot] <support@github.com>
…ress-packages-c218e662ad Bump the wordpress-packages group across 1 directory with 4 updates
mukeshpanchal27
temporarily deployed
to
github-pages
August 26, 2026 08:37 — with
GitHub Pages
Inactive
Bumps [github/codeql-action/init](https://github.com/github/codeql-action) from 4.37.6 to 4.37.7. - [Release notes](https://github.com/github/codeql-action/releases) - [Changelog](https://github.com/github/codeql-action/blob/main/CHANGELOG.md) - [Commits](github/codeql-action@5595cca...ff2f1c6) --- updated-dependencies: - dependency-name: github/codeql-action/init dependency-version: 4.37.7 dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Bumps [github/codeql-action/analyze](https://github.com/github/codeql-action) from 4.37.6 to 4.37.7. - [Release notes](https://github.com/github/codeql-action/releases) - [Changelog](https://github.com/github/codeql-action/blob/main/CHANGELOG.md) - [Commits](github/codeql-action@5595cca...ff2f1c6) --- updated-dependencies: - dependency-name: github/codeql-action/analyze dependency-version: 4.37.7 dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Bumps [web-vitals](https://github.com/GoogleChrome/web-vitals) from 6.1.0 to 6.1.1. - [Changelog](https://github.com/GoogleChrome/web-vitals/blob/main/CHANGELOG.md) - [Commits](GoogleChrome/web-vitals@v6.1.0...v6.1.1) --- updated-dependencies: - dependency-name: web-vitals dependency-version: 6.1.1 dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
westonruter
approved these changes
Aug 27, 2026
mukeshpanchal27
merged commit Aug 27, 2026
dc33d1b
into
feature/2449-gallery-block
63 of 65 checks passed
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Get the latest change from trunk.
Relevant technical choices
Use of AI Tools