From b835916f1aa4b8bde752dfd1d851569c15033335 Mon Sep 17 00:00:00 2001
From: Jonathan Desrosiers <359867+desrosj@users.noreply.github.com>
Date: Tue, 17 Mar 2026 20:41:14 -0400
Subject: [PATCH 01/12] Add workflow to compare PR with the build server.
---
.github/workflows/check-built-files.yml | 16 +-
.github/workflows/pull-request-comments.yml | 146 +++++++++++++++++-
.../workflows/reusable-check-built-files.yml | 8 +-
.../reusable-compare-built-files-v1.yml | 109 +++++++++++++
4 files changed, 270 insertions(+), 9 deletions(-)
create mode 100644 .github/workflows/reusable-compare-built-files-v1.yml
diff --git a/.github/workflows/check-built-files.yml b/.github/workflows/check-built-files.yml
index 01a239c4eb3b0..3409a1b124eaf 100644
--- a/.github/workflows/check-built-files.yml
+++ b/.github/workflows/check-built-files.yml
@@ -1,4 +1,4 @@
-# Checks for uncommitted changes to built files in pull requests.
+# Checks for uncommitted or unexpected changes to built files within pull requests.
name: Check Built Files (PRs)
on:
@@ -31,6 +31,7 @@ on:
# Confirm any changes to relevant workflow files.
- '.github/workflows/check-built-files.yml'
- '.github/workflows/reusable-check-built-files.yml'
+ - '.github/workflows/reusable-compare-built-files-*.yml'
# Changes to the default themes should be handled by the themes workflows.
- '!src/wp-content/themes/twenty**'
@@ -46,9 +47,18 @@ concurrency:
permissions: {}
jobs:
+ # Checks built files for uncommitted changes.
check-for-built-file-changes:
- name: Check built files
- if: ${{ github.repository == 'wordpress/wordpress-develop' }}
+ name: Check for uncommitted changes
+ if: ${{ github.repository == 'WordPress/wordpress-develop' || github.event_name == 'pull_request' }}
uses: ./.github/workflows/reusable-check-built-files.yml
permissions:
contents: read
+
+ # Compares the build directory with the WordPress/WordPress repository.
+ compare-with-build-server:
+ name: Compare built files to WordPress/WordPress
+ uses: ./.github/workflows/reusable-compare-built-files-v1.yml
+ permissions:
+ contents: read
+ if: ${{ github.repository == 'WordPress/wordpress-develop' || github.event_name == 'pull_request' }}
diff --git a/.github/workflows/pull-request-comments.yml b/.github/workflows/pull-request-comments.yml
index da30e2feb7f11..8e2cba4bfd766 100644
--- a/.github/workflows/pull-request-comments.yml
+++ b/.github/workflows/pull-request-comments.yml
@@ -5,7 +5,7 @@ on:
pull_request_target:
types: [ 'opened', 'synchronize', 'reopened', 'edited' ]
workflow_run:
- workflows: [ 'Test Build Processes' ]
+ workflows: [ 'Check Built Files (PRs)', 'Test Build Processes' ]
types:
- completed
@@ -22,6 +22,7 @@ permissions: {}
jobs:
# Comments on a pull request when the author is a first time contributor.
post-welcome-message:
+ name: Contributor welcome message
runs-on: ubuntu-24.04
permissions:
issues: write
@@ -79,7 +80,7 @@ jobs:
# Leaves a comment on a pull request with a link to test the changes in a WordPress Playground instance.
playground-details:
- name: Comment on a pull request with Playground details
+ name: Leave Playground testing details
runs-on: ubuntu-24.04
permissions:
issues: write
@@ -87,6 +88,7 @@ jobs:
if: >
github.repository == 'WordPress/wordpress-develop' &&
github.event.workflow_run.event == 'pull_request' &&
+ github.event.workflow_run.name == 'Test Build Processes' &&
github.event.workflow_run.conclusion == 'success'
steps:
- name: Download artifact
@@ -180,6 +182,146 @@ jobs:
github.rest.issues.createComment( commentInfo );
+ # Leaves a comment on a pull request noting differences between the PR and the build server.
+ build-server-comparison:
+ name: Note differences with the build server
+ runs-on: ubuntu-24.04
+ permissions:
+ issues: write
+ pull-requests: write
+ if: >
+ github.repository == 'WordPress/wordpress-develop' &&
+ github.event.workflow_run.event == 'pull_request' &&
+ github.event.workflow_run.name == 'Check Built Files (PRs)' &&
+ github.event.workflow_run.conclusion == 'success'
+ steps:
+ - name: Download artifact
+ uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd # v8.0.0
+ env:
+ RUN_ID: ${{ github.event.workflow_run.id }}
+ with:
+ script: |
+ const artifacts = await github.rest.actions.listWorkflowRunArtifacts( {
+ owner: context.repo.owner,
+ repo: context.repo.repo,
+ run_id: process.env.RUN_ID,
+ } );
+
+ const matchArtifact = artifacts.data.artifacts.filter( ( artifact ) => {
+ return artifact.name === 'build-server-comparison'
+ } )[0];
+
+ if ( ! matchArtifact ) {
+ core.setFailed( 'No artifact found!' );
+ return;
+ }
+
+ const download = await github.rest.actions.downloadArtifact( {
+ owner: context.repo.owner,
+ repo: context.repo.repo,
+ artifact_id: matchArtifact.id,
+ archive_format: 'zip',
+ } );
+
+ const fs = require( 'fs' );
+ fs.writeFileSync( '${{github.workspace}}/build-server-comparison.zip', Buffer.from( download.data ) )
+
+ - name: Unzip the artifact containing the comparison info
+ run: unzip build-server-comparison.zip
+
+ - name: Leave a comment with any differences noticed
+ uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd # v8.0.0
+ with:
+ script: |
+ const fs = require( 'fs' );
+ const issue_number = Number( fs.readFileSync( './NR' ) );
+ const fileChanges = fs.readFileSync( './file-changes.txt', 'utf8' );
+ const diffContents = fs.readFileSync( './changes.diff', 'utf8' );
+ const MAX_DIFF_LENGTH = 50000; // GitHub has a 65,536 character limit for comments.
+
+ core.info( `Checking pull request #${issue_number}.` );
+
+ // Confirm that the pull request is still open before leaving a comment.
+ const pr = await github.rest.pulls.get({
+ owner: context.repo.owner,
+ repo: context.repo.repo,
+ pull_number: issue_number,
+ });
+
+ if ( pr.data.state !== 'open' ) {
+ core.info( 'The pull request has been closed. No comment will be left.' );
+ return;
+ }
+
+ // Comments are only added after the first successful build. Check for the presence of a comment and bail early.
+ const commentInfo = {
+ owner: context.repo.owner,
+ repo: context.repo.repo,
+ issue_number,
+ };
+
+ const comments = ( await github.rest.issues.listComments( commentInfo ) ).data;
+
+ for ( const currentComment of comments ) {
+ if ( currentComment.user.type === 'Bot' && currentComment.body.includes( 'Build Script Results Comparison' ) ) {
+ commentInfo.comment_id = currentComment.id;
+ break;
+ }
+ };
+
+ commentInfo.body = '## Build Server Comparison';
+
+ // Post or update the comment.
+ if ( fileChanges.trim() === '' ) {
+ commentInfo.body += 'The contents of the `build` directory after running `npm run build` matches the contents of the WordPress/WordPress repository. No differences were found.';
+ } else {
+ commentInfo.body += 'The contents of the `build` directory after running `npm run build` has been compared with the contents of the WordPress/WordPress repository.
+
+ **Review these differences carefully for any unexpected results.**
+
+ ### List of Modified Files
+
+ \`\`\`
+ ${ fileChanges }
+ \`\`\`
+
+ ### Full Diff File
+ `;
+
+ if ( diffContents.length > MAX_DIFF_LENGTH ) {
+ const cutoff = diffContents.lastIndexOf( '\n', MAX_DIFF_LENGTH );
+ const truncated = diffContents.substring( 0, cutoff );
+
+ commentInfo.body += `
+ Click to expand (truncated)
+
+ \`\`\`diff
+ ${ truncated }
+ \`\`\`
+
+ ⚠️ The diff was too large to display in full.
+
+ `;
+ } else {
+ commentInfo.body += `
+ Click to expand
+
+ \`\`\`diff
+ ${ diffContents }
+ \`\`\`
+
+ `;
+ }
+
+ commentInfo.body += `[Download the complete .diff file from the workflow run](https://github.com/${ context.repo.owner }/${ context.repo.repo }/actions/runs/${ process.env.RUN_ID }).`;
+ }
+
+ if ( commentInfo.comment_id ) {
+ github.rest.issues.updateComment( commentInfo );
+ } else {
+ github.rest.issues.createComment( commentInfo );
+ }
+
# Manages comments reminding contributors to include a Trac ticket link when opening a pull request.
trac-ticket-check:
name: Manage Trac ticket reminders for pull requests
diff --git a/.github/workflows/reusable-check-built-files.yml b/.github/workflows/reusable-check-built-files.yml
index 11d97639a30fc..30bb3ed5021b4 100644
--- a/.github/workflows/reusable-check-built-files.yml
+++ b/.github/workflows/reusable-check-built-files.yml
@@ -1,7 +1,7 @@
##
# A reusable workflow that checks for uncommitted changes to built files in pull requests.
##
-name: Check Built Files (PRs)
+name: Check for Changes to Versioned Files (reusable)
on:
workflow_call:
@@ -9,7 +9,7 @@ on:
permissions: {}
jobs:
- # Checks a PR for uncommitted changes to built files.
+ # Checks a PR for uncommitted changes to versioned files.
#
# When changes are detected, the patch is stored as an artifact for processing by the Commit Built File Changes
# workflow.
@@ -29,8 +29,8 @@ jobs:
# - Displays the result of git diff for debugging purposes.
# - Saves the diff to a patch file.
# - Uploads the patch file as an artifact.
- update-built-files:
- name: Check and update built files
+ check-versioned-files:
+ name: Check for changes
runs-on: ubuntu-24.04
timeout-minutes: 10
permissions:
diff --git a/.github/workflows/reusable-compare-built-files-v1.yml b/.github/workflows/reusable-compare-built-files-v1.yml
new file mode 100644
index 0000000000000..94debf8a47a23
--- /dev/null
+++ b/.github/workflows/reusable-compare-built-files-v1.yml
@@ -0,0 +1,109 @@
+##
+# A reusable workflow that compares the results of the build script with the most recent commit to WordPress/WordPress.
+##
+name: Compare Built Files (reusable)
+
+on:
+ workflow_call:
+
+# Disable permissions for all available scopes by default.
+# Any needed permissions should be configured at the job level.
+permissions: {}
+
+jobs:
+ # Runs the PHP coding standards checks.
+ #
+ # Violations are reported inline with annotations.
+ #
+ # Performs the following steps:
+ # - Checks out the repository.
+ # - Sets up Node.js.
+ # - Sets up PHP.
+ # - Installs Composer dependencies.
+ # - Logs debug information about the GitHub Action runner.
+ # - Installs npm dependencies.
+ # - Builds WordPress to run from the build directory.
+ # - Ensures version-controlled files are not modified or deleted.
+ # - Checks out the WordPress/WordPress repository.
+ # - Creates a directory for text files to be uploaded as an artifact.
+ # - Stores a list of files that differ in the build directory from WordPress/WordPress.
+ # - Stores a diff file comparing the build directory to WordPress/WordPress.
+ # - Saves the pull request number to a text file.
+ # - Uploads the generated files as an artifact.
+ compare-built-files:
+ name: Compare built files to WordPress/WordPress
+ runs-on: ubuntu-24.04
+ permissions:
+ contents: read
+ timeout-minutes: 10
+
+ steps:
+ - name: Checkout repository
+ uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
+ with:
+ show-progress: ${{ runner.debug == '1' && 'true' || 'false' }}
+ persist-credentials: false
+
+ - name: Set up Node.js
+ uses: actions/setup-node@53b83947a5a98c8d113130e565377fae1a50d02f # v6.3.0
+ with:
+ node-version-file: '.nvmrc'
+ cache: npm
+
+ - name: Set up PHP
+ uses: shivammathur/setup-php@accd6127cb78bee3e8082180cb391013d204ef9f # v2.37.0
+ with:
+ php-version: '8.4'
+ coverage: none
+
+ # Since Composer dependencies are installed using `composer update` and no lock file is in version control,
+ # passing a custom cache suffix ensures that the cache is flushed at least once per week.
+ - name: Install Composer dependencies
+ uses: ramsey/composer-install@65e4f84970763564f46a70b8a54b90d033b3bdda # v4.0.0
+ with:
+ custom-cache-suffix: $(/bin/date -u --date='last Mon' "+%F")
+
+ - name: Log debug information
+ run: |
+ npm --version
+ node --version
+ git --version
+
+ - name: Install npm Dependencies
+ run: npm ci
+
+ - name: Build WordPress to run from build directory
+ run: npm run build
+
+ - name: Ensure version-controlled files are not modified or deleted
+ run: git diff --exit-code
+
+ - name: Checkout WordPress/WordPress
+ uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
+ with:
+ repository: 'WordPress/WordPress'
+ path: ${{ github.workspace }}/build-server
+ show-progress: ${{ runner.debug == '1' && 'true' || 'false' }}
+ persist-credentials: false
+
+ - name: Create directory for artifacts
+ run: mkdir artifacts
+
+ - name: Create a list of files that have changed
+ run: diff -rq ${{ github.workspace }}/build ${{ github.workspace }}/build-server | sed "s|${{ github.workspace }}/||g" > artifacts/file-changes.txt
+
+ - name: Create a list of files that have changed
+ run: diff -r ${{ github.workspace }}/build ${{ github.workspace }}/build-server | sed "s|${{ github.workspace }}/||g" > artifacts/changes.diff
+
+ - name: Save PR number
+ run: echo "${EVENT_NUMBER}" > ./artifacts/NR
+ env:
+ EVENT_NUMBER: ${{ github.event.number }}
+
+ # Uploads the associated text files as an artifact.
+ - name: Upload comparison results as an artifact
+ uses: actions/upload-artifact@bbbca2ddaa5d8feaa63e36b76fdaad77386f024f # v7.0.0
+ if: ${{ github.repository == 'WordPress/wordpress-develop' && github.event_name == 'pull_request' }}
+ with:
+ name: build-server-comparison
+ path: artifacts/
From af478210a4be630fe80fcf94ecc36450972bc507 Mon Sep 17 00:00:00 2001
From: Jonathan Desrosiers <359867+desrosj@users.noreply.github.com>
Date: Tue, 17 Mar 2026 23:22:36 -0400
Subject: [PATCH 02/12] Account for differences in branch names.
---
.github/workflows/reusable-compare-built-files-v1.yml | 1 +
1 file changed, 1 insertion(+)
diff --git a/.github/workflows/reusable-compare-built-files-v1.yml b/.github/workflows/reusable-compare-built-files-v1.yml
index 94debf8a47a23..59fa79dc5e111 100644
--- a/.github/workflows/reusable-compare-built-files-v1.yml
+++ b/.github/workflows/reusable-compare-built-files-v1.yml
@@ -82,6 +82,7 @@ jobs:
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
with:
repository: 'WordPress/WordPress'
+ ref: ${{ github.base_ref == 'trunk' && 'master' || format( '{0}-branch', github.base_ref ) }}
path: ${{ github.workspace }}/build-server
show-progress: ${{ runner.debug == '1' && 'true' || 'false' }}
persist-credentials: false
From 844f3e353b32491aa3be29070ac36e942f71bde0 Mon Sep 17 00:00:00 2001
From: Jonathan Desrosiers <359867+desrosj@users.noreply.github.com>
Date: Mon, 16 Mar 2026 13:30:18 -0400
Subject: [PATCH 03/12] Re-add Dependabot file.
---
.github/dependabot.yml | 213 +++++++++++++++++++++++++++++++++++++++++
1 file changed, 213 insertions(+)
create mode 100644 .github/dependabot.yml
diff --git a/.github/dependabot.yml b/.github/dependabot.yml
new file mode 100644
index 0000000000000..24e2573546f53
--- /dev/null
+++ b/.github/dependabot.yml
@@ -0,0 +1,213 @@
+# Configure Dependabot scanning.
+version: 2
+
+updates:
+ # Check for updates to GitHub Actions.
+ - package-ecosystem: "github-actions"
+ directory: "/"
+ schedule:
+ interval: "daily"
+ open-pull-requests-limit: 10
+ groups:
+ github-actions:
+ patterns:
+ - "*"
+
+ # Check for updates to Composer packages.
+ - package-ecosystem: "composer"
+ directory: "/"
+ schedule:
+ interval: "daily"
+ open-pull-requests-limit: 10
+ ignore:
+ # These dependencies do not currently need to be managed with Dependabot.
+ - dependency-name: "squizlabs/php_codesniffer"
+ - dependency-name: "wp-coding-standards/wpcs"
+ - dependency-name: "phpcompatibility/php-compatibility"
+ - dependency-name: "yoast/phpunit-polyfills"
+ groups:
+ composer-packages:
+ patterns:
+ - "composer/ca-bundle"
+
+ # Monitor some npm dependencies for updates in groups.
+ - package-ecosystem: "npm"
+ directory: "/"
+ schedule:
+ interval: "daily"
+ open-pull-requests-limit: 20
+ ignore:
+ - dependency-name: "@wordpress/*"
+ groups:
+ ##
+ # Groups for updating devDependencies.
+ ##
+
+ # Dependencies related to Playwright testing (E2E, performance).
+ tests-playwright:
+ patterns:
+ - "*playwright*"
+ # Dependencies related to JavaScript testing with QUnit.
+ tests-qunit:
+ patterns:
+ - "*qunit*"
+ - "sinon*"
+ # Dependencies related to CSS and SASS building and manilupating.
+ dev-css-sass:
+ patterns:
+ - "autoprefixer"
+ # postcss and css related dependencies.
+ - "*css*"
+ - "*sass"
+ # Dependencies related to the Webpack build process.
+ dev-webpack:
+ patterns:
+ - "*webpack*"
+ - "react-refresh"
+ - "source-map-loader"
+ # Dependencies related to the local Docker development environment.
+ dev-docker:
+ patterns:
+ - "dotenv*"
+ - "wait-on"
+ # Dependencies that do not fall into a specific grouping.
+ dev-miscellaneous:
+ patterns:
+ - "chalk"
+ - "check-node-version"
+ - "ink-docstrap"
+ - "install-changed"
+ - "matchdep"
+ - "uuid"
+ # Dependencies related to JavaScript minification.
+ dev-uglify:
+ patterns:
+ - "*uglify*"
+ # All GruntJS related dependencies that do not relate to another group.
+ dev-grunt:
+ patterns:
+ - "*grunt*"
+
+ ##
+ # Groups for updating production dependencies.
+ ##
+
+ # Dependencies related to jQuery and its ecosystem.
+ external-jquery:
+ patterns:
+ - "jquery*"
+ # Dependencies related to React and its ecosystem.
+ external-react:
+ patterns:
+ - "react*"
+ - "!react-refresh"
+ # Dependencies used for bundling polyfill libraries into WordPress.
+ external-polyfills:
+ patterns:
+ - "core-js-url-browser"
+ - "element-closest"
+ - "formdata-polyfill"
+ - "imagesloaded"
+ - "objectFitPolyfill"
+ - "polyfill-library"
+ - "regenerator-runtime"
+ - "whatwg-fetch"
+ - "wicg-inert"
+ # Dependencies related to the Masonry library.
+ external-masonry:
+ patterns:
+ - "masonry-layout"
+ # Dependencies that do not fall into a specific grouping.
+ external-miscellaneous:
+ patterns:
+ - "backbone"
+ - "clipboard"
+ - "hoverintent"
+ - "json2php"
+ - "lodash"
+ - "moment"
+ - "underscore"
+
+ # Monitor npm dependencies within default themes.
+ - package-ecosystem: "npm"
+ directory: "/src/wp-content/themes/twentytwentyfive"
+ schedule:
+ interval: "weekly"
+ open-pull-requests-limit: 20
+ groups:
+ twentytwentyfive-css:
+ patterns:
+ - "**browserslist*"
+ - "*css*"
+
+ - package-ecosystem: "npm"
+ directory: "/src/wp-content/themes/twentytwentytwo"
+ schedule:
+ interval: "weekly"
+ open-pull-requests-limit: 20
+ groups:
+ twentytwentytwo-css:
+ patterns:
+ - "**browserslist*"
+ - "*css*"
+
+ - package-ecosystem: "npm"
+ directory: "/src/wp-content/themes/twentytwentyone"
+ schedule:
+ interval: "weekly"
+ open-pull-requests-limit: 20
+ groups:
+ twentytwentyone-sass-css:
+ patterns:
+ - "**browserslist*"
+ - "autoprefixer"
+ - "*css*"
+ - "*sass*"
+ - "!*stylelint*"
+ twentytwentyone-eslint:
+ patterns:
+ - "**eslint*"
+ twentytwentyone-stylelint:
+ patterns:
+ - "**stylelint*"
+ twentytwentyone-miscellaneous:
+ patterns:
+ - "chokidar-cli"
+ - "minimist"
+ - "npm-run-all"
+
+ - package-ecosystem: "npm"
+ directory: "/src/wp-content/themes/twentytwenty"
+ schedule:
+ interval: "weekly"
+ open-pull-requests-limit: 20
+ groups:
+ twentytwenty-css:
+ patterns:
+ - "**browserslist*"
+ - "autoprefixer"
+ - "*css*"
+ twentytwenty-stylelint:
+ patterns:
+ - "*stylelint*"
+ twentytwenty-miscellaneous:
+ patterns:
+ - "concurrently"
+ - "@wordpress/scripts"
+
+ - package-ecosystem: "npm"
+ directory: "/src/wp-content/themes/twentynineteen"
+ schedule:
+ interval: "weekly"
+ open-pull-requests-limit: 20
+ groups:
+ twentynineteen-css-sass:
+ patterns:
+ - "**browserslist*"
+ - "autoprefixer"
+ - "*css*"
+ - "*sass*"
+ twentynineteen-miscellaneous:
+ patterns:
+ - "chokidar-cli"
+ - "npm-run-all"
From c93f6c38d9090e9014e71eb0959d6780f9cfdb6f Mon Sep 17 00:00:00 2001
From: Jonathan Desrosiers <359867+desrosj@users.noreply.github.com>
Date: Wed, 18 Mar 2026 00:01:51 -0400
Subject: [PATCH 04/12] Disable repository restrictions for now.
---
.github/workflows/check-built-files.yml | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/.github/workflows/check-built-files.yml b/.github/workflows/check-built-files.yml
index 3409a1b124eaf..72a1ad4e1a0a4 100644
--- a/.github/workflows/check-built-files.yml
+++ b/.github/workflows/check-built-files.yml
@@ -61,4 +61,4 @@ jobs:
uses: ./.github/workflows/reusable-compare-built-files-v1.yml
permissions:
contents: read
- if: ${{ github.repository == 'WordPress/wordpress-develop' || github.event_name == 'pull_request' }}
+ #if: ${{ github.repository == 'WordPress/wordpress-develop' || github.event_name == 'pull_request' }}
From 6e972897a13568cec3999cba292e3845e9a50ed7 Mon Sep 17 00:00:00 2001
From: Jonathan Desrosiers <359867+desrosj@users.noreply.github.com>
Date: Wed, 18 Mar 2026 00:11:50 -0400
Subject: [PATCH 05/12] Remove repo restriction.
---
.github/workflows/pull-request-comments.yml | 1 -
1 file changed, 1 deletion(-)
diff --git a/.github/workflows/pull-request-comments.yml b/.github/workflows/pull-request-comments.yml
index 8e2cba4bfd766..3035ab4eb102f 100644
--- a/.github/workflows/pull-request-comments.yml
+++ b/.github/workflows/pull-request-comments.yml
@@ -190,7 +190,6 @@ jobs:
issues: write
pull-requests: write
if: >
- github.repository == 'WordPress/wordpress-develop' &&
github.event.workflow_run.event == 'pull_request' &&
github.event.workflow_run.name == 'Check Built Files (PRs)' &&
github.event.workflow_run.conclusion == 'success'
From ca165513e4a2c198a9530cd161870c83d70ce371 Mon Sep 17 00:00:00 2001
From: Jonathan Desrosiers <359867+desrosj@users.noreply.github.com>
Date: Wed, 18 Mar 2026 00:22:58 -0400
Subject: [PATCH 06/12] Fix syntax error.
---
.github/workflows/pull-request-comments.yml | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/.github/workflows/pull-request-comments.yml b/.github/workflows/pull-request-comments.yml
index 3035ab4eb102f..13ffa720409e1 100644
--- a/.github/workflows/pull-request-comments.yml
+++ b/.github/workflows/pull-request-comments.yml
@@ -274,7 +274,7 @@ jobs:
if ( fileChanges.trim() === '' ) {
commentInfo.body += 'The contents of the `build` directory after running `npm run build` matches the contents of the WordPress/WordPress repository. No differences were found.';
} else {
- commentInfo.body += 'The contents of the `build` directory after running `npm run build` has been compared with the contents of the WordPress/WordPress repository.
+ commentInfo.body += `The contents of the \`build\` directory after running \`npm run build\` has been compared with the contents of the WordPress/WordPress repository.
**Review these differences carefully for any unexpected results.**
From de31d3efdd2536d86a7d849a8f203e21d971caa8 Mon Sep 17 00:00:00 2001
From: Jonathan Desrosiers <359867+desrosj@users.noreply.github.com>
Date: Wed, 18 Mar 2026 00:30:28 -0400
Subject: [PATCH 07/12] Add new lines.
---
.github/workflows/pull-request-comments.yml | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/.github/workflows/pull-request-comments.yml b/.github/workflows/pull-request-comments.yml
index 13ffa720409e1..ec643b5db8448 100644
--- a/.github/workflows/pull-request-comments.yml
+++ b/.github/workflows/pull-request-comments.yml
@@ -268,7 +268,7 @@ jobs:
}
};
- commentInfo.body = '## Build Server Comparison';
+ commentInfo.body = "## Build Server Comparison\n\n";
// Post or update the comment.
if ( fileChanges.trim() === '' ) {
From db0f4dcfe1108d91ddeddfbb4973c08b48678f77 Mon Sep 17 00:00:00 2001
From: Jonathan Desrosiers <359867+desrosj@users.noreply.github.com>
Date: Wed, 18 Mar 2026 00:36:35 -0400
Subject: [PATCH 08/12] Add missing env-var.
---
.github/workflows/pull-request-comments.yml | 3 +++
1 file changed, 3 insertions(+)
diff --git a/.github/workflows/pull-request-comments.yml b/.github/workflows/pull-request-comments.yml
index ec643b5db8448..6bae9473286bc 100644
--- a/.github/workflows/pull-request-comments.yml
+++ b/.github/workflows/pull-request-comments.yml
@@ -230,6 +230,9 @@ jobs:
- name: Leave a comment with any differences noticed
uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd # v8.0.0
+ env:
+ RUN_ID:
+ ${{ github.event.workflow_run.id }}
with:
script: |
const fs = require( 'fs' );
From 3ab242a55b0346416aa7a2359f1395added0c528 Mon Sep 17 00:00:00 2001
From: Jonathan Desrosiers <359867+desrosj@users.noreply.github.com>
Date: Wed, 18 Mar 2026 00:41:38 -0400
Subject: [PATCH 09/12] Correct duplicate check.
---
.github/workflows/pull-request-comments.yml | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/.github/workflows/pull-request-comments.yml b/.github/workflows/pull-request-comments.yml
index 6bae9473286bc..8b56f7b4a136f 100644
--- a/.github/workflows/pull-request-comments.yml
+++ b/.github/workflows/pull-request-comments.yml
@@ -265,7 +265,7 @@ jobs:
const comments = ( await github.rest.issues.listComments( commentInfo ) ).data;
for ( const currentComment of comments ) {
- if ( currentComment.user.type === 'Bot' && currentComment.body.includes( 'Build Script Results Comparison' ) ) {
+ if ( currentComment.user.type === 'Bot' && currentComment.body.includes( 'Build Server Comparison' ) ) {
commentInfo.comment_id = currentComment.id;
break;
}
From 80a2b0b71180bdad87c03ea8399083fe33d870fc Mon Sep 17 00:00:00 2001
From: Jonathan Desrosiers <359867+desrosj@users.noreply.github.com>
Date: Wed, 18 Mar 2026 09:05:47 -0400
Subject: [PATCH 10/12] Apply some adjustments.
---
.github/workflows/pull-request-comments.yml | 5 +----
1 file changed, 1 insertion(+), 4 deletions(-)
diff --git a/.github/workflows/pull-request-comments.yml b/.github/workflows/pull-request-comments.yml
index 8b56f7b4a136f..521116696350f 100644
--- a/.github/workflows/pull-request-comments.yml
+++ b/.github/workflows/pull-request-comments.yml
@@ -230,9 +230,6 @@ jobs:
- name: Leave a comment with any differences noticed
uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd # v8.0.0
- env:
- RUN_ID:
- ${{ github.event.workflow_run.id }}
with:
script: |
const fs = require( 'fs' );
@@ -315,7 +312,7 @@ jobs:
`;
}
- commentInfo.body += `[Download the complete .diff file from the workflow run](https://github.com/${ context.repo.owner }/${ context.repo.repo }/actions/runs/${ process.env.RUN_ID }).`;
+ commentInfo.body += `[Download the complete .diff file from the workflow run](https://github.com/${ context.repo.owner }/${ context.repo.repo }/actions/runs/${ context.payload.workflow_run.id }).`;
}
if ( commentInfo.comment_id ) {
From 55eabbbcc3f11ccdf36c4103e60074ebbef8d959 Mon Sep 17 00:00:00 2001
From: Jonathan Desrosiers <359867+desrosj@users.noreply.github.com>
Date: Wed, 18 Mar 2026 09:07:14 -0400
Subject: [PATCH 11/12] Ensure markdown is parsed as such.
---
.github/workflows/pull-request-comments.yml | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/.github/workflows/pull-request-comments.yml b/.github/workflows/pull-request-comments.yml
index 521116696350f..8744fe7be4444 100644
--- a/.github/workflows/pull-request-comments.yml
+++ b/.github/workflows/pull-request-comments.yml
@@ -312,7 +312,7 @@ jobs:
`;
}
- commentInfo.body += `[Download the complete .diff file from the workflow run](https://github.com/${ context.repo.owner }/${ context.repo.repo }/actions/runs/${ context.payload.workflow_run.id }).`;
+ commentInfo.body += `\n\n[Download the complete .diff file from the workflow run](https://github.com/${ context.repo.owner }/${ context.repo.repo }/actions/runs/${ context.payload.workflow_run.id }).`;
}
if ( commentInfo.comment_id ) {
From 35e7e2d19bfbc5861a427175485413881c190ee6 Mon Sep 17 00:00:00 2001
From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com>
Date: Sat, 28 Mar 2026 02:20:45 +0000
Subject: [PATCH 12/12] Bump espree and @types/espree
Bumps [espree](https://github.com/eslint/js/tree/HEAD/packages/espree) and [@types/espree](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/espree). These dependencies needed to be updated together.
Updates `espree` from 9.6.1 to 11.2.0
- [Release notes](https://github.com/eslint/js/releases)
- [Changelog](https://github.com/eslint/js/blob/main/packages/espree/CHANGELOG.md)
- [Commits](https://github.com/eslint/js/commits/espree-v11.2.0/packages/espree)
Updates `@types/espree` from 10.1.0 to 11.1.0
- [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases)
- [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/espree)
---
updated-dependencies:
- dependency-name: espree
dependency-version: 11.2.0
dependency-type: direct:production
update-type: version-update:semver-major
- dependency-name: "@types/espree"
dependency-version: 11.1.0
dependency-type: direct:development
update-type: version-update:semver-major
...
Signed-off-by: dependabot[bot]
---
package-lock.json | 97 ++++++++++++++++++++++++++++++++---------------
package.json | 4 +-
2 files changed, 69 insertions(+), 32 deletions(-)
diff --git a/package-lock.json b/package-lock.json
index a48bff6270b72..aa23bd52c59c6 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -16,7 +16,7 @@
"core-js-url-browser": "3.6.4",
"csslint": "1.0.5",
"element-closest": "3.0.2",
- "espree": "9.6.1",
+ "espree": "11.2.0",
"esprima": "4.0.1",
"formdata-polyfill": "4.0.10",
"hoverintent": "2.2.1",
@@ -45,7 +45,7 @@
"@playwright/test": "1.58.2",
"@pmmmwh/react-refresh-webpack-plugin": "0.6.2",
"@types/codemirror": "5.60.17",
- "@types/espree": "10.1.0",
+ "@types/espree": "11.1.0",
"@types/htmlhint": "1.1.5",
"@types/jquery": "3.5.34",
"@types/underscore": "1.13.0",
@@ -2418,6 +2418,37 @@
"dev": true,
"license": "Python-2.0"
},
+ "node_modules/@eslint/eslintrc/node_modules/eslint-visitor-keys": {
+ "version": "3.4.3",
+ "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz",
+ "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==",
+ "dev": true,
+ "license": "Apache-2.0",
+ "engines": {
+ "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/eslint"
+ }
+ },
+ "node_modules/@eslint/eslintrc/node_modules/espree": {
+ "version": "9.6.1",
+ "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz",
+ "integrity": "sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==",
+ "dev": true,
+ "license": "BSD-2-Clause",
+ "dependencies": {
+ "acorn": "^8.9.0",
+ "acorn-jsx": "^5.3.2",
+ "eslint-visitor-keys": "^3.4.1"
+ },
+ "engines": {
+ "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/eslint"
+ }
+ },
"node_modules/@eslint/eslintrc/node_modules/globals": {
"version": "13.24.0",
"resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz",
@@ -5453,27 +5484,14 @@
}
},
"node_modules/@types/espree": {
- "version": "10.1.0",
- "resolved": "https://registry.npmjs.org/@types/espree/-/espree-10.1.0.tgz",
- "integrity": "sha512-uPQZdoUWWMuO6WS8/dwX1stZH/vOBa/wAniGnYEFI0IuU9RmLx6PLmo+VGfNOlbRc5I7hBsQc8H0zcdVI37kxg==",
+ "version": "11.1.0",
+ "resolved": "https://registry.npmjs.org/@types/espree/-/espree-11.1.0.tgz",
+ "integrity": "sha512-yz3MRjG3qqvfkMR+IkPXN+dHVhSZyuCui2RGEm+mY0gXYlIuYS+AEW2J2UKPuvs0Vmh8xUxhtQ3yrln0/Y8ZLw==",
+ "deprecated": "This is a stub types definition. espree provides its own type definitions, so you do not need this installed.",
"dev": true,
"license": "MIT",
"dependencies": {
- "acorn": "^8.12.0",
- "eslint-visitor-keys": "^4.0.0"
- }
- },
- "node_modules/@types/espree/node_modules/eslint-visitor-keys": {
- "version": "4.2.1",
- "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.1.tgz",
- "integrity": "sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ==",
- "dev": true,
- "license": "Apache-2.0",
- "engines": {
- "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
- },
- "funding": {
- "url": "https://opencollective.com/eslint"
+ "espree": "*"
}
},
"node_modules/@types/estree": {
@@ -14074,6 +14092,24 @@
"url": "https://opencollective.com/eslint"
}
},
+ "node_modules/eslint/node_modules/espree": {
+ "version": "9.6.1",
+ "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz",
+ "integrity": "sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==",
+ "dev": true,
+ "license": "BSD-2-Clause",
+ "dependencies": {
+ "acorn": "^8.9.0",
+ "acorn-jsx": "^5.3.2",
+ "eslint-visitor-keys": "^3.4.1"
+ },
+ "engines": {
+ "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/eslint"
+ }
+ },
"node_modules/eslint/node_modules/estraverse": {
"version": "5.3.0",
"resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz",
@@ -14196,28 +14232,29 @@
}
},
"node_modules/espree": {
- "version": "9.6.1",
- "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz",
- "integrity": "sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==",
+ "version": "11.2.0",
+ "resolved": "https://registry.npmjs.org/espree/-/espree-11.2.0.tgz",
+ "integrity": "sha512-7p3DrVEIopW1B1avAGLuCSh1jubc01H2JHc8B4qqGblmg5gI9yumBgACjWo4JlIc04ufug4xJ3SQI8HkS/Rgzw==",
+ "license": "BSD-2-Clause",
"dependencies": {
- "acorn": "^8.9.0",
+ "acorn": "^8.16.0",
"acorn-jsx": "^5.3.2",
- "eslint-visitor-keys": "^3.4.1"
+ "eslint-visitor-keys": "^5.0.1"
},
"engines": {
- "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+ "node": "^20.19.0 || ^22.13.0 || >=24"
},
"funding": {
"url": "https://opencollective.com/eslint"
}
},
"node_modules/espree/node_modules/eslint-visitor-keys": {
- "version": "3.4.3",
- "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz",
- "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==",
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-5.0.1.tgz",
+ "integrity": "sha512-tD40eHxA35h0PEIZNeIjkHoDR4YjjJp34biM0mDvplBe//mB+IHCqHDGV7pxF+7MklTvighcCPPZC7ynWyjdTA==",
"license": "Apache-2.0",
"engines": {
- "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+ "node": "^20.19.0 || ^22.13.0 || >=24"
},
"funding": {
"url": "https://opencollective.com/eslint"
diff --git a/package.json b/package.json
index 82bb2d4f7a8c9..98837ed03417a 100644
--- a/package.json
+++ b/package.json
@@ -32,7 +32,7 @@
"@playwright/test": "1.58.2",
"@pmmmwh/react-refresh-webpack-plugin": "0.6.2",
"@types/codemirror": "5.60.17",
- "@types/espree": "10.1.0",
+ "@types/espree": "11.1.0",
"@types/htmlhint": "1.1.5",
"@types/jquery": "3.5.34",
"@types/underscore": "1.13.0",
@@ -88,7 +88,7 @@
"core-js-url-browser": "3.6.4",
"csslint": "1.0.5",
"element-closest": "3.0.2",
- "espree": "9.6.1",
+ "espree": "11.2.0",
"esprima": "4.0.1",
"formdata-polyfill": "4.0.10",
"hoverintent": "2.2.1",