<!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>[57218] trunk: Build/Test Tools: Make the install testing workflow more flexible.</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/57218">57218</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/57218","name":"Review Commit"}}</script></dd>
<dt style="float: left; width: 6em; font-weight: bold">Author</dt> <dd>desrosj</dd>
<dt style="float: left; width: 6em; font-weight: bold">Date</dt> <dd>2023-12-22 00:58:26 +0000 (Fri, 22 Dec 2023)</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: Make the install testing workflow more flexible.

In <a href="https://core.trac.wordpress.org/changeset/56661">[56661]</a>, a new GitHub Actions workflow was introduced that focused on running some minimal installation tests for a version of WordPress for every PHP and MySQL combination.

This workflow has tested well, but lacks flexibility and possesses one flaw: tests are only ever performed with currently supported versions, even if the version being tested had a different support policy.

This updates the workflow to be more flexible, allowing all versions of WordPress currently receiving security fixes (back through 4.1) to be tested under the correct support policy.

Additionally, the workflow can now run against the `nightly` build of WordPress. This replaces `latest` as the new default. This allows the tests to be run at any point during a release cycle without the need for an officially tagged version.

Props jorbin, joemcgill, costdev.
See <a href="https://core.trac.wordpress.org/ticket/58977">#58977</a>.</pre>

<h3>Modified Paths</h3>
<ul>
<li><a href="#trunkgithubworkflowsinstalltestingyml">trunk/.github/workflows/install-testing.yml</a></li>
</ul>

<h3>Added Paths</h3>
<ul>
<li><a href="#trunkversionsupportmysqljson">trunk/.version-support-mysql.json</a></li>
<li><a href="#trunkversionsupportphpjson">trunk/.version-support-php.json</a></li>
</ul>

