<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head><meta http-equiv="content-type" content="text/html; charset=utf-8" />
<title>[59679] trunk: Build/Test Tools: Improve the security and correctness of the GitHub Actions workflows files.</title>
</head>
<body>

<style type="text/css"><!--
#msg dl.meta { border: 1px #006 solid; background: #369; padding: 6px; color: #fff; }
#msg dl.meta dt { float: left; width: 6em; font-weight: bold; }
#msg dt:after { content:':';}
#msg dl, #msg dt, #msg ul, #msg li, #header, #footer, #logmsg { font-family: verdana,arial,helvetica,sans-serif; font-size: 10pt;  }
#msg dl a { font-weight: bold}
#msg dl a:link    { color:#fc3; }
#msg dl a:active  { color:#ff0; }
#msg dl a:visited { color:#cc6; }
h3 { font-family: verdana,arial,helvetica,sans-serif; font-size: 10pt; font-weight: bold; }
#msg pre { white-space: pre-line; overflow: auto; background: #ffc; border: 1px #fa0 solid; padding: 6px; }
#logmsg { background: #ffc; border: 1px #fa0 solid; padding: 1em 1em 0 1em; }
#logmsg p, #logmsg pre, #logmsg blockquote { margin: 0 0 1em 0; }
#logmsg p, #logmsg li, #logmsg dt, #logmsg dd { line-height: 14pt; }
#logmsg h1, #logmsg h2, #logmsg h3, #logmsg h4, #logmsg h5, #logmsg h6 { margin: .5em 0; }
#logmsg h1:first-child, #logmsg h2:first-child, #logmsg h3:first-child, #logmsg h4:first-child, #logmsg h5:first-child, #logmsg h6:first-child { margin-top: 0; }
#logmsg ul, #logmsg ol { padding: 0; list-style-position: inside; margin: 0 0 0 1em; }
#logmsg ul { text-indent: -1em; padding-left: 1em; }#logmsg ol { text-indent: -1.5em; padding-left: 1.5em; }
#logmsg > ul, #logmsg > ol { margin: 0 0 1em 0; }
#logmsg pre { background: #eee; padding: 1em; }
#logmsg blockquote { border: 1px solid #fa0; border-left-width: 10px; padding: 1em 1em 0 1em; background: white;}
#logmsg dl { margin: 0; }
#logmsg dt { font-weight: bold; }
#logmsg dd { margin: 0; padding: 0 0 0.5em 0; }
#logmsg dd:before { content:'\00bb';}
#logmsg table { border-spacing: 0px; border-collapse: collapse; border-top: 4px solid #fa0; border-bottom: 1px solid #fa0; background: #fff; }
#logmsg table th { text-align: left; font-weight: normal; padding: 0.2em 0.5em; border-top: 1px dotted #fa0; }
#logmsg table td { text-align: right; border-top: 1px dotted #fa0; padding: 0.2em 0.5em; }
#logmsg table thead th { text-align: center; border-bottom: 1px solid #fa0; }
#logmsg table th.Corner { text-align: left; }
#logmsg hr { border: none 0; border-top: 2px dashed #fa0; height: 1px; }
#header, #footer { color: #fff; background: #636; border: 1px #300 solid; padding: 6px; }
#patch { width: 100%; }
#patch h4 {font-family: verdana,arial,helvetica,sans-serif;font-size:10pt;padding:8px;background:#369;color:#fff;margin:0;}
#patch .propset h4, #patch .binary h4 {margin:0;}
#patch pre {padding:0;line-height:1.2em;margin:0;}
#patch .diff {width:100%;background:#eee;padding: 0 0 10px 0;overflow:auto;}
#patch .propset .diff, #patch .binary .diff  {padding:10px 0;}
#patch span {display:block;padding:0 10px;}
#patch .modfile, #patch .addfile, #patch .delfile, #patch .propset, #patch .binary, #patch .copfile {border:1px solid #ccc;margin:10px 0;}
#patch ins {background:#dfd;text-decoration:none;display:block;padding:0 10px;}
#patch del {background:#fdd;text-decoration:none;display:block;padding:0 10px;}
#patch .lines, .info {color:#888;background:#fff;}
--></style>
<div id="msg">
<dl class="meta" style="font-size: 105%">
<dt style="float: left; width: 6em; font-weight: bold">Revision</dt> <dd><a style="font-weight: bold" href="https://core.trac.wordpress.org/changeset/59679">59679</a><script type="application/ld+json">{"@context":"http://schema.org","@type":"EmailMessage","description":"Review this Commit","action":{"@type":"ViewAction","url":"https://core.trac.wordpress.org/changeset/59679","name":"Review Commit"}}</script></dd>
<dt style="float: left; width: 6em; font-weight: bold">Author</dt> <dd>johnbillion</dd>
<dt style="float: left; width: 6em; font-weight: bold">Date</dt> <dd>2025-01-22 15:13:21 +0000 (Wed, 22 Jan 2025)</dd>
</dl>

<pre style='padding-left: 1em; margin: 2em 0; border-left: 2px solid #ccc; line-height: 1.25; font-size: 105%; font-family: sans-serif'>Build/Test Tools: Improve the security and correctness of the GitHub Actions workflows files.

This includes removing use of dangerous inline GitHub Actions expressions, preventing word splitting, further tightening permissions, and generally improving many aspects of the workflows.

This also introduces a new workflow that runs Actionlint to detect incorrect and insecure code and configuration in workflow files.

Props johnbillion, swissspidy, flixos90, desrosj.

See <a href="https://core.trac.wordpress.org/ticket/62221">#62221</a></pre>

<h3>Modified Paths</h3>
<ul>
<li><a href="#trunkgithubworkflowscodingstandardsyml">trunk/.github/workflows/coding-standards.yml</a></li>
<li><a href="#trunkgithubworkflowsendtoendtestsyml">trunk/.github/workflows/end-to-end-tests.yml</a></li>
<li><a href="#trunkgithubworkflowsfailedworkflowyml">trunk/.github/workflows/failed-workflow.yml</a></li>
<li><a href="#trunkgithubworkflowsinstalltestingyml">trunk/.github/workflows/install-testing.yml</a></li>
<li><a href="#trunkgithubworkflowsjavascripttestsyml">trunk/.github/workflows/javascript-tests.yml</a></li>
<li><a href="#trunkgithubworkflowslocaldockerenvironmentyml">trunk/.github/workflows/local-docker-environment.yml</a></li>
<li><a href="#trunkgithubworkflowsperformanceyml">trunk/.github/workflows/performance.yml</a></li>
<li><a href="#trunkgithubworkflowsphpcompatibilityyml">trunk/.github/workflows/php-compatibility.yml</a></li>
<li><a href="#trunkgithubworkflowsphpunittestsyml">trunk/.github/workflows/phpunit-tests.yml</a></li>
<li><a href="#trunkgithubworkflowspropsbotyml">trunk/.github/workflows/props-bot.yml</a></li>
<li><a href="#trunkgithubworkflowspullrequestcommentsyml">trunk/.github/workflows/pull-request-comments.yml</a></li>
<li><a href="#trunkgithubworkflowsreusablecleanuppullrequestsyml">trunk/.github/workflows/reusable-cleanup-pull-requests.yml</a></li>
<li><a href="#trunkgithubworkflowsreusablecodingstandardsjavascriptyml">trunk/.github/workflows/reusable-coding-standards-javascript.yml</a></li>
<li><a href="#trunkgithubworkflowsreusablecodingstandardsphpyml">trunk/.github/workflows/reusable-coding-standards-php.yml</a></li>
<li><a href="#trunkgithubworkflowsreusableendtoendtestsyml">trunk/.github/workflows/reusable-end-to-end-tests.yml</a></li>
<li><a href="#trunkgithubworkflowsreusablejavascripttestsyml">trunk/.github/workflows/reusable-javascript-tests.yml</a></li>
<li><a href="#trunkgithubworkflowsreusableperformanceyml">trunk/.github/workflows/reusable-performance.yml</a></li>
<li><a href="#trunkgithubworkflowsreusablephpcompatibilityyml">trunk/.github/workflows/reusable-php-compatibility.yml</a></li>
<li><a href="#trunkgithubworkflowsreusablephpunittestsv1yml">trunk/.github/workflows/reusable-phpunit-tests-v1.yml</a></li>
<li><a href="#trunkgithubworkflowsreusablephpunittestsv2yml">trunk/.github/workflows/reusable-phpunit-tests-v2.yml</a></li>
<li><a href="#trunkgithubworkflowsreusablephpunittestsv3yml">trunk/.github/workflows/reusable-phpunit-tests-v3.yml</a></li>
<li><a href="#trunkgithubworkflowsreusablesupportjsonreaderv1yml">trunk/.github/workflows/reusable-support-json-reader-v1.yml</a></li>
<li><a href="#trunkgithubworkflowsreusabletestcorebuildprocessyml">trunk/.github/workflows/reusable-test-core-build-process.yml</a></li>
<li><a href="#trunkgithubworkflowsreusabletestgutenbergbuildprocessyml">trunk/.github/workflows/reusable-test-gutenberg-build-process.yml</a></li>
<li><a href="#trunkgithubworkflowsreusabletestlocaldockerenvironmentv1yml">trunk/.github/workflows/reusable-test-local-docker-environment-v1.yml</a></li>
<li><a href="#trunkgithubworkflowsreusableupgradetestingyml">trunk/.github/workflows/reusable-upgrade-testing.yml</a></li>
<li><a href="#trunkgithubworkflowsslacknotificationsyml">trunk/.github/workflows/slack-notifications.yml</a></li>
<li><a href="#trunkgithubworkflowstestandzipdefaultthemesyml">trunk/.github/workflows/test-and-zip-default-themes.yml</a></li>
<li><a href="#trunkgithubworkflowsupgradetestingyml">trunk/.github/workflows/upgrade-testing.yml</a></li>
<li><a href="#trunkdockercomposeyml">trunk/docker-compose.yml</a></li>
</ul>

<h3>Added Paths</h3>
<ul>
<li><a href="#trunkgithubworkflowsreusableworkflowlintyml">trunk/.github/workflows/reusable-workflow-lint.yml</a></li>
<li><a href="#trunkgithubworkflowsworkflowlintyml">trunk/.github/workflows/workflow-lint.yml</a></li>
</ul>