</div>
<div id="patch">
<h3>Diff</h3>
<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       2023-12-21 20:01:15 UTC (rev 57217)
+++ trunk/.github/workflows/install-testing.yml 2023-12-22 00:58:26 UTC (rev 57218)
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -1,3 +1,6 @@
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+# Confirms that installing WordPress using WP-CLI works successfully.
+#
+# This workflow is not meant to test wordpress-develop checkouts, but rather tagged versions officially available on WordPress.org.
</ins><span class="cx" style="display: block; padding: 0 10px"> name: Installation Tests
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px"> on:
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -11,18 +14,20 @@
</span><span class="cx" style="display: block; padding: 0 10px">     # Always test the workflow when changes are suggested.
</span><span class="cx" style="display: block; padding: 0 10px">     paths:
</span><span class="cx" style="display: block; padding: 0 10px">       - '.github/workflows/install-testing.yml'
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+  schedule:
+    - cron: '0 0 * * 1'
</ins><span class="cx" style="display: block; padding: 0 10px">   workflow_dispatch:
</span><span class="cx" style="display: block; padding: 0 10px">     inputs:
</span><span class="cx" style="display: block; padding: 0 10px">       wp-version:
</span><span class="cx" style="display: block; padding: 0 10px">         description: 'The version to test installing. Accepts major and minor versions, "latest", or "nightly". Major releases must not end with ".0".'
</span><span class="cx" style="display: block; padding: 0 10px">         type: string
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-        default: 'latest'
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+        default: 'nightly'
</ins><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px"> # Cancels all previous workflow runs for pull requests that have not completed.
</span><span class="cx" style="display: block; padding: 0 10px"> concurrency:
</span><span class="cx" style="display: block; padding: 0 10px">   # The concurrency group contains the workflow name and the branch name for pull requests
</span><span class="cx" style="display: block; padding: 0 10px">   # or the commit hash for any other events.
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-  group: ${{ github.workflow }}-${{ github.event_name == 'pull_request' && github.head_ref || github.sha }}
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+  group: ${{ github.workflow }}-${{ inputs.wp-version || github.event_name == 'pull_request' && github.head_ref || github.sha }}
</ins><span class="cx" style="display: block; padding: 0 10px">   cancel-in-progress: true
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px"> # Disable permissions for all available scopes by default.
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -30,6 +35,60 @@
</span><span class="cx" style="display: block; padding: 0 10px"> permissions: {}
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px"> jobs:
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+  # Determines the appropriate values for PHP and database versions based on the WordPress version being tested.
+  #
+  # Performs the following steps:
+  # - Checks out the repository.
+  # - Fetches the versions of PHP to test.
+  # - Fetches the versions of MySQL to test.
+  build-matrix:
+    name: Determine PHP Versions to test
+    runs-on: ubuntu-latest
+    timeout-minutes: 5
+    outputs:
+      major-wp-version: ${{ steps.major-wp-version.outputs.version }}
+      php-versions: ${{ steps.php-versions.outputs.versions }}
+      mysql-versions: ${{ steps.mysql-versions.outputs.versions }}
+
+    steps:
+      - name: Checkout repository
+        uses: actions/checkout@3df4ab11eba7bda6032a0b82a6bb43b11571feac # v4.0.0
+        with:
+          show-progress: ${{ runner.debug == '1' && 'true' || 'false' }}
+
+      - name: Determine the major WordPress version
+        id: major-wp-version
+        run: |
+          if [ "${{ inputs.wp-version }}" ] && [ "${{ inputs.wp-version }}" != "nightly" ] && [ "${{ inputs.wp-version }}" != "latest" ]; then
+            echo "version=$(echo "${{ inputs.wp-version }}" | tr '.' '-' | cut -d '-' -f1-2)" >> $GITHUB_OUTPUT
+          elif [ "${{ inputs.wp-version }}" ]; then
+            echo "version=$(echo "${{ inputs.wp-version }}")" >> $GITHUB_OUTPUT
+          else
+            echo "version=nightly" >> $GITHUB_OUTPUT
+          fi
+
+      # Look up the major version's specific PHP support policy when a version is provided.
+      # Otherwise, use the current PHP support policy.
+      - name: Get supported PHP versions
+        id: php-versions
+        run: |
+          if [ "${{ steps.major-wp-version.outputs.version }}" != "latest" ] && [ "${{ steps.major-wp-version.outputs.version }}" != "nightly" ]; then
+            echo "versions=$(jq -r '.["${{ steps.major-wp-version.outputs.version }}"] | @json' .version-support-php.json)" >> $GITHUB_OUTPUT
+          else
+            echo "versions=$(jq -r '.[ (keys[-1]) ] | @json' .version-support-php.json)" >> $GITHUB_OUTPUT
+          fi
+
+      # Look up the major version's specific MySQL support policy when a version is provided.
+      # Otherwise, use the current MySQL support policy.
+      - name: Get supported MySQL versions
+        id: mysql-versions
+        run: |
+          if [ "${{ steps.major-wp-version.outputs.version }}" != "latest" ] && [ "${{ steps.major-wp-version.outputs.version }}" != "nightly" ]; then
+            echo "versions=$(jq -r '.["${{ steps.major-wp-version.outputs.version }}"] | @json' .version-support-mysql.json)" >> $GITHUB_OUTPUT
+          else
+            echo "versions=$(jq -r '.[ (keys[-1]) ] | @json' .version-support-mysql.json)" >> $GITHUB_OUTPUT
+          fi
+
</ins><span class="cx" style="display: block; padding: 0 10px">   # Test the WordPress installation process through WP-CLI.
</span><span class="cx" style="display: block; padding: 0 10px">   #
</span><span class="cx" style="display: block; padding: 0 10px">   # Performs the following steps:
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -39,26 +98,44 @@
</span><span class="cx" style="display: block; padding: 0 10px">   # - Creates a `wp-config.php` file.
</span><span class="cx" style="display: block; padding: 0 10px">   # - Installs WordPress.
</span><span class="cx" style="display: block; padding: 0 10px">   install-tests-mysql:
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-    name: WP ${{ inputs.wp-version || 'latest' }} / PHP ${{ matrix.php }} / ${{ 'mariadb' == matrix.db-type && 'MariaDB' || 'MySQL' }} ${{ matrix.db-version }}${{ matrix.multisite && ' multisite' || '' }}
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+    name: WP ${{ inputs.wp-version || 'nightly' }} / PHP ${{ matrix.php }} / ${{ 'mariadb' == matrix.db-type && 'MariaDB' || 'MySQL' }} ${{ matrix.db-version }}${{ matrix.multisite && ' multisite' || '' }}
</ins><span class="cx" style="display: block; padding: 0 10px">     permissions:
</span><span class="cx" style="display: block; padding: 0 10px">       contents: read
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-    runs-on: ubuntu-latest
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+    runs-on: ${{ matrix.os }}
</ins><span class="cx" style="display: block; padding: 0 10px">     timeout-minutes: 10
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+    needs: [ build-matrix ]
</ins><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="cx" style="display: block; padding: 0 10px">         os: [ ubuntu-latest ]
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-        php: [ '7.0', '7.1', '7.2', '7.3', '7.4', '8.0', '8.1', '8.2', '8.3' ]
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+        php: ${{ fromJSON( needs.build-matrix.outputs.php-versions ) }}
</ins><span class="cx" style="display: block; padding: 0 10px">         db-type: [ 'mysql' ]
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-        db-version: [ '5.7', '8.0' ]
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+        db-version: ${{ fromJSON( needs.build-matrix.outputs.mysql-versions ) }}
</ins><span class="cx" style="display: block; padding: 0 10px">         multisite: [ false, true ]
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+        memcached: [ false ]
</ins><span class="cx" style="display: block; padding: 0 10px"> 
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+        # Exclude some PHP and MySQL versions that cannot currently be tested with Docker containers.
+        exclude:
+          - php: '5.2'
+          - php: '5.3'
+          - db-version: '5.0'
+          - db-version: '5.1'
+          - db-version: '5.5'
+
</ins><span class="cx" style="display: block; padding: 0 10px">     services:
</span><span class="cx" style="display: block; padding: 0 10px">       database:
</span><span class="cx" style="display: block; padding: 0 10px">         image: ${{ matrix.db-type }}:${{ matrix.db-version }}
</span><span class="cx" style="display: block; padding: 0 10px">         ports:
</span><span class="cx" style="display: block; padding: 0 10px">           - 3306
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-        options: --health-cmd="mysqladmin ping" --health-interval=30s --health-timeout=10s --health-retries=5 -e MYSQL_ROOT_PASSWORD=root -e MYSQL_DATABASE=test_db --entrypoint sh ${{ matrix.db-type }}:${{ matrix.db-version }} -c "exec docker-entrypoint.sh mysqld --default-authentication-plugin=mysql_native_password"
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+        options: >-
+          --health-cmd="mysqladmin ping"
+          --health-interval=30s
+          --health-timeout=10s
+          --health-retries=5
+          -e MYSQL_ROOT_PASSWORD=root
+          -e MYSQL_DATABASE=test_db
+          --entrypoint sh ${{ matrix.db-type }}:${{ matrix.db-version }}
+          -c "exec docker-entrypoint.sh mysqld${{ matrix.db-version != '5.5' && ' --default-authentication-plugin=mysql_native_password"' || '' }}
</ins><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">     steps:
</span><span class="cx" style="display: block; padding: 0 10px">       - name: Set up PHP ${{ matrix.php }}
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -66,7 +143,7 @@
</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
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+          tools: wp-cli${{ contains( fromJSON('["5.4", "5.5"]'), matrix.php ) && ':2.4.0' || '' }}
</ins><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">       - name: Start the database server
</span><span class="cx" style="display: block; padding: 0 10px">         run: |
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -73,7 +150,7 @@
</span><span class="cx" style="display: block; padding: 0 10px">           sudo systemctl start ${{ matrix.db-type }}
</span><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 && 'latest' != inputs.wp-version && format( '--version={0}', inputs.wp-version ) || '' }}
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+        run: wp core download ${{ inputs.wp-version && format( '--version={0}', inputs.wp-version ) || '--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><span class="cx" style="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'] }}
</span></span></pre></div>
<a id="trunkversionsupportmysqljson"></a>
<div class="addfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Added: trunk/.version-support-mysql.json</h4>
<pre class="diff"><span>
<span class="info" style="display: block; padding: 0 10px; color: #888">--- trunk/.version-support-mysql.json                         (rev 0)
+++ trunk/.version-support-mysql.json   2023-12-22 00:58:26 UTC (rev 57218)
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -0,0 +1,188 @@
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+{
+       "6-5": [
+               "8.2",
+               "8.0",
+               "5.7",
+               "5.6",
+               "5.5"
+       ],
+       "6-4": [
+               "8.0",
+               "5.7",
+               "5.6",
+               "5.5",
+               "5.1",
+               "5.0"
+       ],
+       "6-3": [
+               "8.0",
+               "5.7",
+               "5.6",
+               "5.5",
+               "5.1",
+               "5.0"
+       ],
+       "6-2": [
+               "8.0",
+               "5.7",
+               "5.6",
+               "5.5",
+               "5.1",
+               "5.0"
+       ],
+       "6-1": [
+               "8.0",
+               "5.7",
+               "5.6",
+               "5.5",
+               "5.1",
+               "5.0"
+       ],
+       "6-0": [
+               "8.0",
+               "5.7",
+               "5.6",
+               "5.5",
+               "5.1",
+               "5.0"
+       ],
+       "5-9": [
+               "8.0",
+               "5.7",
+               "5.6",
+               "5.5",
+               "5.1",
+               "5.0"
+       ],
+       "5-8": [
+               "8.0",
+               "5.7",
+               "5.6",
+               "5.5",
+               "5.1",
+               "5.0"
+       ],
+       "5-7": [
+               "8.0",
+               "5.7",
+               "5.6",
+               "5.5",
+               "5.1",
+               "5.0"
+       ],
+       "5-6": [
+               "8.0",
+               "5.7",
+               "5.6",
+               "5.5",
+               "5.1",
+               "5.0"
+       ],
+       "5-5": [
+               "8.0",
+               "5.7",
+               "5.6",
+               "5.5",
+               "5.1",
+               "5.0"
+       ],
+       "5-4": [
+               "8.0",
+               "5.7",
+               "5.6",
+               "5.5",
+               "5.1",
+               "5.0"
+       ],
+       "5-3": [
+               "8.0",
+               "5.7",
+               "5.6",
+               "5.5",
+               "5.1",
+               "5.0"
+       ],
+       "5-2": [
+               "8.0",
+               "5.7",
+               "5.6",
+               "5.5",
+               "5.1",
+               "5.0"
+       ],
+       "5-1": [
+               "5.7",
+               "5.6",
+               "5.5"
+       ],
+       "5-0": [
+               "5.7",
+               "5.6",
+               "5.5",
+               "5.1",
+               "5.0"
+       ],
+       "4-9": [
+               "5.7",
+               "5.6",
+               "5.5",
+               "5.1",
+               "5.0"
+       ],
+       "4-8": [
+               "5.7",
+               "5.6",
+               "5.5",
+               "5.1",
+               "5.0"
+       ],
+       "4-7": [
+               "5.7",
+               "5.6",
+               "5.5",
+               "5.1",
+               "5.0"
+       ],
+       "4-6": [
+               "5.7",
+               "5.6",
+               "5.5",
+               "5.1",
+               "5.0"
+       ],
+       "4-5": [
+               "5.7",
+               "5.6",
+               "5.5",
+               "5.1",
+               "5.0"
+       ],
+       "4-4": [
+               "5.7",
+               "5.6",
+               "5.5",
+               "5.1",
+               "5.0"
+       ],
+       "4-3": [
+               "5.7",
+               "5.6",
+               "5.5",
+               "5.1",
+               "5.0"
+       ],
+       "4-2": [
+               "5.7",
+               "5.6",
+               "5.5",
+               "5.1",
+               "5.0"
+       ],
+       "4-1": [
+               "5.7",
+               "5.6",
+               "5.5",
+               "5.1",
+               "5.0"
+       ]
+}
</ins></span></pre></div>
<a id="trunkversionsupportphpjson"></a>
<div class="addfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Added: trunk/.version-support-php.json</h4>
<pre class="diff"><span>
<span class="info" style="display: block; padding: 0 10px; color: #888">--- trunk/.version-support-php.json                           (rev 0)
+++ trunk/.version-support-php.json     2023-12-22 00:58:26 UTC (rev 57218)
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -0,0 +1,208 @@
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+{
+       "6-3": [
+               "7.0",
+               "7.1",
+               "7.2",
+               "7.3",
+               "7.4",
+               "8.0",
+               "8.1",
+               "8.2",
+               "8.3"
+       ],
+       "6-2": [
+               "5.6",
+               "7.0",
+               "7.1",
+               "7.2",
+               "7.3",
+               "7.4",
+               "8.0",
+               "8.1",
+               "8.2"
+       ],
+       "6-1": [
+               "5.6",
+               "7.0",
+               "7.1",
+               "7.2",
+               "7.3",
+               "7.4",
+               "8.0",
+               "8.1",
+               "8.2"
+       ],
+       "6-0": [
+               "5.6",
+               "7.0",
+               "7.1",
+               "7.2",
+               "7.3",
+               "7.4",
+               "8.0",
+               "8.1"
+       ],
+       "5-9": [
+               "5.6",
+               "7.0",
+               "7.1",
+               "7.2",
+               "7.3",
+               "7.4",
+               "8.0",
+               "8.1"
+       ],
+       "5-8": [
+               "5.6",
+               "7.0",
+               "7.1",
+               "7.2",
+               "7.3",
+               "7.4",
+               "8.0"
+       ],
+       "5-7": [
+               "5.6",
+               "7.0",
+               "7.1",
+               "7.2",
+               "7.3",
+               "7.4",
+               "8.0"
+       ],
+       "5-6": [
+               "5.6",
+               "7.0",
+               "7.1",
+               "7.2",
+               "7.3",
+               "7.4",
+               "8.0"
+       ],
+       "5-5": [
+               "5.6",
+               "7.0",
+               "7.1",
+               "7.2",
+               "7.3",
+               "7.4"
+       ],
+       "5-4": [
+               "5.6",
+               "7.0",
+               "7.1",
+               "7.2",
+               "7.3",
+               "7.4"
+       ],
+       "5-3": [
+               "5.6",
+               "7.0",
+               "7.1",
+               "7.2",
+               "7.3",
+               "7.4"
+       ],
+       "5-2": [
+               "5.6",
+               "7.0",
+               "7.1",
+               "7.2",
+               "7.3"
+       ],
+       "5-1": [
+               "5.2",
+               "5.3",
+               "5.4",
+               "5.5",
+               "5.6",
+               "7.0",
+               "7.1",
+               "7.2",
+               "7.3"
+       ],
+       "5-0": [
+               "5.2",
+               "5.3",
+               "5.4",
+               "5.5",
+               "5.6",
+               "7.0",
+               "7.1",
+               "7.2",
+               "7.3"
+       ],
+       "4-9": [
+               "5.2",
+               "5.3",
+               "5.4",
+               "5.5",
+               "5.6",
+               "7.0",
+               "7.1",
+               "7.2"
+       ],
+       "4-8": [
+               "5.2",
+               "5.3",
+               "5.4",
+               "5.5",
+               "5.6",
+               "7.0",
+               "7.1"
+       ],
+       "4-7": [
+               "5.2",
+               "5.3",
+               "5.4",
+               "5.5",
+               "5.6",
+               "7.0",
+               "7.1"
+       ],
+       "4-6": [
+               "5.2",
+               "5.3",
+               "5.4",
+               "5.5",
+               "5.6",
+               "7.0"
+       ],
+       "4-5": [
+               "5.2",
+               "5.3",
+               "5.4",
+               "5.5",
+               "5.6",
+               "7.0"
+       ],
+       "4-4": [
+               "5.2",
+               "5.3",
+               "5.4",
+               "5.5",
+               "5.6",
+               "7.0"
+       ],
+       "4-3": [
+               "5.2",
+               "5.3",
+               "5.4",
+               "5.5",
+               "5.6"
+       ],
+       "4-2": [
+               "5.2",
+               "5.3",
+               "5.4",
+               "5.5",
+               "5.6"
+       ],
+       "4-1": [
+               "5.2",
+               "5.3",
+               "5.4",
+               "5.5",
+               "5.6"
+       ]
+}
</ins></span></pre>
</div>
</div>

</body>
</html>