</div>
<div id="patch">
<h3>Diff</h3>
<a id="trunkgithubworkflowscodingstandardsyml"></a>
<div class="modfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Modified: trunk/.github/workflows/coding-standards.yml</h4>
<pre class="diff"><span>
<span class="info" style="display: block; padding: 0 10px; color: #888">--- trunk/.github/workflows/coding-standards.yml      2025-01-22 14:04:34 UTC (rev 59678)
+++ trunk/.github/workflows/coding-standards.yml        2025-01-22 15:13:21 UTC (rev 59679)
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -107,6 +107,6 @@
</span><span class="cx" style="display: block; padding: 0 10px">               workflow_id: 'failed-workflow.yml',
</span><span class="cx" style="display: block; padding: 0 10px">               ref: 'trunk',
</span><span class="cx" style="display: block; padding: 0 10px">               inputs: {
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                run_id: '${{ github.run_id }}'
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                run_id: context.runId,
</ins><span class="cx" style="display: block; padding: 0 10px">               }
</span><span class="cx" style="display: block; padding: 0 10px">             });
</span></span></pre></div>
<a id="trunkgithubworkflowsendtoendtestsyml"></a>
<div class="modfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Modified: trunk/.github/workflows/end-to-end-tests.yml</h4>
<pre class="diff"><span>
<span class="info" style="display: block; padding: 0 10px; color: #888">--- trunk/.github/workflows/end-to-end-tests.yml      2025-01-22 14:04:34 UTC (rev 59678)
+++ trunk/.github/workflows/end-to-end-tests.yml        2025-01-22 15:13:21 UTC (rev 59679)
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -93,6 +93,6 @@
</span><span class="cx" style="display: block; padding: 0 10px">               workflow_id: 'failed-workflow.yml',
</span><span class="cx" style="display: block; padding: 0 10px">               ref: 'trunk',
</span><span class="cx" style="display: block; padding: 0 10px">               inputs: {
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                run_id: '${{ github.run_id }}'
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                run_id: context.runId,
</ins><span class="cx" style="display: block; padding: 0 10px">               }
</span><span class="cx" style="display: block; padding: 0 10px">             });
</span></span></pre></div>
<a id="trunkgithubworkflowsfailedworkflowyml"></a>
<div class="modfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Modified: trunk/.github/workflows/failed-workflow.yml</h4>
<pre class="diff"><span>
<span class="info" style="display: block; padding: 0 10px; color: #888">--- trunk/.github/workflows/failed-workflow.yml       2025-01-22 14:04:34 UTC (rev 59678)
+++ trunk/.github/workflows/failed-workflow.yml 2025-01-22 15:13:21 UTC (rev 59679)
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -38,7 +38,7 @@
</span><span class="cx" style="display: block; padding: 0 10px">             const workflow_run = await github.rest.actions.getWorkflowRun({
</span><span class="cx" style="display: block; padding: 0 10px">               owner: context.repo.owner,
</span><span class="cx" style="display: block; padding: 0 10px">               repo: context.repo.repo,
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-              run_id: ${{ inputs.run_id }},
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+              run_id: process.env.RUN_ID,
</ins><span class="cx" style="display: block; padding: 0 10px">             });
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">             // Only rerun after the first run attempt.
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -49,6 +49,8 @@
</span><span class="cx" style="display: block; padding: 0 10px">             const rerun = await github.rest.actions.reRunWorkflowFailedJobs({
</span><span class="cx" style="display: block; padding: 0 10px">               owner: context.repo.owner,
</span><span class="cx" style="display: block; padding: 0 10px">               repo: context.repo.repo,
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-              run_id: ${{ inputs.run_id }},
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+              run_id: process.env.RUN_ID,
</ins><span class="cx" style="display: block; padding: 0 10px">               enable_debug_logging: true
</span><span class="cx" style="display: block; padding: 0 10px">             });
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+        env:
+          RUN_ID: ${{ inputs.run_id }}
</ins></span></pre></div>
<a id="trunkgithubworkflowsinstalltestingyml"></a>
<div class="modfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Modified: trunk/.github/workflows/install-testing.yml</h4>
<pre class="diff"><span>
<span class="info" style="display: block; padding: 0 10px; color: #888">--- trunk/.github/workflows/install-testing.yml       2025-01-22 14:04:34 UTC (rev 59678)
+++ trunk/.github/workflows/install-testing.yml 2025-01-22 15:13:21 UTC (rev 59679)
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -119,16 +119,20 @@
</span><span class="cx" style="display: block; padding: 0 10px">         with:
</span><span class="cx" style="display: block; padding: 0 10px">           php-version: '${{ matrix.php }}'
</span><span class="cx" style="display: block; padding: 0 10px">           coverage: none
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-          tools: wp-cli${{ contains( fromJSON('["5.4", "5.5"]'), matrix.php ) && ':2.4.0' || '' }}
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+          tools: ${{ contains( fromJSON('["5.4", "5.5"]'), matrix.php ) && 'wp-cli:2.4.0' || 'wp-cli' }}
</ins><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">       - name: Download WordPress
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-        run: wp core download ${{ inputs.wp-version && format( '--version={0}', inputs.wp-version ) || '--version=nightly' }}
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+        run: wp core download --version="${WP_VERSION}"
+        env:
+          WP_VERSION: ${{ inputs.wp-version || 'nightly' }}
</ins><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">       - name: Create wp-config.php file
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-        run: wp config create --dbname=test_db --dbuser=root --dbpass=root --dbhost=127.0.0.1:${{ job.services.database.ports['3306'] }}
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+        run: wp config create --dbname=test_db --dbuser=root --dbpass=root --dbhost="127.0.0.1:${DB_PORT}"
+        env:
+          DB_PORT: ${{ job.services.database.ports['3306'] }}
</ins><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">       - name: Install WordPress
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-        run: wp core ${{ matrix.multisite && 'multisite-' || '' }}install --url=http://localhost/ --title="Upgrade Test" --admin_user=admin --admin_password=password --admin_email=me@example.org --skip-email
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+        run: wp core ${{ matrix.multisite && 'multisite-install' || 'install' }} --url=http://localhost/ --title="Upgrade Test" --admin_user=admin --admin_password=password --admin_email=me@example.org --skip-email
</ins><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">   slack-notifications:
</span><span class="cx" style="display: block; padding: 0 10px">     name: Slack Notifications
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -175,6 +179,6 @@
</span><span class="cx" style="display: block; padding: 0 10px">               workflow_id: 'failed-workflow.yml',
</span><span class="cx" style="display: block; padding: 0 10px">               ref: 'trunk',
</span><span class="cx" style="display: block; padding: 0 10px">               inputs: {
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                run_id: '${{ github.run_id }}'
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                run_id: context.runId,
</ins><span class="cx" style="display: block; padding: 0 10px">               }
</span><span class="cx" style="display: block; padding: 0 10px">             });
</span></span></pre></div>
<a id="trunkgithubworkflowsjavascripttestsyml"></a>
<div class="modfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Modified: trunk/.github/workflows/javascript-tests.yml</h4>
<pre class="diff"><span>
<span class="info" style="display: block; padding: 0 10px; color: #888">--- trunk/.github/workflows/javascript-tests.yml      2025-01-22 14:04:34 UTC (rev 59678)
+++ trunk/.github/workflows/javascript-tests.yml        2025-01-22 15:13:21 UTC (rev 59679)
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -97,6 +97,6 @@
</span><span class="cx" style="display: block; padding: 0 10px">               workflow_id: 'failed-workflow.yml',
</span><span class="cx" style="display: block; padding: 0 10px">               ref: 'trunk',
</span><span class="cx" style="display: block; padding: 0 10px">               inputs: {
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                run_id: '${{ github.run_id }}'
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                run_id: context.runId,
</ins><span class="cx" style="display: block; padding: 0 10px">               }
</span><span class="cx" style="display: block; padding: 0 10px">             });
</span></span></pre></div>
<a id="trunkgithubworkflowslocaldockerenvironmentyml"></a>
<div class="modfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Modified: trunk/.github/workflows/local-docker-environment.yml</h4>
<pre class="diff"><span>
<span class="info" style="display: block; padding: 0 10px; color: #888">--- trunk/.github/workflows/local-docker-environment.yml      2025-01-22 14:04:34 UTC (rev 59678)
+++ trunk/.github/workflows/local-docker-environment.yml        2025-01-22 15:13:21 UTC (rev 59679)
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -104,7 +104,6 @@
</span><span class="cx" style="display: block; padding: 0 10px">       db-type: 'mysql'
</span><span class="cx" style="display: block; padding: 0 10px">       db-version: ${{ matrix.db-version }}
</span><span class="cx" style="display: block; padding: 0 10px">       memcached: ${{ matrix.memcached }}
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-      tests-domain: ${{ matrix.tests-domain }}
</del><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">   slack-notifications:
</span><span class="cx" style="display: block; padding: 0 10px">     name: Slack Notifications
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -151,6 +150,6 @@
</span><span class="cx" style="display: block; padding: 0 10px">               workflow_id: 'failed-workflow.yml',
</span><span class="cx" style="display: block; padding: 0 10px">               ref: 'trunk',
</span><span class="cx" style="display: block; padding: 0 10px">               inputs: {
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                run_id: '${{ github.run_id }}'
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                run_id: context.runId,
</ins><span class="cx" style="display: block; padding: 0 10px">               }
</span><span class="cx" style="display: block; padding: 0 10px">             });
</span></span></pre></div>
<a id="trunkgithubworkflowsperformanceyml"></a>
<div class="modfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Modified: trunk/.github/workflows/performance.yml</h4>
<pre class="diff"><span>
<span class="info" style="display: block; padding: 0 10px; color: #888">--- trunk/.github/workflows/performance.yml   2025-01-22 14:04:34 UTC (rev 59678)
+++ trunk/.github/workflows/performance.yml     2025-01-22 15:13:21 UTC (rev 59679)
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -93,6 +93,6 @@
</span><span class="cx" style="display: block; padding: 0 10px">               workflow_id: 'failed-workflow.yml',
</span><span class="cx" style="display: block; padding: 0 10px">               ref: 'trunk',
</span><span class="cx" style="display: block; padding: 0 10px">               inputs: {
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                run_id: '${{ github.run_id }}'
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                run_id: context.runId,
</ins><span class="cx" style="display: block; padding: 0 10px">               }
</span><span class="cx" style="display: block; padding: 0 10px">             });
</span></span></pre></div>
<a id="trunkgithubworkflowsphpcompatibilityyml"></a>
<div class="modfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Modified: trunk/.github/workflows/php-compatibility.yml</h4>
<pre class="diff"><span>
<span class="info" style="display: block; padding: 0 10px; color: #888">--- trunk/.github/workflows/php-compatibility.yml     2025-01-22 14:04:34 UTC (rev 59678)
+++ trunk/.github/workflows/php-compatibility.yml       2025-01-22 15:13:21 UTC (rev 59679)
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -94,6 +94,6 @@
</span><span class="cx" style="display: block; padding: 0 10px">               workflow_id: 'failed-workflow.yml',
</span><span class="cx" style="display: block; padding: 0 10px">               ref: 'trunk',
</span><span class="cx" style="display: block; padding: 0 10px">               inputs: {
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                run_id: '${{ github.run_id }}'
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                run_id: context.runId,
</ins><span class="cx" style="display: block; padding: 0 10px">               }
</span><span class="cx" style="display: block; padding: 0 10px">             });
</span></span></pre></div>
<a id="trunkgithubworkflowsphpunittestsyml"></a>
<div class="modfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Modified: trunk/.github/workflows/phpunit-tests.yml</h4>
<pre class="diff"><span>
<span class="info" style="display: block; padding: 0 10px; color: #888">--- trunk/.github/workflows/phpunit-tests.yml 2025-01-22 14:04:34 UTC (rev 59678)
+++ trunk/.github/workflows/phpunit-tests.yml   2025-01-22 15:13:21 UTC (rev 59679)
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -144,7 +144,7 @@
</span><span class="cx" style="display: block; padding: 0 10px">       multisite: ${{ matrix.multisite }}
</span><span class="cx" style="display: block; padding: 0 10px">       memcached: ${{ matrix.memcached }}
</span><span class="cx" style="display: block; padding: 0 10px">       phpunit-config: ${{ matrix.multisite && 'tests/phpunit/multisite.xml' || 'phpunit.xml.dist' }}
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-      report: ${{ matrix.report || false }}
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+      report: ${{ false }}
</ins><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">   #
</span><span class="cx" style="display: block; padding: 0 10px">   # Creates PHPUnit test jobs to test MariaDB and MySQL innovation releases.
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -193,7 +193,7 @@
</span><span class="cx" style="display: block; padding: 0 10px">       multisite: ${{ matrix.multisite }}
</span><span class="cx" style="display: block; padding: 0 10px">       memcached: ${{ matrix.memcached }}
</span><span class="cx" style="display: block; padding: 0 10px">       phpunit-config: ${{ matrix.multisite && 'tests/phpunit/multisite.xml' || 'phpunit.xml.dist' }}
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-      report: ${{ matrix.report || false }}
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+      report: ${{ false }}
</ins><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">   #
</span><span class="cx" style="display: block; padding: 0 10px">   # Runs specific individual test groups.
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -263,6 +263,6 @@
</span><span class="cx" style="display: block; padding: 0 10px">               workflow_id: 'failed-workflow.yml',
</span><span class="cx" style="display: block; padding: 0 10px">               ref: 'trunk',
</span><span class="cx" style="display: block; padding: 0 10px">               inputs: {
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                run_id: '${{ github.run_id }}'
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                run_id: context.runId,
</ins><span class="cx" style="display: block; padding: 0 10px">               }
</span><span class="cx" style="display: block; padding: 0 10px">             });
</span></span></pre></div>
<a id="trunkgithubworkflowspropsbotyml"></a>
<div class="modfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Modified: trunk/.github/workflows/props-bot.yml</h4>
<pre class="diff"><span>
<span class="info" style="display: block; padding: 0 10px; color: #888">--- trunk/.github/workflows/props-bot.yml     2025-01-22 14:04:34 UTC (rev 59678)
+++ trunk/.github/workflows/props-bot.yml       2025-01-22 15:13:21 UTC (rev 59679)
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -85,6 +85,8 @@
</span><span class="cx" style="display: block; padding: 0 10px">             github.rest.issues.removeLabel({
</span><span class="cx" style="display: block; padding: 0 10px">               owner: context.repo.owner,
</span><span class="cx" style="display: block; padding: 0 10px">               repo: context.repo.repo,
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-              issue_number: '${{ github.event.number }}',
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+              issue_number: process.env.ISSUE_NUMBER,
</ins><span class="cx" style="display: block; padding: 0 10px">               name: 'props-bot'
</span><span class="cx" style="display: block; padding: 0 10px">             });
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+        env:
+          ISSUE_NUMBER: ${{ github.event.number }}
</ins></span></pre></div>
<a id="trunkgithubworkflowspullrequestcommentsyml"></a>
<div class="modfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Modified: trunk/.github/workflows/pull-request-comments.yml</h4>
<pre class="diff"><span>
<span class="info" style="display: block; padding: 0 10px; color: #888">--- trunk/.github/workflows/pull-request-comments.yml 2025-01-22 14:04:34 UTC (rev 59678)
+++ trunk/.github/workflows/pull-request-comments.yml   2025-01-22 15:13:21 UTC (rev 59679)
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -96,7 +96,7 @@
</span><span class="cx" style="display: block; padding: 0 10px">             const artifacts = await github.rest.actions.listWorkflowRunArtifacts( {
</span><span class="cx" style="display: block; padding: 0 10px">                owner: context.repo.owner,
</span><span class="cx" style="display: block; padding: 0 10px">                repo: context.repo.repo,
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-               run_id: ${{ github.event.workflow_run.id }},
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+               run_id: process.env.RUN_ID,
</ins><span class="cx" style="display: block; padding: 0 10px">             } );
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">             const matchArtifact = artifacts.data.artifacts.filter( ( artifact ) => {
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -117,6 +117,8 @@
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">             const fs = require( 'fs' );
</span><span class="cx" style="display: block; padding: 0 10px">             fs.writeFileSync( '${{github.workspace}}/pr-number.zip', Buffer.from( download.data ) )
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+        env:
+          RUN_ID: ${{ github.event.workflow_run.id }}
</ins><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">       - name: Unzip the artifact containing the PR number
</span><span class="cx" style="display: block; padding: 0 10px">         run: unzip pr-number.zip
</span></span></pre></div>
<a id="trunkgithubworkflowsreusablecleanuppullrequestsyml"></a>
<div class="modfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Modified: trunk/.github/workflows/reusable-cleanup-pull-requests.yml</h4>
<pre class="diff"><span>
<span class="info" style="display: block; padding: 0 10px; color: #888">--- trunk/.github/workflows/reusable-cleanup-pull-requests.yml        2025-01-22 14:04:34 UTC (rev 59678)
+++ trunk/.github/workflows/reusable-cleanup-pull-requests.yml  2025-01-22 15:13:21 UTC (rev 59679)
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -29,21 +29,19 @@
</span><span class="cx" style="display: block; padding: 0 10px">     steps:
</span><span class="cx" style="display: block; padding: 0 10px">       - name: Find fixed ticket numbers
</span><span class="cx" style="display: block; padding: 0 10px">         id: trac-tickets
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+        env:
+          COMMIT_MSG_RAW: ${{ github.event.head_commit.message }}
</ins><span class="cx" style="display: block; padding: 0 10px">         run: |
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-          COMMIT_MESSAGE=$(cat <<'EOF' | sed -n '/^Fixes #/,/\./p'
-          ${{ github.event.head_commit.message }}
-          EOF
-          )
-          echo "fixed_list=$(echo \"$COMMIT_MESSAGE\" | sed -n 's/.*Fixes #\([0-9]\+\).*/\1/p' | tr '\n' ' ')" >> $GITHUB_OUTPUT
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+          COMMIT_MESSAGE="$(echo "$COMMIT_MSG_RAW" | sed -n '/^Fixes #/,/\./p')"
+          echo "fixed_list=$(echo "$COMMIT_MESSAGE" | sed -n 's/.*Fixes #\([0-9]\+\).*/\1/p' | tr '\n' ' ')" >> "$GITHUB_OUTPUT"
</ins><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">       - name: Get the SVN revision
</span><span class="cx" style="display: block; padding: 0 10px">         id: git-svn-id
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+        env:
+          COMMIT_MSG_RAW: ${{ github.event.head_commit.message }}
</ins><span class="cx" style="display: block; padding: 0 10px">         run: |
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-          COMMIT_MESSAGE=$(cat <<'EOF' | sed -n '$p'
-          ${{ github.event.head_commit.message }}
-          EOF
-          )
-          echo "svn_revision_number=$(echo \"$COMMIT_MESSAGE\" | sed -n 's/.*git-svn-id: https:\/\/develop.svn.wordpress.org\/[^@]*@\([0-9]*\) .*/\1/p')" >> $GITHUB_OUTPUT
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+          COMMIT_MESSAGE="$(echo "$COMMIT_MSG_RAW" | sed -n '$p')"
+          echo "svn_revision_number=$(echo "$COMMIT_MESSAGE" | sed -n 's/.*git-svn-id: https:\/\/develop.svn.wordpress.org\/[^@]*@\([0-9]*\) .*/\1/p')" >> "$GITHUB_OUTPUT"
</ins><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">       - name: Find pull requests
</span><span class="cx" style="display: block; padding: 0 10px">         id: linked-prs
</span></span></pre></div>
<a id="trunkgithubworkflowsreusablecodingstandardsjavascriptyml"></a>
<div class="modfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Modified: trunk/.github/workflows/reusable-coding-standards-javascript.yml</h4>
<pre class="diff"><span>
<span class="info" style="display: block; padding: 0 10px; color: #888">--- trunk/.github/workflows/reusable-coding-standards-javascript.yml  2025-01-22 14:04:34 UTC (rev 59678)
+++ trunk/.github/workflows/reusable-coding-standards-javascript.yml    2025-01-22 15:13:21 UTC (rev 59679)
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -9,6 +9,10 @@
</span><span class="cx" style="display: block; padding: 0 10px"> env:
</span><span class="cx" style="display: block; padding: 0 10px">   PUPPETEER_SKIP_DOWNLOAD: ${{ true }}
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+# Disable permissions for all available scopes by default.
+# Any needed permissions should be configured at the job level.
+permissions: {}
+
</ins><span class="cx" style="display: block; padding: 0 10px"> jobs:
</span><span class="cx" style="display: block; padding: 0 10px">   # Runs the JavaScript coding standards checks.
</span><span class="cx" style="display: block; padding: 0 10px">   #
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -33,6 +37,7 @@
</span><span class="cx" style="display: block; padding: 0 10px">         uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1
</span><span class="cx" style="display: block; padding: 0 10px">         with:
</span><span class="cx" style="display: block; padding: 0 10px">           show-progress: ${{ runner.debug == '1' && 'true' || 'false' }}
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+          persist-credentials: false
</ins><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">       - name: Set up Node.js
</span><span class="cx" style="display: block; padding: 0 10px">         uses: actions/setup-node@39370e3970a6d050c480ffad4ff0ed4d3fdee5af # v4.1.0
</span></span></pre></div>
<a id="trunkgithubworkflowsreusablecodingstandardsphpyml"></a>
<div class="modfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Modified: trunk/.github/workflows/reusable-coding-standards-php.yml</h4>
<pre class="diff"><span>
<span class="info" style="display: block; padding: 0 10px; color: #888">--- trunk/.github/workflows/reusable-coding-standards-php.yml 2025-01-22 14:04:34 UTC (rev 59678)
+++ trunk/.github/workflows/reusable-coding-standards-php.yml   2025-01-22 15:13:21 UTC (rev 59679)
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -17,6 +17,10 @@
</span><span class="cx" style="display: block; padding: 0 10px">         type: 'boolean'
</span><span class="cx" style="display: block; padding: 0 10px">         default: false
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+# Disable permissions for all available scopes by default.
+# Any needed permissions should be configured at the job level.
+permissions: {}
+
</ins><span class="cx" style="display: block; padding: 0 10px"> jobs:
</span><span class="cx" style="display: block; padding: 0 10px">   # Runs the PHP coding standards checks.
</span><span class="cx" style="display: block; padding: 0 10px">   #
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -45,6 +49,7 @@
</span><span class="cx" style="display: block; padding: 0 10px">         uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1
</span><span class="cx" style="display: block; padding: 0 10px">         with:
</span><span class="cx" style="display: block; padding: 0 10px">           show-progress: ${{ runner.debug == '1' && 'true' || 'false' }}
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+          persist-credentials: false
</ins><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">       - name: Set up PHP
</span><span class="cx" style="display: block; padding: 0 10px">         uses: shivammathur/setup-php@c541c155eee45413f5b09a52248675b1a2575231 # v2.31.1
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -57,7 +62,7 @@
</span><span class="cx" style="display: block; padding: 0 10px">       # http://man7.org/linux/man-pages/man1/date.1.html
</span><span class="cx" style="display: block; padding: 0 10px">       - name: "Get last Monday's date"
</span><span class="cx" style="display: block; padding: 0 10px">         id: get-date
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-        run: echo "date=$(/bin/date -u --date='last Mon' "+%F")" >> $GITHUB_OUTPUT
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+        run: echo "date=$(/bin/date -u --date='last Mon' "+%F")" >> "$GITHUB_OUTPUT"
</ins><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">       - name: Cache PHPCS scan cache
</span><span class="cx" style="display: block; padding: 0 10px">         uses: actions/cache@6849a6489940f00c2f30c0fb92c6274307ccb58a # v4.1.2
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -75,7 +80,7 @@
</span><span class="cx" style="display: block; padding: 0 10px">           custom-cache-suffix: ${{ steps.get-date.outputs.date }}
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">       - name: Make Composer packages available globally
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-        run: echo "${PWD}/vendor/bin" >> $GITHUB_PATH
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+        run: echo "${PWD}/vendor/bin" >> "$GITHUB_PATH"
</ins><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">       - name: Run PHPCS on all Core files
</span><span class="cx" style="display: block; padding: 0 10px">         id: phpcs-core
</span></span></pre></div>
<a id="trunkgithubworkflowsreusableendtoendtestsyml"></a>
<div class="modfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Modified: trunk/.github/workflows/reusable-end-to-end-tests.yml</h4>
<pre class="diff"><span>
<span class="info" style="display: block; padding: 0 10px; color: #888">--- trunk/.github/workflows/reusable-end-to-end-tests.yml     2025-01-22 14:04:34 UTC (rev 59678)
+++ trunk/.github/workflows/reusable-end-to-end-tests.yml       2025-01-22 15:13:21 UTC (rev 59679)
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -33,6 +33,10 @@
</span><span class="cx" style="display: block; padding: 0 10px">   LOCAL_DIR: build
</span><span class="cx" style="display: block; padding: 0 10px">   LOCAL_PHP: ${{ inputs.php-version }}${{ 'latest' != inputs.php-version && '-fpm' || '' }}
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+# Disable permissions for all available scopes by default.
+# Any needed permissions should be configured at the job level.
+permissions: {}
+
</ins><span class="cx" style="display: block; padding: 0 10px"> jobs:
</span><span class="cx" style="display: block; padding: 0 10px">   # Runs the end-to-end test suite.
</span><span class="cx" style="display: block; padding: 0 10px">   #
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -63,13 +67,14 @@
</span><span class="cx" style="display: block; padding: 0 10px">     steps:
</span><span class="cx" style="display: block; padding: 0 10px">       - name: Configure environment variables
</span><span class="cx" style="display: block; padding: 0 10px">         run: |
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-          echo "PHP_FPM_UID=$(id -u)" >> $GITHUB_ENV
-          echo "PHP_FPM_GID=$(id -g)" >> $GITHUB_ENV
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+          echo "PHP_FPM_UID=$(id -u)" >> "$GITHUB_ENV"
+          echo "PHP_FPM_GID=$(id -g)" >> "$GITHUB_ENV"
</ins><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">       - name: Checkout repository
</span><span class="cx" style="display: block; padding: 0 10px">         uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1
</span><span class="cx" style="display: block; padding: 0 10px">         with:
</span><span class="cx" style="display: block; padding: 0 10px">           show-progress: ${{ runner.debug == '1' && 'true' || 'false' }}
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+          persist-credentials: false
</ins><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">       - name: Set up Node.js
</span><span class="cx" style="display: block; padding: 0 10px">         uses: actions/setup-node@39370e3970a6d050c480ffad4ff0ed4d3fdee5af # v4.1.0
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -117,13 +122,18 @@
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">       - name: Install Gutenberg
</span><span class="cx" style="display: block; padding: 0 10px">         if: ${{ inputs.install-gutenberg }}
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-        run: npm run env:cli -- plugin install gutenberg${{ inputs.gutenberg-version && format( ' --version={0}', inputs.gutenberg-version ) || '' }} --path=/var/www/${{ env.LOCAL_DIR }}
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+        run: |
+          npm run env:cli -- plugin install gutenberg \
+          ${{ inputs.gutenberg-version && '--version="${GUTENBERG_VERSION}"' || '' }} \
+          --path="/var/www/${LOCAL_DIR}"
+        env:
+          GUTENBERG_VERSION: ${{ inputs.gutenberg-version }}
</ins><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">       - name: Install additional languages
</span><span class="cx" style="display: block; padding: 0 10px">         run: |
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-          npm run env:cli -- language core install de_DE --path=/var/www/${{ env.LOCAL_DIR }}
-          npm run env:cli -- language plugin install de_DE --all --path=/var/www/${{ env.LOCAL_DIR }}
-          npm run env:cli -- language theme install de_DE --all --path=/var/www/${{ env.LOCAL_DIR }}
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+          npm run env:cli -- language core install de_DE --path="/var/www/${LOCAL_DIR}"
+          npm run env:cli -- language plugin install de_DE --all --path="/var/www/${LOCAL_DIR}"
+          npm run env:cli -- language theme install de_DE --all --path="/var/www/${LOCAL_DIR}"
</ins><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">       - name: Run E2E tests
</span><span class="cx" style="display: block; padding: 0 10px">         run: npm run test:e2e
</span></span></pre></div>
<a id="trunkgithubworkflowsreusablejavascripttestsyml"></a>
<div class="modfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Modified: trunk/.github/workflows/reusable-javascript-tests.yml</h4>
<pre class="diff"><span>
<span class="info" style="display: block; padding: 0 10px; color: #888">--- trunk/.github/workflows/reusable-javascript-tests.yml     2025-01-22 14:04:34 UTC (rev 59678)
+++ trunk/.github/workflows/reusable-javascript-tests.yml       2025-01-22 15:13:21 UTC (rev 59679)
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -12,6 +12,10 @@
</span><span class="cx" style="display: block; padding: 0 10px">         type: 'boolean'
</span><span class="cx" style="display: block; padding: 0 10px">         default: false
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+# Disable permissions for all available scopes by default.
+# Any needed permissions should be configured at the job level.
+permissions: {}
+
</ins><span class="cx" style="display: block; padding: 0 10px"> jobs:
</span><span class="cx" style="display: block; padding: 0 10px">   # Runs the QUnit test suite.
</span><span class="cx" style="display: block; padding: 0 10px">   #
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -34,6 +38,7 @@
</span><span class="cx" style="display: block; padding: 0 10px">         uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1
</span><span class="cx" style="display: block; padding: 0 10px">         with:
</span><span class="cx" style="display: block; padding: 0 10px">           show-progress: ${{ runner.debug == '1' && 'true' || 'false' }}
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+          persist-credentials: false
</ins><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">       - name: Set up Node.js
</span><span class="cx" style="display: block; padding: 0 10px">         uses: actions/setup-node@39370e3970a6d050c480ffad4ff0ed4d3fdee5af # v4.1.0
</span></span></pre></div>
<a id="trunkgithubworkflowsreusableperformanceyml"></a>
<div class="modfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Modified: trunk/.github/workflows/reusable-performance.yml</h4>
<pre class="diff"><span>
<span class="info" style="display: block; padding: 0 10px; color: #888">--- trunk/.github/workflows/reusable-performance.yml  2025-01-22 14:04:34 UTC (rev 59678)
+++ trunk/.github/workflows/reusable-performance.yml    2025-01-22 15:13:21 UTC (rev 59679)
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -64,6 +64,10 @@
</span><span class="cx" style="display: block; padding: 0 10px">   LOCAL_PHP: ${{ inputs.php-version }}${{ 'latest' != inputs.php-version && '-fpm' || '' }}
</span><span class="cx" style="display: block; padding: 0 10px">   LOCAL_MULTISITE: ${{ inputs.multisite }}
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+# Disable permissions for all available scopes by default.
+# Any needed permissions should be configured at the job level.
+permissions: {}
+
</ins><span class="cx" style="display: block; padding: 0 10px"> jobs:
</span><span class="cx" style="display: block; padding: 0 10px">   # Performs the following steps:
</span><span class="cx" style="display: block; padding: 0 10px">   # - Configure environment variables.
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -119,8 +123,8 @@
</span><span class="cx" style="display: block; padding: 0 10px">     steps:
</span><span class="cx" style="display: block; padding: 0 10px">       - name: Configure environment variables
</span><span class="cx" style="display: block; padding: 0 10px">         run: |
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-          echo "PHP_FPM_UID=$(id -u)" >> $GITHUB_ENV
-          echo "PHP_FPM_GID=$(id -g)" >> $GITHUB_ENV
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+          echo "PHP_FPM_UID=$(id -u)" >> "$GITHUB_ENV"
+          echo "PHP_FPM_GID=$(id -g)" >> "$GITHUB_ENV"
</ins><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">       - name: Checkout repository
</span><span class="cx" style="display: block; padding: 0 10px">         uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -127,11 +131,12 @@
</span><span class="cx" style="display: block; padding: 0 10px">         with:
</span><span class="cx" style="display: block; padding: 0 10px">           show-progress: ${{ runner.debug == '1' && 'true' || 'false' }}
</span><span class="cx" style="display: block; padding: 0 10px">           fetch-depth: ${{ github.event_name == 'workflow_dispatch' && '2' || '1' }}
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+          persist-credentials: false
</ins><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">       # The `workflow_dispatch` event is the only one missing the needed SHA to target.
</span><span class="cx" style="display: block; padding: 0 10px">       - name: Retrieve previous commit SHA (if necessary)
</span><span class="cx" style="display: block; padding: 0 10px">         if: ${{ github.event_name == 'workflow_dispatch' }}
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-        run: echo "TARGET_SHA=$(git rev-parse HEAD^1)" >> $GITHUB_ENV
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+        run: echo "TARGET_SHA=$(git rev-parse HEAD^1)" >> "$GITHUB_ENV"
</ins><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">       - name: Set up Node.js
</span><span class="cx" style="display: block; padding: 0 10px">         uses: actions/setup-node@39370e3970a6d050c480ffad4ff0ed4d3fdee5af # v4.1.0
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -181,47 +186,47 @@
</span><span class="cx" style="display: block; padding: 0 10px">       - name: Enable themes on Multisite
</span><span class="cx" style="display: block; padding: 0 10px">         if: ${{ inputs.multisite }}
</span><span class="cx" style="display: block; padding: 0 10px">         run: |
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-          npm run env:cli -- theme enable twentytwentyone --network --path=/var/www/${{ env.LOCAL_DIR }}
-          npm run env:cli -- theme enable twentytwentythree --network --path=/var/www/${{ env.LOCAL_DIR }}
-          npm run env:cli -- theme enable twentytwentyfour --network --path=/var/www/${{ env.LOCAL_DIR }}
-          npm run env:cli -- theme enable twentytwentyfive --network --path=/var/www/${{ env.LOCAL_DIR }}
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+          npm run env:cli -- theme enable twentytwentyone --network --path="/var/www/${LOCAL_DIR}"
+          npm run env:cli -- theme enable twentytwentythree --network --path="/var/www/${LOCAL_DIR}"
+          npm run env:cli -- theme enable twentytwentyfour --network --path="/var/www/${LOCAL_DIR}"
+          npm run env:cli -- theme enable twentytwentyfive --network --path="/var/www/${LOCAL_DIR}"
</ins><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">       - name: Install WordPress Importer plugin
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-        run: npm run env:cli -- plugin install wordpress-importer --activate --path=/var/www/${{ env.LOCAL_DIR }}
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+        run: npm run env:cli -- plugin install wordpress-importer --activate --path="/var/www/${LOCAL_DIR}"
</ins><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">       - name: Import mock data
</span><span class="cx" style="display: block; padding: 0 10px">         run: |
</span><span class="cx" style="display: block; padding: 0 10px">           curl -O https://raw.githubusercontent.com/WordPress/theme-test-data/b9752e0533a5acbb876951a8cbb5bcc69a56474c/themeunittestdata.wordpress.xml
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-          npm run env:cli -- import themeunittestdata.wordpress.xml --authors=create --path=/var/www/${{ env.LOCAL_DIR }}
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+          npm run env:cli -- import themeunittestdata.wordpress.xml --authors=create --path="/var/www/${LOCAL_DIR}"
</ins><span class="cx" style="display: block; padding: 0 10px">           rm themeunittestdata.wordpress.xml
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">       - name: Deactivate WordPress Importer plugin
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-        run: npm run env:cli -- plugin deactivate wordpress-importer --path=/var/www/${{ env.LOCAL_DIR }}
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+        run: npm run env:cli -- plugin deactivate wordpress-importer --path="/var/www/${LOCAL_DIR}"
</ins><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">       - name: Update permalink structure
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-        run: npm run env:cli -- rewrite structure '/%year%/%monthnum%/%postname%/' --path=/var/www/${{ env.LOCAL_DIR }}
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+        run: npm run env:cli -- rewrite structure '/%year%/%monthnum%/%postname%/' --path="/var/www/${LOCAL_DIR}"
</ins><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">       - name: Install additional languages
</span><span class="cx" style="display: block; padding: 0 10px">         run: |
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-          npm run env:cli -- language core install de_DE --path=/var/www/${{ env.LOCAL_DIR }}
-          npm run env:cli -- language plugin install de_DE --all --path=/var/www/${{ env.LOCAL_DIR }}
-          npm run env:cli -- language theme install de_DE --all --path=/var/www/${{ env.LOCAL_DIR }}
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+          npm run env:cli -- language core install de_DE --path="/var/www/${LOCAL_DIR}"
+          npm run env:cli -- language plugin install de_DE --all --path="/var/www/${LOCAL_DIR}"
+          npm run env:cli -- language theme install de_DE --all --path="/var/www/${LOCAL_DIR}"
</ins><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">       # Prevent background update checks from impacting test stability.
</span><span class="cx" style="display: block; padding: 0 10px">       - name: Disable external HTTP requests
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-        run: npm run env:cli -- config set WP_HTTP_BLOCK_EXTERNAL true --raw --type=constant --path=/var/www/${{ env.LOCAL_DIR }}
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+        run: npm run env:cli -- config set WP_HTTP_BLOCK_EXTERNAL true --raw --type=constant --path="/var/www/${LOCAL_DIR}"
</ins><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">       # Prevent background tasks from impacting test stability.
</span><span class="cx" style="display: block; padding: 0 10px">       - name: Disable cron
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-        run: npm run env:cli -- config set DISABLE_WP_CRON true --raw --type=constant --path=/var/www/${{ env.LOCAL_DIR }}
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+        run: npm run env:cli -- config set DISABLE_WP_CRON true --raw --type=constant --path="/var/www/${LOCAL_DIR}"
</ins><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">       - name: List defined constants
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-        run: npm run env:cli -- config list --path=/var/www/${{ env.LOCAL_DIR }}
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+        run: npm run env:cli -- config list --path="/var/www/${LOCAL_DIR}"
</ins><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">       - name: Install MU plugin
</span><span class="cx" style="display: block; padding: 0 10px">         run: |
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-          mkdir ./${{ env.LOCAL_DIR }}/wp-content/mu-plugins
-          cp ./tests/performance/wp-content/mu-plugins/server-timing.php ./${{ env.LOCAL_DIR }}/wp-content/mu-plugins/server-timing.php
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+          mkdir "./${LOCAL_DIR}/wp-content/mu-plugins"
+          cp ./tests/performance/wp-content/mu-plugins/server-timing.php "./${LOCAL_DIR}/wp-content/mu-plugins/server-timing.php"
</ins><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">       - name: Run performance tests (current commit)
</span><span class="cx" style="display: block; padding: 0 10px">         run: npm run test:performance
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -252,7 +257,7 @@
</span><span class="cx" style="display: block; padding: 0 10px">             } );
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">             const fs = require( 'fs' );
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-            fs.writeFileSync( '${{ github.workspace }}/before.zip', Buffer.from( download.data ) )
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+            fs.writeFileSync( process.env.GITHUB_WORKSPACE + '/before.zip', Buffer.from( download.data ) )
</ins><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">             return true;
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -259,20 +264,20 @@
</span><span class="cx" style="display: block; padding: 0 10px">       - name: Unzip the build
</span><span class="cx" style="display: block; padding: 0 10px">         if: ${{ steps.get-previous-build.outputs.result }}
</span><span class="cx" style="display: block; padding: 0 10px">         run: |
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-          unzip ${{ github.workspace }}/before.zip
-          unzip -o ${{ github.workspace }}/wordpress.zip
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+          unzip "${GITHUB_WORKSPACE}/before.zip"
+          unzip -o "${GITHUB_WORKSPACE}/wordpress.zip"
</ins><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">       - name: Run any database upgrades
</span><span class="cx" style="display: block; padding: 0 10px">         if: ${{ steps.get-previous-build.outputs.result }}
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-        run: npm run env:cli -- core update-db --path=/var/www/${{ env.LOCAL_DIR }}
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+        run: npm run env:cli -- core update-db --path="/var/www/${LOCAL_DIR}"
</ins><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">       - name: Flush cache
</span><span class="cx" style="display: block; padding: 0 10px">         if: ${{ steps.get-previous-build.outputs.result }}
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-        run: npm run env:cli -- cache flush --path=/var/www/${{ env.LOCAL_DIR }}
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+        run: npm run env:cli -- cache flush --path="/var/www/${LOCAL_DIR}"
</ins><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">       - name: Delete expired transients
</span><span class="cx" style="display: block; padding: 0 10px">         if: ${{ steps.get-previous-build.outputs.result }}
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-        run: npm run env:cli -- transient delete --expired --path=/var/www/${{ env.LOCAL_DIR }}
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+        run: npm run env:cli -- transient delete --expired --path="/var/www/${LOCAL_DIR}"
</ins><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">       - name: Run target performance tests (previous/target commit)
</span><span class="cx" style="display: block; padding: 0 10px">         if: ${{ steps.get-previous-build.outputs.result }}
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -283,22 +288,22 @@
</span><span class="cx" style="display: block; padding: 0 10px">       - name: Set the environment to the baseline version
</span><span class="cx" style="display: block; padding: 0 10px">         if: ${{ github.event_name == 'push' && github.ref == 'refs/heads/trunk' }}
</span><span class="cx" style="display: block; padding: 0 10px">         run: |
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-          VERSION="${{ env.BASE_TAG }}"
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+          VERSION="${BASE_TAG}"
</ins><span class="cx" style="display: block; padding: 0 10px">           VERSION="${VERSION%.0}"
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-          npm run env:cli -- core update --version=$VERSION --force --path=/var/www/${{ env.LOCAL_DIR }}
-          npm run env:cli -- core version --path=/var/www/${{ env.LOCAL_DIR }}
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+          npm run env:cli -- core update --version="$VERSION" --force --path="/var/www/${LOCAL_DIR}"
+          npm run env:cli -- core version --path="/var/www/${LOCAL_DIR}"
</ins><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">       - name: Run any database upgrades
</span><span class="cx" style="display: block; padding: 0 10px">         if: ${{ github.event_name == 'push' && github.ref == 'refs/heads/trunk' }}
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-        run: npm run env:cli -- core update-db --path=/var/www/${{ env.LOCAL_DIR }}
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+        run: npm run env:cli -- core update-db --path="/var/www/${LOCAL_DIR}"
</ins><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">       - name: Flush cache
</span><span class="cx" style="display: block; padding: 0 10px">         if: ${{ github.event_name == 'push' && github.ref == 'refs/heads/trunk' }}
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-        run: npm run env:cli -- cache flush --path=/var/www/${{ env.LOCAL_DIR }}
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+        run: npm run env:cli -- cache flush --path="/var/www/${LOCAL_DIR}"
</ins><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">       - name: Delete expired transients
</span><span class="cx" style="display: block; padding: 0 10px">         if: ${{ github.event_name == 'push' && github.ref == 'refs/heads/trunk' }}
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-        run: npm run env:cli -- transient delete --expired --path=/var/www/${{ env.LOCAL_DIR }}
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+        run: npm run env:cli -- transient delete --expired --path="/var/www/${LOCAL_DIR}"
</ins><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">       - name: Run baseline performance tests
</span><span class="cx" style="display: block; padding: 0 10px">         if: ${{ github.event_name == 'push' && github.ref == 'refs/heads/trunk' }}
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -316,10 +321,10 @@
</span><span class="cx" style="display: block; padding: 0 10px">           include-hidden-files: true
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">       - name: Compare results
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-        run: node ./tests/performance/compare-results.js ${{ runner.temp }}/summary.md
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+        run: node ./tests/performance/compare-results.js "${RUNNER_TEMP}/summary.md"
</ins><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">       - name: Add workflow summary
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-        run: cat ${{ runner.temp }}/summary.md >> $GITHUB_STEP_SUMMARY
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+        run: cat "${RUNNER_TEMP}/summary.md" >> "$GITHUB_STEP_SUMMARY"
</ins><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">       - name: Set the base sha
</span><span class="cx" style="display: block; padding: 0 10px">         # Only needed when publishing results.
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -329,15 +334,13 @@
</span><span class="cx" style="display: block; padding: 0 10px">         with:
</span><span class="cx" style="display: block; padding: 0 10px">           github-token: ${{ secrets.GITHUB_TOKEN }}
</span><span class="cx" style="display: block; padding: 0 10px">           script: |
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-            const baseRef = await github.rest.git.getRef({ owner: context.repo.owner, repo: context.repo.repo, ref: 'tags/${{ env.BASE_TAG }}' });
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+            const baseRef = await github.rest.git.getRef({
+              owner: context.repo.owner,
+              repo: context.repo.repo,
+              ref: 'tags/' + process.env.BASE_TAG,
+            });
</ins><span class="cx" style="display: block; padding: 0 10px">             return baseRef.data.object.sha;
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-      - name: Set commit details
-        # Only needed when publishing results.
-        if: ${{ github.event_name == 'push' && github.ref == 'refs/heads/trunk' && ! inputs.memcached && ! inputs.multisite }}
-        # Write to an environment variable to have the output available in later steps of the job.
-        run: echo "COMMITTED_AT=$(git show -s $GITHUB_SHA --format='%cI')" >> $GITHUB_ENV
-
</del><span class="cx" style="display: block; padding: 0 10px">       - name: Publish performance results
</span><span class="cx" style="display: block; padding: 0 10px">         # Only publish results on pushes to trunk.
</span><span class="cx" style="display: block; padding: 0 10px">         if: ${{ github.event_name == 'push' && github.ref == 'refs/heads/trunk' && ! inputs.memcached && ! inputs.multisite }}
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -347,10 +350,11 @@
</span><span class="cx" style="display: block; padding: 0 10px">           HOST_NAME: "www.codevitals.run"
</span><span class="cx" style="display: block; padding: 0 10px">         run: |
</span><span class="cx" style="display: block; padding: 0 10px">           if [ -z "$CODEVITALS_PROJECT_TOKEN" ]; then
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-            echo "Performance results could not be published. 'CODEVITALS_PROJECT_TOKEN' is not set" >> $GITHUB_OUTPUT
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+            echo "Performance results could not be published. 'CODEVITALS_PROJECT_TOKEN' is not set"
</ins><span class="cx" style="display: block; padding: 0 10px">             exit 1
</span><span class="cx" style="display: block; padding: 0 10px">           fi
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-          node ./tests/performance/log-results.js $CODEVITALS_PROJECT_TOKEN trunk $GITHUB_SHA $BASE_SHA $COMMITTED_AT $HOST_NAME
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+          COMMITTED_AT="$(git show -s "$GITHUB_SHA" --format='%cI')"
+          node ./tests/performance/log-results.js "$CODEVITALS_PROJECT_TOKEN" trunk "$GITHUB_SHA" "$BASE_SHA" "$COMMITTED_AT" "$HOST_NAME"
</ins><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">       - name: Ensure version-controlled files are not modified or deleted
</span><span class="cx" style="display: block; padding: 0 10px">         run: git diff --exit-code
</span></span></pre></div>
<a id="trunkgithubworkflowsreusablephpcompatibilityyml"></a>
<div class="modfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Modified: trunk/.github/workflows/reusable-php-compatibility.yml</h4>
<pre class="diff"><span>
<span class="info" style="display: block; padding: 0 10px; color: #888">--- trunk/.github/workflows/reusable-php-compatibility.yml    2025-01-22 14:04:34 UTC (rev 59678)
+++ trunk/.github/workflows/reusable-php-compatibility.yml      2025-01-22 15:13:21 UTC (rev 59679)
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -12,6 +12,10 @@
</span><span class="cx" style="display: block; padding: 0 10px">         type: 'string'
</span><span class="cx" style="display: block; padding: 0 10px">         default: 'latest'
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+# Disable permissions for all available scopes by default.
+# Any needed permissions should be configured at the job level.
+permissions: {}
+
</ins><span class="cx" style="display: block; padding: 0 10px"> jobs:
</span><span class="cx" style="display: block; padding: 0 10px">   # Runs PHP compatibility tests.
</span><span class="cx" style="display: block; padding: 0 10px">   #
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -39,6 +43,7 @@
</span><span class="cx" style="display: block; padding: 0 10px">         uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1
</span><span class="cx" style="display: block; padding: 0 10px">         with:
</span><span class="cx" style="display: block; padding: 0 10px">           show-progress: ${{ runner.debug == '1' && 'true' || 'false' }}
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+          persist-credentials: false
</ins><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">       - name: Set up PHP
</span><span class="cx" style="display: block; padding: 0 10px">         uses: shivammathur/setup-php@c541c155eee45413f5b09a52248675b1a2575231 # v2.31.1
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -55,7 +60,7 @@
</span><span class="cx" style="display: block; padding: 0 10px">       # http://man7.org/linux/man-pages/man1/date.1.html
</span><span class="cx" style="display: block; padding: 0 10px">       - name: "Get last Monday's date"
</span><span class="cx" style="display: block; padding: 0 10px">         id: get-date
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-        run: echo "date=$(/bin/date -u --date='last Mon' "+%F")" >> $GITHUB_OUTPUT
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+        run: echo "date=$(/bin/date -u --date='last Mon' "+%F")" >> "$GITHUB_OUTPUT"
</ins><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">       - name: Cache PHP compatibility scan cache
</span><span class="cx" style="display: block; padding: 0 10px">         uses: actions/cache@6849a6489940f00c2f30c0fb92c6274307ccb58a # v4.1.2
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -71,7 +76,7 @@
</span><span class="cx" style="display: block; padding: 0 10px">           custom-cache-suffix: ${{ steps.get-date.outputs.date }}
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">       - name: Make Composer packages available globally
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-        run: echo "${PWD}/vendor/bin" >> $GITHUB_PATH
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+        run: echo "${PWD}/vendor/bin" >> "$GITHUB_PATH"
</ins><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">       - name: Run PHP compatibility tests
</span><span class="cx" style="display: block; padding: 0 10px">         id: phpcs
</span></span></pre></div>
<a id="trunkgithubworkflowsreusablephpunittestsv1yml"></a>
<div class="modfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Modified: trunk/.github/workflows/reusable-phpunit-tests-v1.yml</h4>
<pre class="diff"><span>
<span class="info" style="display: block; padding: 0 10px; color: #888">--- trunk/.github/workflows/reusable-phpunit-tests-v1.yml     2025-01-22 14:04:34 UTC (rev 59678)
+++ trunk/.github/workflows/reusable-phpunit-tests-v1.yml       2025-01-22 15:13:21 UTC (rev 59679)
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -50,6 +50,7 @@
</span><span class="cx" style="display: block; padding: 0 10px">         type: boolean
</span><span class="cx" style="display: block; padding: 0 10px">         default: false
</span><span class="cx" style="display: block; padding: 0 10px"> env:
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+  COMPOSER_INSTALL: ${{ false }}
</ins><span class="cx" style="display: block; padding: 0 10px">   LOCAL_PHP: ${{ inputs.php }}-fpm
</span><span class="cx" style="display: block; padding: 0 10px">   LOCAL_PHPUNIT: ${{ inputs.phpunit && inputs.phpunit || inputs.php }}-fpm
</span><span class="cx" style="display: block; padding: 0 10px">   LOCAL_PHP_MEMCACHED: ${{ inputs.memcached }}
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -58,6 +59,10 @@
</span><span class="cx" style="display: block; padding: 0 10px">   PUPPETEER_SKIP_DOWNLOAD: ${{ true }}
</span><span class="cx" style="display: block; padding: 0 10px">   SLOW_TESTS: 'external-http,media'
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+# Disable permissions for all available scopes by default.
+# Any needed permissions should be configured at the job level.
+permissions: {}
+
</ins><span class="cx" style="display: block; padding: 0 10px"> jobs:
</span><span class="cx" style="display: block; padding: 0 10px">   # Runs the PHPUnit tests for WordPress.
</span><span class="cx" style="display: block; padding: 0 10px">   #
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -86,13 +91,14 @@
</span><span class="cx" style="display: block; padding: 0 10px">     steps:
</span><span class="cx" style="display: block; padding: 0 10px">       - name: Configure environment variables
</span><span class="cx" style="display: block; padding: 0 10px">         run: |
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-          echo "PHP_FPM_UID=$(id -u)" >> $GITHUB_ENV
-          echo "PHP_FPM_GID=$(id -g)" >> $GITHUB_ENV
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+          echo "PHP_FPM_UID=$(id -u)" >> "$GITHUB_ENV"
+          echo "PHP_FPM_GID=$(id -g)" >> "$GITHUB_ENV"
</ins><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">       - name: Checkout repository
</span><span class="cx" style="display: block; padding: 0 10px">         uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7
</span><span class="cx" style="display: block; padding: 0 10px">         with:
</span><span class="cx" style="display: block; padding: 0 10px">           show-progress: ${{ runner.debug == '1' && 'true' || 'false' }}
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+          persist-credentials: false
</ins><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">       - name: Set up Node.js
</span><span class="cx" style="display: block; padding: 0 10px">         uses: actions/setup-node@39370e3970a6d050c480ffad4ff0ed4d3fdee5af # v4.1.0
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -106,6 +112,11 @@
</span><span class="cx" style="display: block; padding: 0 10px">       - name: Build WordPress
</span><span class="cx" style="display: block; padding: 0 10px">         run: npm run build
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+      - name: Get composer cache directory
+        if: ${{ env.COMPOSER_INSTALL == true }}
+        id: composer-cache
+        run: echo "composer_dir=$(composer config cache-files-dir)" >> "$GITHUB_OUTPUT"
+
</ins><span class="cx" style="display: block; padding: 0 10px">       - name: Cache Composer dependencies
</span><span class="cx" style="display: block; padding: 0 10px">         if: ${{ env.COMPOSER_INSTALL == true }}
</span><span class="cx" style="display: block; padding: 0 10px">         uses: actions/cache@6849a6489940f00c2f30c0fb92c6274307ccb58a # v4.1.2
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -135,7 +146,8 @@
</span><span class="cx" style="display: block; padding: 0 10px">         if: ${{ inputs.memcached }}
</span><span class="cx" style="display: block; padding: 0 10px">         run: |
</span><span class="cx" style="display: block; padding: 0 10px">           cp tests/phpunit/includes/object-cache.php build/wp-content/object-cache.php
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-          docker run --name memcached --net $(basename "$PWD")_wpdevnet -d memcached
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+          BASE=$(basename "$PWD")
+          docker run --name memcached --net "${BASE}_wpdevnet" -d memcached
</ins><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">       - name: General debug information
</span><span class="cx" style="display: block; padding: 0 10px">         run: |
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -160,24 +172,24 @@
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">       - name: Run slow PHPUnit tests
</span><span class="cx" style="display: block; padding: 0 10px">         if: ${{ inputs.split_slow }}
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-        run: npm run test:${{ env.PHPUNIT_SCRIPT }} -- --verbose -c ${{ env.PHPUNIT_CONFIG }} --group ${{ env.SLOW_TESTS }}
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+        run: npm run "test:${PHPUNIT_SCRIPT}" -- --verbose -c "${PHPUNIT_CONFIG}" --group "${SLOW_TESTS}"
</ins><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">       - name: Run PHPUnit tests for single site excluding slow tests
</span><span class="cx" style="display: block; padding: 0 10px">         if: ${{ inputs.php < '7.0' && ! inputs.split_slow && ! inputs.multisite }}
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-        run: npm run test:${{ env.PHPUNIT_SCRIPT }} -- --verbose -c ${{ env.PHPUNIT_CONFIG }} --exclude-group ${{ env.SLOW_TESTS }},ajax,ms-files,ms-required
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+        run: npm run "test:${PHPUNIT_SCRIPT}" -- --verbose -c "${PHPUNIT_CONFIG}" --exclude-group "${SLOW_TESTS},ajax,ms-files,ms-required"
</ins><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">       - name: Run PHPUnit tests for Multisite excluding slow tests
</span><span class="cx" style="display: block; padding: 0 10px">         if: ${{ inputs.php < '7.0' && ! inputs.split_slow && inputs.multisite }}
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-        run: npm run test:${{ env.PHPUNIT_SCRIPT }} -- --verbose -c ${{ env.PHPUNIT_CONFIG }} --exclude-group ${{ env.SLOW_TESTS }},ajax,ms-files,ms-excluded,oembed-headers
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+        run: npm run "test:${PHPUNIT_SCRIPT}" -- --verbose -c "${PHPUNIT_CONFIG}" --exclude-group "${SLOW_TESTS},ajax,ms-files,ms-excluded,oembed-headers"
</ins><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">       - name: Run PHPUnit tests
</span><span class="cx" style="display: block; padding: 0 10px">         if: ${{ inputs.php >= '7.0' }}
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-        run: npm run test:${{ env.PHPUNIT_SCRIPT }} -- --verbose -c ${{ env.PHPUNIT_CONFIG }}
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+        run: npm run "test:${PHPUNIT_SCRIPT}" -- --verbose -c "${PHPUNIT_CONFIG}"
</ins><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">       - name: Run AJAX tests
</span><span class="cx" style="display: block; padding: 0 10px">         if: ${{ ! inputs.multisite && ! inputs.split_slow }}
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-        run: npm run test:${{ env.PHPUNIT_SCRIPT }} -- --verbose -c ${{ env.PHPUNIT_CONFIG }} --group ajax
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+        run: npm run "test:${PHPUNIT_SCRIPT}" -- --verbose -c "${PHPUNIT_CONFIG}" --group ajax
</ins><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">       - name: Run external HTTP tests
</span><span class="cx" style="display: block; padding: 0 10px">         if: ${{ ! inputs.multisite && ! inputs.split_slow }}
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-        run: npm run test:${{ env.PHPUNIT_SCRIPT }} -- --verbose -c phpunit.xml.dist --group external-http
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+        run: npm run "test:${PHPUNIT_SCRIPT}" -- --verbose -c phpunit.xml.dist --group external-http
</ins></span></pre></div>
<a id="trunkgithubworkflowsreusablephpunittestsv2yml"></a>
<div class="modfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Modified: trunk/.github/workflows/reusable-phpunit-tests-v2.yml</h4>
<pre class="diff"><span>
<span class="info" style="display: block; padding: 0 10px; color: #888">--- trunk/.github/workflows/reusable-phpunit-tests-v2.yml     2025-01-22 14:04:34 UTC (rev 59678)
+++ trunk/.github/workflows/reusable-phpunit-tests-v2.yml       2025-01-22 15:13:21 UTC (rev 59679)
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -63,6 +63,10 @@
</span><span class="cx" style="display: block; padding: 0 10px">   PHPUNIT_SCRIPT: php
</span><span class="cx" style="display: block; padding: 0 10px">   SLOW_TESTS: 'external-http,media'
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+# Disable permissions for all available scopes by default.
+# Any needed permissions should be configured at the job level.
+permissions: {}
+
</ins><span class="cx" style="display: block; padding: 0 10px"> jobs:
</span><span class="cx" style="display: block; padding: 0 10px">   # Runs the PHPUnit tests for WordPress.
</span><span class="cx" style="display: block; padding: 0 10px">   #
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -89,13 +93,14 @@
</span><span class="cx" style="display: block; padding: 0 10px">     steps:
</span><span class="cx" style="display: block; padding: 0 10px">       - name: Configure environment variables
</span><span class="cx" style="display: block; padding: 0 10px">         run: |
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-          echo "PHP_FPM_UID=$(id -u)" >> $GITHUB_ENV
-          echo "PHP_FPM_GID=$(id -g)" >> $GITHUB_ENV
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+          echo "PHP_FPM_UID=$(id -u)" >> "$GITHUB_ENV"
+          echo "PHP_FPM_GID=$(id -g)" >> "$GITHUB_ENV"
</ins><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">       - name: Checkout repository
</span><span class="cx" style="display: block; padding: 0 10px">         uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7
</span><span class="cx" style="display: block; padding: 0 10px">         with:
</span><span class="cx" style="display: block; padding: 0 10px">           show-progress: ${{ runner.debug == '1' && 'true' || 'false' }}
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+          persist-credentials: false
</ins><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">       - name: Install Node.js
</span><span class="cx" style="display: block; padding: 0 10px">         uses: actions/setup-node@39370e3970a6d050c480ffad4ff0ed4d3fdee5af # v4.1.0
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -108,7 +113,7 @@
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">       - name: Get composer cache directory
</span><span class="cx" style="display: block; padding: 0 10px">         id: composer-cache
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-        run: echo "composer_dir=$(composer config cache-files-dir)" >> $GITHUB_OUTPUT
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+        run: echo "composer_dir=$(composer config cache-files-dir)" >> "$GITHUB_OUTPUT"
</ins><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">       - name: Cache Composer dependencies
</span><span class="cx" style="display: block; padding: 0 10px">         uses: actions/cache@6849a6489940f00c2f30c0fb92c6274307ccb58a # v4.1.2
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -125,13 +130,13 @@
</span><span class="cx" style="display: block; padding: 0 10px">           # The PHPUnit 7.x phar is not compatible with PHP 8 and won't be updated,
</span><span class="cx" style="display: block; padding: 0 10px">           # as PHPUnit 7 is no longer supported. The Composer-installed PHPUnit should be
</span><span class="cx" style="display: block; padding: 0 10px">           # used for PHP 8 testing instead.
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-          if [ ${{ env.LOCAL_PHP }} == '8.0-fpm' ]; then
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+          if [ "${LOCAL_PHP}" == '8.0-fpm' ]; then
</ins><span class="cx" style="display: block; padding: 0 10px">             docker compose run --rm php composer install --ignore-platform-reqs
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-            echo "PHPUNIT_SCRIPT=php-composer" >> $GITHUB_ENV
-          elif [ ${{ env.LOCAL_PHP }} == '7.1-fpm' ]; then
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+            echo "PHPUNIT_SCRIPT=php-composer" >> "$GITHUB_ENV"
+          elif [ "${LOCAL_PHP}" == '7.1-fpm' ]; then
</ins><span class="cx" style="display: block; padding: 0 10px">             docker compose run --rm php composer update
</span><span class="cx" style="display: block; padding: 0 10px">             git checkout -- composer.lock
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-          elif [[ ${{ env.LOCAL_PHP }} == '5.6-fpm' || ${{ env.LOCAL_PHP }} == '7.0-fpm' ]]; then
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+          elif [[ "${LOCAL_PHP}" == '5.6-fpm' || "${LOCAL_PHP}" == '7.0-fpm' ]]; then
</ins><span class="cx" style="display: block; padding: 0 10px">             docker compose run --rm php composer require --dev phpunit/phpunit:"^5.7" --update-with-dependencies
</span><span class="cx" style="display: block; padding: 0 10px">             git checkout -- composer.lock composer.json
</span><span class="cx" style="display: block; padding: 0 10px">           else
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -170,36 +175,36 @@
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">       - name: Run slow PHPUnit tests
</span><span class="cx" style="display: block; padding: 0 10px">         if: ${{ inputs.split_slow }}
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-        run: npm run test:${{ env.PHPUNIT_SCRIPT }} -- --verbose -c ${{ env.PHPUNIT_CONFIG }} --group ${{ env.SLOW_TESTS }}
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+        run: npm run "test:${PHPUNIT_SCRIPT}" -- --verbose -c "${PHPUNIT_CONFIG}" --group "${SLOW_TESTS}"
</ins><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">       - name: Run PHPUnit tests for single site excluding slow tests
</span><span class="cx" style="display: block; padding: 0 10px">         if: ${{ inputs.php < '7.0' && ! inputs.split_slow && ! inputs.multisite }}
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-        run: npm run test:${{ env.PHPUNIT_SCRIPT }} -- --verbose -c ${{ env.PHPUNIT_CONFIG }} --exclude-group ${{ env.SLOW_TESTS }},ajax,ms-files,ms-required
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+        run: npm run "test:${PHPUNIT_SCRIPT}" -- --verbose -c "${PHPUNIT_CONFIG}" --exclude-group "${SLOW_TESTS},ajax,ms-files,ms-required"
</ins><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">       - name: Run PHPUnit tests for Multisite excluding slow tests
</span><span class="cx" style="display: block; padding: 0 10px">         if: ${{ inputs.php < '7.0' && ! inputs.split_slow && inputs.multisite }}
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-        run: npm run test:${{ env.PHPUNIT_SCRIPT }} -- --verbose -c ${{ env.PHPUNIT_CONFIG }} --exclude-group ${{ env.SLOW_TESTS }},ajax,ms-files,ms-excluded,oembed-headers
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+        run: npm run "test:${PHPUNIT_SCRIPT}" -- --verbose -c "${PHPUNIT_CONFIG}" --exclude-group "${SLOW_TESTS},ajax,ms-files,ms-excluded,oembed-headers"
</ins><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">       - name: Run PHPUnit tests
</span><span class="cx" style="display: block; padding: 0 10px">         if: ${{ inputs.php >= '7.0' }}
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-        run: npm run test:${{ env.PHPUNIT_SCRIPT }} -- --verbose -c ${{ env.PHPUNIT_CONFIG }}
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+        run: npm run "test:${PHPUNIT_SCRIPT}" -- --verbose -c "${PHPUNIT_CONFIG}"
</ins><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">       - name: Run AJAX tests
</span><span class="cx" style="display: block; padding: 0 10px">         if: ${{ ! inputs.split_slow&& inputs.test_ajax }}
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-        run: npm run test:${{ env.PHPUNIT_SCRIPT }} -- --verbose -c ${{ env.PHPUNIT_CONFIG }} --group ajax
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+        run: npm run "test:${PHPUNIT_SCRIPT}" -- --verbose -c "${PHPUNIT_CONFIG}" --group ajax
</ins><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">       - name: Run ms-files tests as a multisite install
</span><span class="cx" style="display: block; padding: 0 10px">         if: ${{ inputs.multisite && ! inputs.split_slow }}
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-        run: npm run test:${{ env.PHPUNIT_SCRIPT }} -- --verbose -c ${{ env.PHPUNIT_CONFIG }} --group ms-files
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+        run: npm run "test:${PHPUNIT_SCRIPT}" -- --verbose -c "${PHPUNIT_CONFIG}" --group ms-files
</ins><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">       - name: Run external HTTP tests
</span><span class="cx" style="display: block; padding: 0 10px">         if: ${{ ! inputs.multisite && ! inputs.split_slow }}
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-        run: npm run test:${{ env.PHPUNIT_SCRIPT }} -- --verbose -c phpunit.xml.dist --group external-http
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+        run: npm run "test:${PHPUNIT_SCRIPT}" -- --verbose -c phpunit.xml.dist --group external-http
</ins><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">       # __fakegroup__ is excluded to force PHPUnit to ignore the <exclude> settings in phpunit.xml.dist.
</span><span class="cx" style="display: block; padding: 0 10px">       - name: Run (xDebug) tests
</span><span class="cx" style="display: block; padding: 0 10px">         if: ${{ ! inputs.split_slow }}
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-        run: LOCAL_PHP_XDEBUG=true npm run test:${{ env.PHPUNIT_SCRIPT }} -- -v --group xdebug --exclude-group __fakegroup__
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+        run: LOCAL_PHP_XDEBUG=true npm run "test:${PHPUNIT_SCRIPT}" -- -v --group xdebug --exclude-group __fakegroup__
</ins><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">       - name: Ensure version-controlled files are not modified or deleted
</span><span class="cx" style="display: block; padding: 0 10px">         run: git diff --exit-code
</span></span></pre></div>
<a id="trunkgithubworkflowsreusablephpunittestsv3yml"></a>
<div class="modfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Modified: trunk/.github/workflows/reusable-phpunit-tests-v3.yml</h4>
<pre class="diff"><span>
<span class="info" style="display: block; padding: 0 10px; color: #888">--- trunk/.github/workflows/reusable-phpunit-tests-v3.yml     2025-01-22 14:04:34 UTC (rev 59678)
+++ trunk/.github/workflows/reusable-phpunit-tests-v3.yml       2025-01-22 15:13:21 UTC (rev 59679)
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -76,6 +76,10 @@
</span><span class="cx" style="display: block; padding: 0 10px">       CODECOV_TOKEN:
</span><span class="cx" style="display: block; padding: 0 10px">         description: 'The Codecov token required for uploading reports.'
</span><span class="cx" style="display: block; padding: 0 10px">         required: false
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+      WPT_REPORT_API_KEY:
+        description: 'The WordPress.org Hosting Tests API key.'
+        required: false
+
</ins><span class="cx" style="display: block; padding: 0 10px"> env:
</span><span class="cx" style="display: block; padding: 0 10px">   LOCAL_PHP: ${{ inputs.php }}-fpm
</span><span class="cx" style="display: block; padding: 0 10px">   LOCAL_PHP_XDEBUG: ${{ inputs.coverage-report || false }}
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -87,6 +91,10 @@
</span><span class="cx" style="display: block; padding: 0 10px">   PHPUNIT_CONFIG: ${{ inputs.phpunit-config }}
</span><span class="cx" style="display: block; padding: 0 10px">   PUPPETEER_SKIP_DOWNLOAD: ${{ true }}
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+# Disable permissions for all available scopes by default.
+# Any needed permissions should be configured at the job level.
+permissions: {}
+
</ins><span class="cx" style="display: block; padding: 0 10px"> jobs:
</span><span class="cx" style="display: block; padding: 0 10px">   # Runs the PHPUnit tests for WordPress.
</span><span class="cx" style="display: block; padding: 0 10px">   #
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -117,13 +125,14 @@
</span><span class="cx" style="display: block; padding: 0 10px">     steps:
</span><span class="cx" style="display: block; padding: 0 10px">       - name: Configure environment variables
</span><span class="cx" style="display: block; padding: 0 10px">         run: |
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-          echo "PHP_FPM_UID=$(id -u)" >> $GITHUB_ENV
-          echo "PHP_FPM_GID=$(id -g)" >> $GITHUB_ENV
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+          echo "PHP_FPM_UID=$(id -u)" >> "$GITHUB_ENV"
+          echo "PHP_FPM_GID=$(id -g)" >> "$GITHUB_ENV"
</ins><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">       - name: Checkout repository
</span><span class="cx" style="display: block; padding: 0 10px">         uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1
</span><span class="cx" style="display: block; padding: 0 10px">         with:
</span><span class="cx" style="display: block; padding: 0 10px">           show-progress: ${{ runner.debug == '1' && 'true' || 'false' }}
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+          persist-credentials: false
</ins><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">       - name: Set up Node.js
</span><span class="cx" style="display: block; padding: 0 10px">         uses: actions/setup-node@39370e3970a6d050c480ffad4ff0ed4d3fdee5af # v4.1.0
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -176,11 +185,13 @@
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">       - name: WordPress Docker container debug information
</span><span class="cx" style="display: block; padding: 0 10px">         run: |
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-          docker compose run --rm mysql ${{ env.LOCAL_DB_TYPE == 'mariadb' && contains( fromJSON('["5.5", "10.0", "10.1", "10.2", "10.3"]'), env.LOCAL_DB_VERSION ) && 'mysql' || env.LOCAL_DB_TYPE }} --version
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+          docker compose run --rm mysql "${LOCAL_DB_CMD}" --version
</ins><span class="cx" style="display: block; padding: 0 10px">           docker compose run --rm php php --version
</span><span class="cx" style="display: block; padding: 0 10px">           docker compose run --rm php php -m
</span><span class="cx" style="display: block; padding: 0 10px">           docker compose run --rm php php -i
</span><span class="cx" style="display: block; padding: 0 10px">           docker compose run --rm php locale -a
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+        env:
+          LOCAL_DB_CMD: ${{ env.LOCAL_DB_TYPE == 'mariadb' && contains( fromJSON('["5.5", "10.0", "10.1", "10.2", "10.3"]'), env.LOCAL_DB_VERSION ) && 'mysql' || env.LOCAL_DB_TYPE }}
</ins><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">       - name: Install WordPress
</span><span class="cx" style="display: block; padding: 0 10px">         run: npm run env:install
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -187,22 +198,31 @@
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">       - name: Run PHPUnit tests${{ inputs.phpunit-test-groups && format( ' ({0} groups)', inputs.phpunit-test-groups ) || '' }}${{ inputs.coverage-report && ' with coverage report' || '' }}
</span><span class="cx" style="display: block; padding: 0 10px">         continue-on-error: ${{ inputs.allow-errors }}
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-        run: node ./tools/local-env/scripts/docker.js run php ./vendor/bin/phpunit --verbose -c ${{ env.PHPUNIT_CONFIG }}${{ inputs.phpunit-test-groups && format( ' --group {0}', inputs.phpunit-test-groups ) || '' }}${{ inputs.coverage-report && format( ' --coverage-clover wp-code-coverage-{0}-{1}.xml --coverage-html wp-code-coverage-{0}-{1}', ( inputs.multisite && 'multisite' || 'single' ), github.sha ) || '' }}
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+        run: |
+          node ./tools/local-env/scripts/docker.js run \
+            php ./vendor/bin/phpunit \
+            --verbose \
+            -c "${PHPUNIT_CONFIG}" \
+            ${{ inputs.phpunit-test-groups && '--group "${TEST_GROUPS}"' || '' }} \
+            ${{ inputs.coverage-report && '--coverage-clover "wp-code-coverage-${MULTISITE_FLAG}-${GITHUB_SHA}.xml" --coverage-html "wp-code-coverage-${MULTISITE_FLAG}-${GITHUB_SHA}"' || '' }}
+        env:
+          TEST_GROUPS: ${{ inputs.phpunit-test-groups }}
+          MULTISITE_FLAG: ${{ inputs.multisite && 'multisite' || 'single' }}
</ins><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">       - name: Run AJAX tests
</span><span class="cx" style="display: block; padding: 0 10px">         if: ${{ ! inputs.phpunit-test-groups && ! inputs.coverage-report }}
</span><span class="cx" style="display: block; padding: 0 10px">         continue-on-error: ${{ inputs.allow-errors }}
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-        run: node ./tools/local-env/scripts/docker.js run php ./vendor/bin/phpunit --verbose -c ${{ env.PHPUNIT_CONFIG }} --group ajax
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+        run: node ./tools/local-env/scripts/docker.js run php ./vendor/bin/phpunit --verbose -c "${PHPUNIT_CONFIG}" --group ajax
</ins><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">       - name: Run ms-files tests as a multisite install
</span><span class="cx" style="display: block; padding: 0 10px">         if: ${{ inputs.multisite && ! inputs.phpunit-test-groups && ! inputs.coverage-report }}
</span><span class="cx" style="display: block; padding: 0 10px">         continue-on-error: ${{ inputs.allow-errors }}
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-        run: node ./tools/local-env/scripts/docker.js run php ./vendor/bin/phpunit --verbose -c ${{ env.PHPUNIT_CONFIG }} --group ms-files
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+        run: node ./tools/local-env/scripts/docker.js run php ./vendor/bin/phpunit --verbose -c "${PHPUNIT_CONFIG}" --group ms-files
</ins><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">       - name: Run external HTTP tests
</span><span class="cx" style="display: block; padding: 0 10px">         if: ${{ ! inputs.multisite && ! inputs.phpunit-test-groups && ! inputs.coverage-report }}
</span><span class="cx" style="display: block; padding: 0 10px">         continue-on-error: ${{ inputs.allow-errors }}
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-        run: node ./tools/local-env/scripts/docker.js run php ./vendor/bin/phpunit --verbose -c ${{ env.PHPUNIT_CONFIG }} --group external-http
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+        run: node ./tools/local-env/scripts/docker.js run php ./vendor/bin/phpunit --verbose -c "${PHPUNIT_CONFIG}" --group external-http
</ins><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">       # __fakegroup__ is excluded to force PHPUnit to ignore the <exclude> settings in phpunit.xml.dist.
</span><span class="cx" style="display: block; padding: 0 10px">       - name: Run (Xdebug) tests
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -237,6 +257,7 @@
</span><span class="cx" style="display: block; padding: 0 10px">           repository: 'WordPress/phpunit-test-runner'
</span><span class="cx" style="display: block; padding: 0 10px">           path: 'test-runner'
</span><span class="cx" style="display: block; padding: 0 10px">           show-progress: ${{ runner.debug == '1' && 'true' || 'false' }}
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+          persist-credentials: false
</ins><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">       - name: Submit test results to the WordPress.org host test results
</span><span class="cx" style="display: block; padding: 0 10px">         if: ${{ github.ref == 'refs/heads/trunk' && inputs.report }}
</span></span></pre></div>
<a id="trunkgithubworkflowsreusablesupportjsonreaderv1yml"></a>
<div class="modfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Modified: trunk/.github/workflows/reusable-support-json-reader-v1.yml</h4>
<pre class="diff"><span>
<span class="info" style="display: block; padding: 0 10px; color: #888">--- trunk/.github/workflows/reusable-support-json-reader-v1.yml       2025-01-22 14:04:34 UTC (rev 59678)
+++ trunk/.github/workflows/reusable-support-json-reader-v1.yml 2025-01-22 15:13:21 UTC (rev 59679)
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -26,6 +26,10 @@
</span><span class="cx" style="display: block; padding: 0 10px">         description: "The MySQL versions to test for the given wp-version"
</span><span class="cx" style="display: block; padding: 0 10px">         value: ${{ jobs.mysql-versions.outputs.versions }}
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+# Disable permissions for all available scopes by default.
+# Any needed permissions should be configured at the job level.
+permissions: {}
+
</ins><span class="cx" style="display: block; padding: 0 10px"> jobs:
</span><span class="cx" style="display: block; padding: 0 10px">   # Determines the major version of WordPress being tested.
</span><span class="cx" style="display: block; padding: 0 10px">   #
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -36,6 +40,8 @@
</span><span class="cx" style="display: block; padding: 0 10px">   # - Returns the major WordPress version as an output based on the value passed to the wp-version input.
</span><span class="cx" style="display: block; padding: 0 10px">   major-wp-version:
</span><span class="cx" style="display: block; padding: 0 10px">     name: Determine major WordPress version
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+    permissions:
+      contents: read
</ins><span class="cx" style="display: block; padding: 0 10px">     runs-on: ubuntu-latest
</span><span class="cx" style="display: block; padding: 0 10px">     timeout-minutes: 5
</span><span class="cx" style="display: block; padding: 0 10px">     outputs:
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -47,17 +53,20 @@
</span><span class="cx" style="display: block; padding: 0 10px">         with:
</span><span class="cx" style="display: block; padding: 0 10px">           repository: ${{ inputs.repository }}
</span><span class="cx" style="display: block; padding: 0 10px">           show-progress: ${{ runner.debug == '1' && 'true' || 'false' }}
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+          persist-credentials: false
</ins><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">       - name: Determine the major WordPress version
</span><span class="cx" style="display: block; padding: 0 10px">         id: major-wp-version
</span><span class="cx" style="display: block; padding: 0 10px">         run: |
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-          if [ "${{ inputs.wp-version }}" ] && [ "${{ inputs.wp-version }}" != "nightly" ] && [ "${{ inputs.wp-version }}" != "latest" ] && [ "${{ inputs.wp-version }}" != "trunk" ]; then
-            echo "version=$(echo "${{ inputs.wp-version }}" | tr '.' '-' | cut -d '-' -f1-2)" >> $GITHUB_OUTPUT
-          elif [ "${{ inputs.wp-version }}" ] && [ "${{ inputs.wp-version }}" != "trunk" ]; then
-            echo "version=$(echo "${{ inputs.wp-version }}")" >> $GITHUB_OUTPUT
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+          if [ "${WP_VERSION}" ] && [ "${WP_VERSION}" != "nightly" ] && [ "${WP_VERSION}" != "latest" ] && [ "${WP_VERSION}" != "trunk" ]; then
+            echo "version=$(echo "${WP_VERSION}" | tr '.' '-' | cut -d '-' -f1-2)" >> "$GITHUB_OUTPUT"
+          elif [ "${WP_VERSION}" ] && [ "${WP_VERSION}" != "trunk" ]; then
+            echo "version=${WP_VERSION}" >> "$GITHUB_OUTPUT"
</ins><span class="cx" style="display: block; padding: 0 10px">           else
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-            echo "version=nightly" >> $GITHUB_OUTPUT
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+            echo "version=nightly" >> "$GITHUB_OUTPUT"
</ins><span class="cx" style="display: block; padding: 0 10px">           fi
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+        env:
+          WP_VERSION: ${{ inputs.wp-version }}
</ins><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">   # Determines the versions of PHP supported for a version of WordPress.
</span><span class="cx" style="display: block; padding: 0 10px">   #
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -67,6 +76,8 @@
</span><span class="cx" style="display: block; padding: 0 10px">   #   .version-support-php.json file and returning the values in that version's index.
</span><span class="cx" style="display: block; padding: 0 10px">   php-versions:
</span><span class="cx" style="display: block; padding: 0 10px">     name: Determine PHP versions
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+    permissions:
+      contents: read
</ins><span class="cx" style="display: block; padding: 0 10px">     runs-on: ubuntu-latest
</span><span class="cx" style="display: block; padding: 0 10px">     needs: [ major-wp-version ]
</span><span class="cx" style="display: block; padding: 0 10px">     timeout-minutes: 5
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -79,6 +90,7 @@
</span><span class="cx" style="display: block; padding: 0 10px">         with:
</span><span class="cx" style="display: block; padding: 0 10px">           repository: ${{ inputs.repository }}
</span><span class="cx" style="display: block; padding: 0 10px">           show-progress: ${{ runner.debug == '1' && 'true' || 'false' }}
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+          persist-credentials: false
</ins><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">       # Look up the major version's specific PHP support policy when a version is provided.
</span><span class="cx" style="display: block; padding: 0 10px">       # Otherwise, use the current PHP support policy.
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -85,11 +97,19 @@
</span><span class="cx" style="display: block; padding: 0 10px">       - name: Get supported PHP versions
</span><span class="cx" style="display: block; padding: 0 10px">         id: php-versions
</span><span class="cx" style="display: block; padding: 0 10px">         run: |
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-          if [ "${{ needs.major-wp-version.outputs.version }}" != "latest" ] && [ "${{ needs.major-wp-version.outputs.version }}" != "nightly" ]; then
-            echo "versions=$(jq -r '.["${{ needs.major-wp-version.outputs.version }}"] | @json' .version-support-php.json)" >> $GITHUB_OUTPUT
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+          if [ "${WP_VERSION}" != "latest" ] && [ "${WP_VERSION}" != "nightly" ]; then
+            VERSIONS="$( jq \
+              -r \
+              --arg wp_version "${WP_VERSION}" \
+              '.[$wp_version] | @json' \
+              .version-support-php.json
+            )"
+            echo "versions=$VERSIONS" >> "$GITHUB_OUTPUT"
</ins><span class="cx" style="display: block; padding: 0 10px">           else
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-            echo "versions=$(jq -r '.[ (keys[-1]) ] | @json' .version-support-php.json)" >> $GITHUB_OUTPUT
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+            echo "versions=$(jq -r '.[ (keys[-1]) ] | @json' .version-support-php.json)" >> "$GITHUB_OUTPUT"
</ins><span class="cx" style="display: block; padding: 0 10px">           fi
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+        env:
+          WP_VERSION: ${{ needs.major-wp-version.outputs.version }}
</ins><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">   # Determines the versions of MySQL supported for a version of WordPress.
</span><span class="cx" style="display: block; padding: 0 10px">   #
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -99,6 +119,8 @@
</span><span class="cx" style="display: block; padding: 0 10px">   #   .version-support-mysql.json file and returning the values in that version's index.
</span><span class="cx" style="display: block; padding: 0 10px">   mysql-versions:
</span><span class="cx" style="display: block; padding: 0 10px">     name: Determine MySQL versions
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+    permissions:
+      contents: read
</ins><span class="cx" style="display: block; padding: 0 10px">     runs-on: ubuntu-latest
</span><span class="cx" style="display: block; padding: 0 10px">     needs: [ major-wp-version ]
</span><span class="cx" style="display: block; padding: 0 10px">     timeout-minutes: 5
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -111,6 +133,7 @@
</span><span class="cx" style="display: block; padding: 0 10px">         with:
</span><span class="cx" style="display: block; padding: 0 10px">           repository: ${{ inputs.repository }}
</span><span class="cx" style="display: block; padding: 0 10px">           show-progress: ${{ runner.debug == '1' && 'true' || 'false' }}
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+          persist-credentials: false
</ins><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">       # Look up the major version's specific MySQL support policy when a version is provided.
</span><span class="cx" style="display: block; padding: 0 10px">       # Otherwise, use the current MySQL support policy.
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -117,8 +140,16 @@
</span><span class="cx" style="display: block; padding: 0 10px">       - name: Get supported MySQL versions
</span><span class="cx" style="display: block; padding: 0 10px">         id: mysql-versions
</span><span class="cx" style="display: block; padding: 0 10px">         run: |
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-          if [ "${{ needs.major-wp-version.outputs.version }}" != "latest" ] && [ "${{ needs.major-wp-version.outputs.version }}" != "nightly" ]; then
-            echo "versions=$(jq -r '.["${{ needs.major-wp-version.outputs.version }}"] | @json' .version-support-mysql.json)" >> $GITHUB_OUTPUT
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+          if [ "${WP_VERSION}" != "latest" ] && [ "${WP_VERSION}" != "nightly" ]; then
+            VERSIONS="$( jq \
+              -r \
+              --arg wp_version "${WP_VERSION}" \
+              '.[$wp_version] | @json' \
+              .version-support-mysql.json
+            )"
+            echo "versions=$VERSIONS" >> "$GITHUB_OUTPUT"
</ins><span class="cx" style="display: block; padding: 0 10px">           else
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-            echo "versions=$(jq -r '.[ (keys[-1]) ] | @json' .version-support-mysql.json)" >> $GITHUB_OUTPUT
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+            echo "versions=$(jq -r '.[ (keys[-1]) ] | @json' .version-support-mysql.json)" >> "$GITHUB_OUTPUT"
</ins><span class="cx" style="display: block; padding: 0 10px">           fi
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+        env:
+          WP_VERSION: ${{ needs.major-wp-version.outputs.version }}
</ins></span></pre></div>
<a id="trunkgithubworkflowsreusabletestcorebuildprocessyml"></a>
<div class="modfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Modified: trunk/.github/workflows/reusable-test-core-build-process.yml</h4>
<pre class="diff"><span>
<span class="info" style="display: block; padding: 0 10px; color: #888">--- trunk/.github/workflows/reusable-test-core-build-process.yml      2025-01-22 14:04:34 UTC (rev 59678)
+++ trunk/.github/workflows/reusable-test-core-build-process.yml        2025-01-22 15:13:21 UTC (rev 59679)
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -35,6 +35,10 @@
</span><span class="cx" style="display: block; padding: 0 10px"> env:
</span><span class="cx" style="display: block; padding: 0 10px">   PUPPETEER_SKIP_DOWNLOAD: ${{ true }}
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+# Disable permissions for all available scopes by default.
+# Any needed permissions should be configured at the job level.
+permissions: {}
+
</ins><span class="cx" style="display: block; padding: 0 10px"> jobs:
</span><span class="cx" style="display: block; padding: 0 10px">   # Verifies that installing npm dependencies and building WordPress works as expected.
</span><span class="cx" style="display: block; padding: 0 10px">   #
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -53,6 +57,8 @@
</span><span class="cx" style="display: block; padding: 0 10px">   # - Uploads the pull request number as an artifact.
</span><span class="cx" style="display: block; padding: 0 10px">   build-process-tests:
</span><span class="cx" style="display: block; padding: 0 10px">     name: Core running from ${{ inputs.directory }} / ${{ contains( inputs.os, 'macos-' ) && 'MacOS' || contains( inputs.os, 'windows-' ) && 'Windows' || 'Linux' }}
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+    permissions:
+      contents: read
</ins><span class="cx" style="display: block; padding: 0 10px">     runs-on: ${{ inputs.os }}
</span><span class="cx" style="display: block; padding: 0 10px">     timeout-minutes: 20
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -61,6 +67,7 @@
</span><span class="cx" style="display: block; padding: 0 10px">         uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1
</span><span class="cx" style="display: block; padding: 0 10px">         with:
</span><span class="cx" style="display: block; padding: 0 10px">           show-progress: ${{ runner.debug == '1' && 'true' || 'false' }}
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+          persist-credentials: false
</ins><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">       - name: Set up Node.js
</span><span class="cx" style="display: block; padding: 0 10px">         uses: actions/setup-node@39370e3970a6d050c480ffad4ff0ed4d3fdee5af # v4.1.0
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -85,7 +92,7 @@
</span><span class="cx" style="display: block; padding: 0 10px">           GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">       - name: Build WordPress to run from ${{ inputs.directory }}
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-        run: npm run build${{ inputs.directory == 'src' && ':dev' || '' }}
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+        run: npm run ${{ inputs.directory == 'src' && 'build:dev' || 'build' }}
</ins><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">       - name: Ensure version-controlled files are not modified or deleted during building
</span><span class="cx" style="display: block; padding: 0 10px">         run: git diff --exit-code
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -95,7 +102,7 @@
</span><span class="cx" style="display: block; padding: 0 10px">         run: zip -r wordpress.zip build/.
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">       - name: Clean after building to run from ${{ inputs.directory }}
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-        run: npm run grunt clean${{ inputs.directory == 'src' && ' -- --dev' || '' }}
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+        run: npm run grunt ${{ inputs.directory == 'src' && 'clean -- --dev' || 'clean' }}
</ins><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">       - name: Ensure version-controlled files are not modified or deleted during cleaning
</span><span class="cx" style="display: block; padding: 0 10px">         run: git diff --exit-code
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -112,7 +119,9 @@
</span><span class="cx" style="display: block; padding: 0 10px">         if: ${{ inputs.prepare-playground }}
</span><span class="cx" style="display: block; padding: 0 10px">         run: |
</span><span class="cx" style="display: block; padding: 0 10px">           mkdir -p ./pr-number
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-          echo ${{ github.event.number }} > ./pr-number/NR
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+          echo "${EVENT_NUMBER}" > ./pr-number/NR
+        env:
+          EVENT_NUMBER: ${{ github.event.number }}
</ins><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">       # Uploads the PR number as an artifact for the Pull Request Commenting workflow to download and then
</span><span class="cx" style="display: block; padding: 0 10px">       # leave a comment detailing how to test the PR within WordPress Playground.
</span></span></pre></div>
<a id="trunkgithubworkflowsreusabletestgutenbergbuildprocessyml"></a>
<div class="modfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Modified: trunk/.github/workflows/reusable-test-gutenberg-build-process.yml</h4>
<pre class="diff"><span>
<span class="info" style="display: block; padding: 0 10px; color: #888">--- trunk/.github/workflows/reusable-test-gutenberg-build-process.yml 2025-01-22 14:04:34 UTC (rev 59678)
+++ trunk/.github/workflows/reusable-test-gutenberg-build-process.yml   2025-01-22 15:13:21 UTC (rev 59679)
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -22,6 +22,10 @@
</span><span class="cx" style="display: block; padding: 0 10px">   PUPPETEER_SKIP_DOWNLOAD: ${{ true }}
</span><span class="cx" style="display: block; padding: 0 10px">   NODE_OPTIONS: '--max-old-space-size=8192'
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+# Disable permissions for all available scopes by default.
+# Any needed permissions should be configured at the job level.
+permissions: {}
+
</ins><span class="cx" style="display: block; padding: 0 10px"> jobs:
</span><span class="cx" style="display: block; padding: 0 10px">   # Verifies that installing npm dependencies and building the Gutenberg plugin works as expected.
</span><span class="cx" style="display: block; padding: 0 10px">   #
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -38,6 +42,8 @@
</span><span class="cx" style="display: block; padding: 0 10px">   # - Ensures version-controlled files are not modified or deleted.
</span><span class="cx" style="display: block; padding: 0 10px">   build-process-tests:
</span><span class="cx" style="display: block; padding: 0 10px">     name: Gutenberg running from ${{ inputs.directory }} / ${{ contains( inputs.os, 'macos-' ) && 'MacOS' || contains( inputs.os, 'windows-' ) && 'Windows' || 'Linux' }}
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+    permissions:
+      contents: read
</ins><span class="cx" style="display: block; padding: 0 10px">     runs-on: ${{ inputs.os }}
</span><span class="cx" style="display: block; padding: 0 10px">     timeout-minutes: 30
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -46,6 +52,7 @@
</span><span class="cx" style="display: block; padding: 0 10px">         uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1
</span><span class="cx" style="display: block; padding: 0 10px">         with:
</span><span class="cx" style="display: block; padding: 0 10px">           show-progress: ${{ runner.debug == '1' && 'true' || 'false' }}
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+          persist-credentials: false
</ins><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">       - name: Checkout Gutenberg plugin
</span><span class="cx" style="display: block; padding: 0 10px">         uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -53,6 +60,7 @@
</span><span class="cx" style="display: block; padding: 0 10px">           repository: 'WordPress/gutenberg'
</span><span class="cx" style="display: block; padding: 0 10px">           path: ${{ env.GUTENBERG_DIRECTORY }}
</span><span class="cx" style="display: block; padding: 0 10px">           show-progress: ${{ runner.debug == '1' && 'true' || 'false' }}
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+          persist-credentials: false
</ins><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">       - name: Set up Node.js
</span><span class="cx" style="display: block; padding: 0 10px">         uses: actions/setup-node@39370e3970a6d050c480ffad4ff0ed4d3fdee5af # v4.1.0
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -82,7 +90,7 @@
</span><span class="cx" style="display: block; padding: 0 10px">         working-directory: ${{ env.GUTENBERG_DIRECTORY }}
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">       - name: Build WordPress to run from ${{ inputs.directory }}
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-        run: npm run build${{ inputs.directory == 'src' && ':dev' || '' }}
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+        run: npm run ${{ inputs.directory == 'src' && 'build:dev' || 'build' }}
</ins><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">       - name: Run Gutenberg build script after building Core to run from ${{ inputs.directory }}
</span><span class="cx" style="display: block; padding: 0 10px">         run: npm run build
</span></span></pre></div>
<a id="trunkgithubworkflowsreusabletestlocaldockerenvironmentv1yml"></a>
<div class="modfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Modified: trunk/.github/workflows/reusable-test-local-docker-environment-v1.yml</h4>
<pre class="diff"><span>
<span class="info" style="display: block; padding: 0 10px; color: #888">--- trunk/.github/workflows/reusable-test-local-docker-environment-v1.yml     2025-01-22 14:04:34 UTC (rev 59678)
+++ trunk/.github/workflows/reusable-test-local-docker-environment-v1.yml       2025-01-22 15:13:21 UTC (rev 59679)
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -47,6 +47,10 @@
</span><span class="cx" style="display: block; padding: 0 10px">   LOCAL_WP_TESTS_DOMAIN: ${{ inputs.tests-domain }}
</span><span class="cx" style="display: block; padding: 0 10px">   PUPPETEER_SKIP_DOWNLOAD: ${{ true }}
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+# Disable permissions for all available scopes by default.
+# Any needed permissions should be configured at the job level.
+permissions: {}
+
</ins><span class="cx" style="display: block; padding: 0 10px"> jobs:
</span><span class="cx" style="display: block; padding: 0 10px">   # Tests the local Docker environment.
</span><span class="cx" style="display: block; padding: 0 10px">   #
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -70,6 +74,8 @@
</span><span class="cx" style="display: block; padding: 0 10px">   # - Ensures version-controlled files are not modified or deleted.
</span><span class="cx" style="display: block; padding: 0 10px">   local-docker-environment-tests:
</span><span class="cx" style="display: block; padding: 0 10px">     name: PHP ${{ inputs.php }} / ${{ 'mariadb' == inputs.db-type && 'MariaDB' || 'MySQL' }} ${{ inputs.db-version }}${{ inputs.memcached && ' with memcached' || '' }}${{ 'example.org' != inputs.tests-domain && format( ' {0}', inputs.tests-domain ) || '' }}
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+    permissions:
+      contents: read
</ins><span class="cx" style="display: block; padding: 0 10px">     runs-on: ${{ inputs.os }}
</span><span class="cx" style="display: block; padding: 0 10px">     timeout-minutes: 20
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -76,13 +82,14 @@
</span><span class="cx" style="display: block; padding: 0 10px">     steps:
</span><span class="cx" style="display: block; padding: 0 10px">       - name: Configure environment variables
</span><span class="cx" style="display: block; padding: 0 10px">         run: |
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-          echo "PHP_FPM_UID=$(id -u)" >> $GITHUB_ENV
-          echo "PHP_FPM_GID=$(id -g)" >> $GITHUB_ENV
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+          echo "PHP_FPM_UID=$(id -u)" >> "$GITHUB_ENV"
+          echo "PHP_FPM_GID=$(id -g)" >> "$GITHUB_ENV"
</ins><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">       - name: Checkout repository
</span><span class="cx" style="display: block; padding: 0 10px">         uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1
</span><span class="cx" style="display: block; padding: 0 10px">         with:
</span><span class="cx" style="display: block; padding: 0 10px">           show-progress: ${{ runner.debug == '1' && 'true' || 'false' }}
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+          persist-credentials: false
</ins><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">       - name: Set up Node.js
</span><span class="cx" style="display: block; padding: 0 10px">         uses: actions/setup-node@1e60f620b9541d16bece96c5465dc8ee9832be0b # v4.0.3
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -135,7 +142,7 @@
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">       - name: WordPress Docker container debug information
</span><span class="cx" style="display: block; padding: 0 10px">         run: |
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-          docker compose run --rm mysql ${{ env.LOCAL_DB_TYPE }} --version
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+          docker compose run --rm mysql "${LOCAL_DB_TYPE}" --version
</ins><span class="cx" style="display: block; padding: 0 10px">           docker compose run --rm php php --version
</span><span class="cx" style="display: block; padding: 0 10px">           docker compose run --rm php php -m
</span><span class="cx" style="display: block; padding: 0 10px">           docker compose run --rm php php -i
</span></span></pre></div>
<a id="trunkgithubworkflowsreusableupgradetestingyml"></a>
<div class="modfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Modified: trunk/.github/workflows/reusable-upgrade-testing.yml</h4>
<pre class="diff"><span>
<span class="info" style="display: block; padding: 0 10px; color: #888">--- trunk/.github/workflows/reusable-upgrade-testing.yml      2025-01-22 14:04:34 UTC (rev 59678)
+++ trunk/.github/workflows/reusable-upgrade-testing.yml        2025-01-22 15:13:21 UTC (rev 59679)
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -37,6 +37,10 @@
</span><span class="cx" style="display: block; padding: 0 10px">         type: 'string'
</span><span class="cx" style="display: block; padding: 0 10px">         default: '5.7'
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+# Disable permissions for all available scopes by default.
+# Any needed permissions should be configured at the job level.
+permissions: {}
+
</ins><span class="cx" style="display: block; padding: 0 10px"> jobs:
</span><span class="cx" style="display: block; padding: 0 10px">   # Runs upgrade tests on a build of WordPress.
</span><span class="cx" style="display: block; padding: 0 10px">   #
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -49,6 +53,7 @@
</span><span class="cx" style="display: block; padding: 0 10px">   # - Updates to the version of WordPress being tested.
</span><span class="cx" style="display: block; padding: 0 10px">   upgrade-tests:
</span><span class="cx" style="display: block; padding: 0 10px">     name: ${{ inputs.wp }} to ${{ inputs.new-version }} / PHP ${{ inputs.php }} with ${{ 'mariadb' == inputs.db-type && 'MariaDB' || 'MySQL' }} ${{ inputs.db-version }}${{ inputs.multisite && ' multisite' || '' }}
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+    permissions: {}
</ins><span class="cx" style="display: block; padding: 0 10px">     runs-on: ${{ inputs.os }}
</span><span class="cx" style="display: block; padding: 0 10px">     timeout-minutes: 20
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -76,13 +81,20 @@
</span><span class="cx" style="display: block; padding: 0 10px">           tools: wp-cli
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">       - name: Download WordPress ${{ inputs.wp }}
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-        run: wp core download --version=${{ inputs.wp }}
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+        run: wp core download --version="${WP_VERSION}"
+        env:
+          WP_VERSION: ${{ inputs.wp }}
</ins><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">       - name: Create wp-config.php file
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-        run: wp config create --dbname=test_db --dbuser=root --dbpass=root --dbhost=127.0.0.1:${{ job.services.database.ports['3306'] }}
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+        run: wp config create --dbname=test_db --dbuser=root --dbpass=root --dbhost="127.0.0.1:${DB_PORT}"
+        env:
+          DB_PORT: ${{ job.services.database.ports['3306'] }}
</ins><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">       - name: Install WordPress
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-        run: wp core ${{ inputs.multisite && 'multisite-' || '' }}install --url=http://localhost/ --title="Upgrade Test" --admin_user=admin --admin_password=password --admin_email=me@example.org --skip-email
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+        run: |
+          wp core ${{ inputs.multisite && 'multisite-install' || 'install' }} \
+          --url=http://localhost/ --title="Upgrade Test" --admin_user=admin \
+          --admin_password=password --admin_email=me@example.org --skip-email
</ins><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">       - name: Update to the latest minor version
</span><span class="cx" style="display: block; padding: 0 10px">         run: wp core update --minor
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -89,4 +101,6 @@
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">       - name: Upgrade to WordPress ${{ inputs.new-version }}
</span><span class="cx" style="display: block; padding: 0 10px">         run: |
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-          wp core update${{ 'latest' != inputs.new-version && format( ' --version={0}', inputs.new-version ) || '' }}
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+          wp core update ${{ 'latest' != inputs.new-version && '--version="${WP_VERSION}"' || '' }}
+        env:
+          WP_VERSION: ${{ inputs.new-version }}
</ins></span></pre></div>
<a id="trunkgithubworkflowsreusableworkflowlintyml"></a>
<div class="addfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Added: trunk/.github/workflows/reusable-workflow-lint.yml</h4>
<pre class="diff"><span>
<span class="info" style="display: block; padding: 0 10px; color: #888">--- trunk/.github/workflows/reusable-workflow-lint.yml                                (rev 0)
+++ trunk/.github/workflows/reusable-workflow-lint.yml  2025-01-22 15:13:21 UTC (rev 59679)
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -0,0 +1,34 @@
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+name: Lint GitHub Actions workflows
+on:
+  workflow_call:
+
+permissions: {}
+
+jobs:
+  # Runs the actionlint GitHub Action workflow file linter.
+  #
+  # This helps guard against common mistakes including strong type checking for expressions (${{ }}), security checks,
+  # `run:` script checking, glob syntax validation, and more.
+  #
+  # Performs the following steps:
+  # - Checks out the repository.
+  # - Runs actionlint.
+  actionlint:
+    name: Run actionlint
+    runs-on: ubuntu-latest
+    permissions:
+      contents: read
+    timeout-minutes: 5
+    steps:
+      - name: Checkout repository
+        uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
+        with:
+          persist-credentials: false
+          show-progress: ${{ runner.debug == '1' && 'true' || 'false' }}
+
+      # actionlint is static checker for GitHub Actions workflow files.
+      # See https://github.com/rhysd/actionlint.
+      - name: Run actionlint
+        uses: docker://rhysd/actionlint:1.7.7
+        with:
+          args: "-color -verbose"
</ins><span class="cx" style="display: block; padding: 0 10px">Property changes on: trunk/.github/workflows/reusable-workflow-lint.yml
</span><span class="cx" style="display: block; padding: 0 10px">___________________________________________________________________
</span></span></pre></div>
<a id="svneolstyle"></a>
<div class="addfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Added: svn:eol-style</h4></div>
<ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+native
</ins><span class="cx" style="display: block; padding: 0 10px">\ No newline at end of property
</span><a id="trunkgithubworkflowsslacknotificationsyml"></a>
<div class="modfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Modified: trunk/.github/workflows/slack-notifications.yml</h4>
<pre class="diff"><span>
<span class="info" style="display: block; padding: 0 10px; color: #888">--- trunk/.github/workflows/slack-notifications.yml   2025-01-22 14:04:34 UTC (rev 59678)
+++ trunk/.github/workflows/slack-notifications.yml     2025-01-22 15:13:21 UTC (rev 59679)
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -54,7 +54,7 @@
</span><span class="cx" style="display: block; padding: 0 10px">     timeout-minutes: 5
</span><span class="cx" style="display: block; padding: 0 10px">     if: ${{ github.repository == 'WordPress/wordpress-develop' && github.event.workflow_run.event != 'pull_request' }}
</span><span class="cx" style="display: block; padding: 0 10px">     outputs:
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-      previous_conclusion: ${{ steps.previous-conclusion.outputs.previous_conclusion }}
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+      previous_conclusion: ${{ steps.previous-attempt-result.outputs.result }}
</ins><span class="cx" style="display: block; padding: 0 10px">       payload: ${{ steps.create-payload.outputs.payload }}
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">     steps:
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -68,10 +68,10 @@
</span><span class="cx" style="display: block; padding: 0 10px">             const workflow_run = await github.rest.actions.getWorkflowRun({
</span><span class="cx" style="display: block; padding: 0 10px">               owner: context.repo.owner,
</span><span class="cx" style="display: block; padding: 0 10px">               repo: context.repo.repo,
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-              run_id: ${{ github.run_id }},
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+              run_id: context.runId,
</ins><span class="cx" style="display: block; padding: 0 10px">             });
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-            if ( '${{ inputs.calling_status }}' == 'failure' && workflow_run.data.run_attempt == 1 ) {
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+            if ( process.env.CALLING_STATUS == 'failure' && workflow_run.data.run_attempt == 1 ) {
</ins><span class="cx" style="display: block; padding: 0 10px">               return 'first-failure';
</span><span class="cx" style="display: block; padding: 0 10px">             }
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -82,7 +82,7 @@
</span><span class="cx" style="display: block; padding: 0 10px">               const previous_run = await github.rest.actions.getWorkflowRunAttempt({
</span><span class="cx" style="display: block; padding: 0 10px">                 owner: context.repo.owner,
</span><span class="cx" style="display: block; padding: 0 10px">                 repo: context.repo.repo,
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                run_id: ${{ github.run_id }},
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                run_id: context.runId,
</ins><span class="cx" style="display: block; padding: 0 10px">                 attempt_number: workflow_run.data.run_attempt - 1
</span><span class="cx" style="display: block; padding: 0 10px">               });
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -94,7 +94,7 @@
</span><span class="cx" style="display: block; padding: 0 10px">               owner: context.repo.owner,
</span><span class="cx" style="display: block; padding: 0 10px">               repo: context.repo.repo,
</span><span class="cx" style="display: block; padding: 0 10px">               workflow_id: workflow_run.data.workflow_id,
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-              branch: '${{ env.CURRENT_BRANCH }}',
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+              branch: process.env.CURRENT_BRANCH,
</ins><span class="cx" style="display: block; padding: 0 10px">               exclude_pull_requests: true,
</span><span class="cx" style="display: block; padding: 0 10px">             });
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -124,11 +124,9 @@
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">             // Can't determine previous workflow conclusion.
</span><span class="cx" style="display: block; padding: 0 10px">             return 'unknown';
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+        env:
+          CALLING_STATUS: ${{ inputs.calling_status }}
</ins><span class="cx" style="display: block; padding: 0 10px"> 
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-      - name: Store previous conclusion as an output
-        id: previous-conclusion
-        run: echo "previous_conclusion=${{ steps.previous-attempt-result.outputs.result }}" >> $GITHUB_OUTPUT
-
</del><span class="cx" style="display: block; padding: 0 10px">       - name: Get the commit message
</span><span class="cx" style="display: block; padding: 0 10px">         id: current-commit-message
</span><span class="cx" style="display: block; padding: 0 10px">         uses: actions/github-script@60a0d83039c74a4aee543508d2ffcb1c3799cdea # v7.0.1
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -140,7 +138,7 @@
</span><span class="cx" style="display: block; padding: 0 10px">             const commit_details = await github.rest.repos.getCommit({
</span><span class="cx" style="display: block; padding: 0 10px">               owner: context.repo.owner,
</span><span class="cx" style="display: block; padding: 0 10px">               repo: context.repo.repo,
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-              ref: '${{ github.sha }}'
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+              ref: context.sha,
</ins><span class="cx" style="display: block; padding: 0 10px">             });
</span><span class="cx" style="display: block; padding: 0 10px">             return commit_details.data.commit.message;
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -147,19 +145,31 @@
</span><span class="cx" style="display: block; padding: 0 10px">       - name: Prepare commit message.
</span><span class="cx" style="display: block; padding: 0 10px">         id: commit-message
</span><span class="cx" style="display: block; padding: 0 10px">         run: |
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-          COMMIT_MESSAGE=$(cat <<'EOF' | awk 'NR==1' | sed 's/`/\\`/g' | sed 's/\"/\\\\\\"/g' | sed 's/\$/\\$/g'
-          ${{ ( github.event_name == 'workflow_dispatch' || github.event_name == 'schedule' ) && fromJson( steps.current-commit-message.outputs.result ) || github.event.head_commit.message }}
-          EOF
-          )
-          echo "commit_message_escaped=${COMMIT_MESSAGE}" >> $GITHUB_OUTPUT
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+          # shellcheck disable=SC2016
+          COMMIT_MESSAGE="$(echo "${COMMIT_MSG_RAW}" | awk 'NR==1' | sed 's/`/\\`/g' | sed 's/\"/\\\\\\"/g' | sed 's/\$/\\$/g')"
+          echo "commit_message_escaped=${COMMIT_MESSAGE}" >> "$GITHUB_OUTPUT"
+        env:
+          COMMIT_MSG_RAW: ${{ ( github.event_name == 'workflow_dispatch' || github.event_name == 'schedule' ) && fromJson( steps.current-commit-message.outputs.result ) || github.event.head_commit.message }}
</ins><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">       - name: Construct payload and store as an output
</span><span class="cx" style="display: block; padding: 0 10px">         id: create-payload
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-        run: echo "payload={\"workflow_name\":\"${{ github.workflow }}\",\"ref_name\":\"${{ env.CURRENT_BRANCH }}\",\"run_url\":\"https://github.com/WordPress/wordpress-develop/actions/runs/${{ github.run_id }}/attempts/${{ github.run_attempt }}\",\"commit_message\":\"${{ steps.commit-message.outputs.commit_message_escaped }}\"}" >> $GITHUB_OUTPUT
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+        run: |
+          PAYLOAD="$( jq \
+            -n \
+            --arg workflow_name "${GITHUB_WORKFLOW}" \
+            --arg ref_name "${CURRENT_BRANCH}" \
+            --arg run_url "https://github.com/WordPress/wordpress-develop/actions/runs/${GITHUB_RUN_ID}/attempts/${GITHUB_RUN_ATTEMPT}" \
+            --arg commit_message "${COMMIT_MSG}" \
+            '{workflow_name: $workflow_name, ref_name: $ref_name, run_url: $run_url, commit_message: $commit_message}'
+          )"
+          echo "payload=$PAYLOAD" >> "$GITHUB_OUTPUT"
+        env:
+          COMMIT_MSG: ${{ steps.commit-message.outputs.commit_message_escaped }}
</ins><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">   # Posts notifications when a workflow fails.
</span><span class="cx" style="display: block; padding: 0 10px">   failure:
</span><span class="cx" style="display: block; padding: 0 10px">     name: Failure notifications
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+    permissions: {}
</ins><span class="cx" style="display: block; padding: 0 10px">     runs-on: ubuntu-latest
</span><span class="cx" style="display: block; padding: 0 10px">     timeout-minutes: 10
</span><span class="cx" style="display: block; padding: 0 10px">     needs: [ prepare ]
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -176,6 +186,7 @@
</span><span class="cx" style="display: block; padding: 0 10px">   # Posts notifications the first time a workflow run succeeds after previously failing.
</span><span class="cx" style="display: block; padding: 0 10px">   fixed:
</span><span class="cx" style="display: block; padding: 0 10px">     name: Fixed notifications
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+    permissions: {}
</ins><span class="cx" style="display: block; padding: 0 10px">     runs-on: ubuntu-latest
</span><span class="cx" style="display: block; padding: 0 10px">     timeout-minutes: 10
</span><span class="cx" style="display: block; padding: 0 10px">     needs: [ prepare ]
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -192,6 +203,7 @@
</span><span class="cx" style="display: block; padding: 0 10px">   # Posts notifications when a workflow is successful.
</span><span class="cx" style="display: block; padding: 0 10px">   success:
</span><span class="cx" style="display: block; padding: 0 10px">     name: Success notifications
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+    permissions: {}
</ins><span class="cx" style="display: block; padding: 0 10px">     runs-on: ubuntu-latest
</span><span class="cx" style="display: block; padding: 0 10px">     timeout-minutes: 10
</span><span class="cx" style="display: block; padding: 0 10px">     needs: [ prepare ]
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -208,6 +220,7 @@
</span><span class="cx" style="display: block; padding: 0 10px">   # Posts notifications when a workflow is cancelled.
</span><span class="cx" style="display: block; padding: 0 10px">   cancelled:
</span><span class="cx" style="display: block; padding: 0 10px">     name: Cancelled notifications
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+    permissions: {}
</ins><span class="cx" style="display: block; padding: 0 10px">     runs-on: ubuntu-latest
</span><span class="cx" style="display: block; padding: 0 10px">     timeout-minutes: 10
</span><span class="cx" style="display: block; padding: 0 10px">     needs: [ prepare ]
</span></span></pre></div>
<a id="trunkgithubworkflowstestandzipdefaultthemesyml"></a>
<div class="modfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Modified: trunk/.github/workflows/test-and-zip-default-themes.yml</h4>
<pre class="diff"><span>
<span class="info" style="display: block; padding: 0 10px; color: #888">--- trunk/.github/workflows/test-and-zip-default-themes.yml   2025-01-22 14:04:34 UTC (rev 59678)
+++ trunk/.github/workflows/test-and-zip-default-themes.yml     2025-01-22 15:13:21 UTC (rev 59679)
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -91,10 +91,13 @@
</span><span class="cx" style="display: block; padding: 0 10px">         with:
</span><span class="cx" style="display: block; padding: 0 10px">           ref: ${{ github.event_name == 'workflow_dispatch' && inputs.branch || github.ref }}
</span><span class="cx" style="display: block; padding: 0 10px">           show-progress: ${{ runner.debug == '1' && 'true' || 'false' }}
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+          persist-credentials: false
</ins><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">       - name: Check for zero-byte (empty) files
</span><span class="cx" style="display: block; padding: 0 10px">         run: |
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-          [[ ! $(find src/wp-content/themes/${{ matrix.theme }} -empty) ]]
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+          [[ ! $(find "src/wp-content/themes/${THEME}" -empty) ]]
+        env:
+          THEME: ${{ matrix.theme }}
</ins><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">   # Tests the build script for themes that have one.
</span><span class="cx" style="display: block; padding: 0 10px">   #
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -130,6 +133,7 @@
</span><span class="cx" style="display: block; padding: 0 10px">         with:
</span><span class="cx" style="display: block; padding: 0 10px">           ref: ${{ github.event_name == 'workflow_dispatch' && inputs.branch || github.ref }}
</span><span class="cx" style="display: block; padding: 0 10px">           show-progress: ${{ runner.debug == '1' && 'true' || 'false' }}
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+          persist-credentials: false
</ins><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">       - name: Set up Node.js
</span><span class="cx" style="display: block; padding: 0 10px">         uses: actions/setup-node@39370e3970a6d050c480ffad4ff0ed4d3fdee5af # v4.1.0
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -187,6 +191,7 @@
</span><span class="cx" style="display: block; padding: 0 10px">         with:
</span><span class="cx" style="display: block; padding: 0 10px">           ref: ${{ github.event_name == 'workflow_dispatch' && inputs.branch || github.ref }}
</span><span class="cx" style="display: block; padding: 0 10px">           show-progress: ${{ runner.debug == '1' && 'true' || 'false' }}
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+          persist-credentials: false
</ins><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">       - name: Upload theme ZIP as an artifact
</span><span class="cx" style="display: block; padding: 0 10px">         uses: actions/upload-artifact@b4b15b8c7c6ac21ea08fcf65892d2ee8f75cf882 # v4.4.3
</span></span></pre></div>
<a id="trunkgithubworkflowsupgradetestingyml"></a>
<div class="modfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Modified: trunk/.github/workflows/upgrade-testing.yml</h4>
<pre class="diff"><span>
<span class="info" style="display: block; padding: 0 10px; color: #888">--- trunk/.github/workflows/upgrade-testing.yml       2025-01-22 14:04:34 UTC (rev 59678)
+++ trunk/.github/workflows/upgrade-testing.yml 2025-01-22 15:13:21 UTC (rev 59679)
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -59,8 +59,6 @@
</span><span class="cx" style="display: block; padding: 0 10px">     name: ${{ matrix.wp }} to ${{ inputs.new-version && inputs.new-version || 'latest' }}
</span><span class="cx" style="display: block; padding: 0 10px">     uses: ./.github/workflows/reusable-upgrade-testing.yml
</span><span class="cx" style="display: block; padding: 0 10px">     if: ${{ github.repository == 'WordPress/wordpress-develop' || github.event_name == 'pull_request' }}
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-    permissions:
-      contents: read
</del><span class="cx" style="display: block; padding: 0 10px">     strategy:
</span><span class="cx" style="display: block; padding: 0 10px">       fail-fast: false
</span><span class="cx" style="display: block; padding: 0 10px">       matrix:
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -96,8 +94,6 @@
</span><span class="cx" style="display: block; padding: 0 10px">     name: ${{ matrix.wp }} to ${{ inputs.new-version && inputs.new-version || 'latest' }}
</span><span class="cx" style="display: block; padding: 0 10px">     uses: ./.github/workflows/reusable-upgrade-testing.yml
</span><span class="cx" style="display: block; padding: 0 10px">     if: ${{ github.repository == 'WordPress/wordpress-develop' || github.event_name == 'pull_request' }}
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-    permissions:
-      contents: read
</del><span class="cx" style="display: block; padding: 0 10px">     strategy:
</span><span class="cx" style="display: block; padding: 0 10px">       fail-fast: false
</span><span class="cx" style="display: block; padding: 0 10px">       matrix:
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -112,8 +108,6 @@
</span><span class="cx" style="display: block; padding: 0 10px">           # The PHP <= 7.3/MySQL 8.4 jobs currently fail due to mysql_native_password being disabled by default. See https://core.trac.wordpress.org/ticket/61218.
</span><span class="cx" style="display: block; padding: 0 10px">           - php: '7.2'
</span><span class="cx" style="display: block; padding: 0 10px">             db-version: '8.4'
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-          - php: '7.3'
-            db-version: '8.4'
</del><span class="cx" style="display: block; padding: 0 10px">     with:
</span><span class="cx" style="display: block; padding: 0 10px">       os: ${{ matrix.os }}
</span><span class="cx" style="display: block; padding: 0 10px">       php: ${{ matrix.php }}
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -142,8 +136,6 @@
</span><span class="cx" style="display: block; padding: 0 10px">           # The PHP <= 7.3/MySQL 8.4 jobs currently fail due to mysql_native_password being disabled by default. See https://core.trac.wordpress.org/ticket/61218.
</span><span class="cx" style="display: block; padding: 0 10px">           - php: '7.2'
</span><span class="cx" style="display: block; padding: 0 10px">             db-version: '8.4'
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-          - php: '7.3'
-            db-version: '8.4'
</del><span class="cx" style="display: block; padding: 0 10px">     with:
</span><span class="cx" style="display: block; padding: 0 10px">       os: ${{ matrix.os }}
</span><span class="cx" style="display: block; padding: 0 10px">       php: ${{ matrix.php }}
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -201,8 +193,6 @@
</span><span class="cx" style="display: block; padding: 0 10px">           # The PHP <= 7.3/MySQL 8.4 jobs currently fail due to mysql_native_password being disabled by default. See https://core.trac.wordpress.org/ticket/61218.
</span><span class="cx" style="display: block; padding: 0 10px">           - php: '7.2'
</span><span class="cx" style="display: block; padding: 0 10px">             db-version: '8.4'
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-          - php: '7.3'
-            db-version: '8.4'
</del><span class="cx" style="display: block; padding: 0 10px">     with:
</span><span class="cx" style="display: block; padding: 0 10px">       os: ${{ matrix.os }}
</span><span class="cx" style="display: block; padding: 0 10px">       php: ${{ matrix.php }}
</span></span></pre></div>
<a id="trunkgithubworkflowsworkflowlintyml"></a>
<div class="addfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Added: trunk/.github/workflows/workflow-lint.yml</h4>
<pre class="diff"><span>
<span class="info" style="display: block; padding: 0 10px; color: #888">--- trunk/.github/workflows/workflow-lint.yml                         (rev 0)
+++ trunk/.github/workflows/workflow-lint.yml   2025-01-22 15:13:21 UTC (rev 59679)
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -0,0 +1,39 @@
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+name: Lint GitHub Actions workflow files
+
+on:
+  push:
+    branches:
+      - trunk
+      - '6.[8-9]'
+      - '[7-9].[0-9]'
+    paths:
+      # Only run when changes are made to workflow files.
+      - '.github/workflows/**'
+  pull_request:
+    branches:
+      - trunk
+      - '[0-9].[0-9]'
+    paths:
+      # Only run when changes are made to workflow files.
+      - '.github/workflows/**'
+  workflow_dispatch:
+
+# Cancels all previous workflow runs for pull requests that have not completed.
+concurrency:
+  # The concurrency group contains the workflow name and the branch name for pull requests
+  # or the commit hash for any other events.
+  group: ${{ github.workflow }}-${{ github.event_name == 'pull_request' && github.head_ref || github.sha }}
+  cancel-in-progress: true
+
+# Disable permissions for all available scopes by default.
+# Any needed permissions should be configured at the job level.
+permissions: {}
+
+jobs:
+  lint:
+    name: Lint GitHub Action files
+    permissions:
+      security-events: write
+      actions: read
+      contents: read
+    uses: ./.github/workflows/reusable-workflow-lint.yml
</ins><span class="cx" style="display: block; padding: 0 10px">Property changes on: trunk/.github/workflows/workflow-lint.yml
</span><span class="cx" style="display: block; padding: 0 10px">___________________________________________________________________
</span></span></pre></div>
<a id="svneolstyle"></a>
<div class="addfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Added: svn:eol-style</h4></div>
<ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+native
</ins><span class="cx" style="display: block; padding: 0 10px">\ No newline at end of property
</span><a id="trunkdockercomposeyml"></a>
<div class="modfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Modified: trunk/docker-compose.yml</h4>
<pre class="diff"><span>
<span class="info" style="display: block; padding: 0 10px; color: #888">--- trunk/docker-compose.yml  2025-01-22 14:04:34 UTC (rev 59678)
+++ trunk/docker-compose.yml    2025-01-22 15:13:21 UTC (rev 59679)
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -38,14 +38,14 @@
</span><span class="cx" style="display: block; padding: 0 10px">       - wpdevnet
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">     environment:
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-      - LOCAL_PHP_XDEBUG=${LOCAL_PHP_XDEBUG-false}
-      - XDEBUG_MODE=${LOCAL_PHP_XDEBUG_MODE-develop,debug}
-      - LOCAL_PHP_MEMCACHED=${LOCAL_PHP_MEMCACHED-false}
-      - PHP_FPM_UID=${PHP_FPM_UID-1000}
-      - PHP_FPM_GID=${PHP_FPM_GID-1000}
-      - GITHUB_REF=${GITHUB_REF-false}
-      - GITHUB_EVENT_NAME=${GITHUB_EVENT_NAME-false}
-      - HOST_PATH=${PWD-}/${LOCAL_DIR-src}
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+      LOCAL_PHP_XDEBUG: ${LOCAL_PHP_XDEBUG-false}
+      XDEBUG_MODE: ${LOCAL_PHP_XDEBUG_MODE-develop,debug}
+      LOCAL_PHP_MEMCACHED: ${LOCAL_PHP_MEMCACHED-false}
+      PHP_FPM_UID: ${PHP_FPM_UID-1000}
+      PHP_FPM_GID: ${PHP_FPM_GID-1000}
+      GITHUB_REF: ${GITHUB_REF-false}
+      GITHUB_EVENT_NAME: ${GITHUB_EVENT_NAME-false}
+      HOST_PATH: ${PWD-}/${LOCAL_DIR-src}
</ins><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">     volumes:
</span><span class="cx" style="display: block; padding: 0 10px">       - ./tools/local-env/php-config.ini:/usr/local/etc/php/conf.d/php-config.ini
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -83,7 +83,10 @@
</span><span class="cx" style="display: block; padding: 0 10px">     command: ${LOCAL_DB_AUTH_OPTION-}
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">     healthcheck:
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-      test: [ "CMD-SHELL", "if [ \"$LOCAL_DB_TYPE\" = \"mariadb\" ]; then case \"$LOCAL_DB_VERSION\" in 5.5|10.0|10.1|10.2|10.3) mysqladmin ping -h localhost || exit $$?;; *) mariadb-admin ping -h localhost || exit $$?;; esac; else mysqladmin ping -h localhost || exit $$?; fi" ]
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+      test: [
+        'CMD-SHELL',
+        'if [ "$LOCAL_DB_TYPE" = "mariadb" ]; then case "$LOCAL_DB_VERSION" in 5.5|10.0|10.1|10.2|10.3) mysqladmin ping -h localhost || exit $$?;; *) mariadb-admin ping -h localhost || exit $$?;; esac; else mysqladmin ping -h localhost || exit $$?; fi'
+      ]
</ins><span class="cx" style="display: block; padding: 0 10px">       timeout: 5s
</span><span class="cx" style="display: block; padding: 0 10px">       interval: 5s
</span><span class="cx" style="display: block; padding: 0 10px">       retries: 10
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -98,11 +101,11 @@
</span><span class="cx" style="display: block; padding: 0 10px">       - wpdevnet
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">     environment:
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-      - LOCAL_PHP_XDEBUG=${LOCAL_PHP_XDEBUG-false}
-      - LOCAL_PHP_MEMCACHED=${LOCAL_PHP_MEMCACHED-false}
-      - PHP_FPM_UID=${PHP_FPM_UID-1000}
-      - PHP_FPM_GID=${PHP_FPM_GID-1000}
-      - HOST_PATH=${PWD-}/${LOCAL_DIR-src}
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+      LOCAL_PHP_XDEBUG: ${LOCAL_PHP_XDEBUG-false}
+      LOCAL_PHP_MEMCACHED: ${LOCAL_PHP_MEMCACHED-false}
+      PHP_FPM_UID: ${PHP_FPM_UID-1000}
+      PHP_FPM_GID: ${PHP_FPM_GID-1000}
+      HOST_PATH: ${PWD-}/${LOCAL_DIR-src}
</ins><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">     volumes:
</span><span class="cx" style="display: block; padding: 0 10px">       - ./:/var/www
</span></span></pre>
</div>
</div>

</body>
</html>