From c002f76e52c7a80af962587cb8900eb4e4d07e8b Mon Sep 17 00:00:00 2001 From: Chris Huber Date: Mon, 9 Nov 2026 11:11:41 -0500 Subject: [PATCH 1/2] chore: require PHP 8.3 PHP 8.2 leaves security support on 2026-12-31 and is the slowest CI job. Both transformers now require PHP 8.3, CI tests 8.3 through 8.5, and the browser-proof steps that ran on the 8.2 job run on the 8.3 job. The recognizer scaling test no longer needs its PHP 8.2 exemption. --- .github/workflows/figma-transformer.yml | 2 +- .github/workflows/php-transformer.yml | 14 +++++++------- figma-transformer/composer.json | 4 ++-- figma-transformer/composer.lock | 6 +++--- figma-transformer/figma-transformer.php | 2 +- php-transformer/README.md | 2 +- php-transformer/composer.json | 4 ++-- php-transformer/composer.lock | 6 +++--- php-transformer/php-transformer.php | 2 +- .../tests/unit/recognizer-compilation-scaling.php | 4 +--- 10 files changed, 22 insertions(+), 24 deletions(-) diff --git a/.github/workflows/figma-transformer.yml b/.github/workflows/figma-transformer.yml index f26c70489..2b2099c40 100644 --- a/.github/workflows/figma-transformer.yml +++ b/.github/workflows/figma-transformer.yml @@ -19,7 +19,7 @@ jobs: strategy: fail-fast: false matrix: - php-version: ["8.2", "8.3", "8.4", "8.5"] + php-version: ["8.3", "8.4", "8.5"] defaults: run: diff --git a/.github/workflows/php-transformer.yml b/.github/workflows/php-transformer.yml index 9184403b9..9dbf5d132 100644 --- a/.github/workflows/php-transformer.yml +++ b/.github/workflows/php-transformer.yml @@ -27,7 +27,7 @@ jobs: strategy: fail-fast: false matrix: - php-version: ["8.2", "8.3", "8.4", "8.5"] + php-version: ["8.3", "8.4", "8.5"] defaults: run: @@ -249,7 +249,7 @@ jobs: strategy: fail-fast: false matrix: - php-version: ["8.2", "8.3", "8.4", "8.5"] + php-version: ["8.3", "8.4", "8.5"] services: mysql: image: mysql:8.0.36 @@ -296,12 +296,12 @@ jobs: WP_TESTS_DIR: ${{ runner.temp }}/wordpress-develop/tests/phpunit run: composer test:wordpress-integration - name: Setup Node for native document context proof - if: matrix.php-version == '8.2' + if: matrix.php-version == '8.3' uses: actions/setup-node@v4 with: node-version: "20" - name: Verify native document ancestor context in Chromium - if: matrix.php-version == '8.2' + if: matrix.php-version == '8.3' working-directory: php-transformer env: BODY_CONTEXT_WORDPRESS_BOOTSTRAP: ${{ runner.temp }}/wordpress-develop/tests/phpunit/includes/bootstrap.php @@ -313,7 +313,7 @@ jobs: php tests/contract/document-body-context.php PLAYWRIGHT_MODULE="$PWD/tools/visual-parity/node_modules/playwright/index.mjs" node tests/contract/document-body-context-browser.mjs - name: Verify disposable HTTP frontend and Gutenberg save/reload - if: matrix.php-version == '8.2' + if: matrix.php-version == '8.3' working-directory: php-transformer env: BODY_CONTEXT_DISPOSABLE: "1" @@ -339,7 +339,7 @@ jobs: php -S 127.0.0.1:19006 -t "$SITE" > "$RUNNER_TEMP/document-context-http/server.log" 2>&1 & PLAYWRIGHT_MODULE="$PWD/tools/visual-parity/node_modules/playwright/index.mjs" node tests/integration/document-body-context-browser.mjs - name: Verify authored carousel PHP and native save control contract - if: matrix.php-version == '8.2' + if: matrix.php-version == '8.3' working-directory: php-transformer env: BE_EDITOR_WP_URL: http://127.0.0.1:19006 @@ -354,7 +354,7 @@ jobs: export BE_EDITOR_POST_ID="$(php -r '$x=json_decode(file_get_contents($argv[1]),true); echo $x["post_id"];' "$BE_EDITOR_EVIDENCE_DIR/carousel-control-page.json")" node tests/carousel-control-acceptance.mjs - name: Retain document context runtime evidence - if: always() && matrix.php-version == '8.2' + if: always() && matrix.php-version == '8.3' uses: actions/upload-artifact@v4 with: name: document-context-runtime diff --git a/figma-transformer/composer.json b/figma-transformer/composer.json index 151cf2f0e..ae93613cb 100644 --- a/figma-transformer/composer.json +++ b/figma-transformer/composer.json @@ -30,7 +30,7 @@ } }, "require": { - "php": ">=8.2" + "php": ">=8.3" }, "suggest": { "ext-zstd": "Decode zstd-compressed canvas.fig chunks when inspecting .fig archives.", @@ -48,7 +48,7 @@ }, "config": { "platform": { - "php": "8.2.0" + "php": "8.3.0" }, "sort-packages": true }, diff --git a/figma-transformer/composer.lock b/figma-transformer/composer.lock index 8e22e7c7f..582a6745a 100644 --- a/figma-transformer/composer.lock +++ b/figma-transformer/composer.lock @@ -4,7 +4,7 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "content-hash": "e8605bdd598fefe0e4abccc057f20e4d", + "content-hash": "c6403ce0a831a8bd25b6e8aed63f4bb1", "packages": [], "packages-dev": [], "aliases": [], @@ -13,11 +13,11 @@ "prefer-stable": false, "prefer-lowest": false, "platform": { - "php": ">=8.2" + "php": ">=8.3" }, "platform-dev": {}, "platform-overrides": { - "php": "8.2.0" + "php": "8.3.0" }, "plugin-api-version": "2.9.0" } diff --git a/figma-transformer/figma-transformer.php b/figma-transformer/figma-transformer.php index 1fad32a1f..6099797bd 100644 --- a/figma-transformer/figma-transformer.php +++ b/figma-transformer/figma-transformer.php @@ -4,7 +4,7 @@ * Plugin URI: https://github.com/Automattic/blocks-engine/tree/trunk/figma-transformer * Description: PHP primitives for transforming Figma designs into static HTML website artifacts. * Version: 0.3.0 - * Requires PHP: 8.2 + * Requires PHP: 8.3 * Author: Automattic * License: GPL-3.0-or-later * Text Domain: blocks-engine-figma-transformer diff --git a/php-transformer/README.md b/php-transformer/README.md index 2d96d4daf..0d3a34500 100644 --- a/php-transformer/README.md +++ b/php-transformer/README.md @@ -258,7 +258,7 @@ If the first release is only available as a Blocks Engine monorepo archive, down } }, "require": { - "php": ">=8.2", + "php": ">=8.3", "league/commonmark": "^2.5", "league/html-to-markdown": "^5.1" } diff --git a/php-transformer/composer.json b/php-transformer/composer.json index 9cab0cded..c10bcdb71 100644 --- a/php-transformer/composer.json +++ b/php-transformer/composer.json @@ -35,7 +35,7 @@ "require": { "league/commonmark": "^2.5", "league/html-to-markdown": "^5.1", - "php": ">=8.2", + "php": ">=8.3", "ext-mbstring": "*" }, "scripts": { @@ -1380,7 +1380,7 @@ "config": { "cache-dir": "var/cache/composer", "platform": { - "php": "8.2.0" + "php": "8.3.0" }, "sort-packages": true }, diff --git a/php-transformer/composer.lock b/php-transformer/composer.lock index ca842a3ef..8e73e5e78 100644 --- a/php-transformer/composer.lock +++ b/php-transformer/composer.lock @@ -4,7 +4,7 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "content-hash": "ff8ca3a453151a9d276273e86e5f4d3d", + "content-hash": "5b1eea98f66f87a98a706e6c6f4e6cad", "packages": [ { "name": "dflydev/dot-access-data", @@ -2774,12 +2774,12 @@ "prefer-stable": false, "prefer-lowest": false, "platform": { - "php": ">=8.2", + "php": ">=8.3", "ext-mbstring": "*" }, "platform-dev": {}, "platform-overrides": { - "php": "8.2.0" + "php": "8.3.0" }, "plugin-api-version": "2.9.0" } diff --git a/php-transformer/php-transformer.php b/php-transformer/php-transformer.php index d2a76f65a..2b7e053c7 100644 --- a/php-transformer/php-transformer.php +++ b/php-transformer/php-transformer.php @@ -4,7 +4,7 @@ * Plugin URI: https://github.com/Automattic/blocks-engine/tree/trunk/php-transformer * Description: Canonical PHP primitives for transforming HTML, Markdown, and website artifacts into WordPress block outputs. * Version: 0.45.382 - * Requires PHP: 8.2 + * Requires PHP: 8.3 * Author: Automattic * License: GPL-3.0-or-later * Text Domain: blocks-engine-php-transformer diff --git a/php-transformer/tests/unit/recognizer-compilation-scaling.php b/php-transformer/tests/unit/recognizer-compilation-scaling.php index 767d2013c..79a621bea 100644 --- a/php-transformer/tests/unit/recognizer-compilation-scaling.php +++ b/php-transformer/tests/unit/recognizer-compilation-scaling.php @@ -36,9 +36,7 @@ function recognizerPage(int $count): string if ($expected[$n] !== $hash) throw new RuntimeException('Recognizer output changed for ' . $n . ' sections: ' . $hash); printf("%d sections: %.3fs; hash %s\n", $n, $times[$n], $hash); } -// PHP 8.2 walks a DOMNodeList quadratically, so every whole-document scan -// grows with page size there regardless of recognizer reuse. -if (PHP_VERSION_ID >= 80300 && $times[128] / 128 > 2.0 * $times[8] / 8) { +if ($times[128] / 128 > 2.0 * $times[8] / 8) { throw new RuntimeException('Recognizer per-section cost grew superlinearly: ' . json_encode($times)); } fwrite(STDOUT, "Recognizer compile scaling regression passed.\n"); From d54ecdcdadb9e4ec13877d35cf09527cec38a01d Mon Sep 17 00:00:00 2001 From: Chris Huber Date: Mon, 9 Nov 2026 11:31:49 -0500 Subject: [PATCH 2/2] ci: run the solved-site gate at the SSI commit that requires PHP 8.3 --- .github/workflows/solved-fixture-regression.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/solved-fixture-regression.yml b/.github/workflows/solved-fixture-regression.yml index a8c1c15f8..980f7c69e 100644 --- a/.github/workflows/solved-fixture-regression.yml +++ b/.github/workflows/solved-fixture-regression.yml @@ -20,8 +20,8 @@ permissions: jobs: solved-site-promotion: - uses: Automattic/static-site-importer/.github/workflows/solved-site-promotion.yml@29400db19708f95e8e231712ebbef0a138d9b9d2 + uses: Automattic/static-site-importer/.github/workflows/solved-site-promotion.yml@676f303261f932f7ff3726167f5b8ee22fd29802 with: - static-site-importer-sha: 29400db19708f95e8e231712ebbef0a138d9b9d2 + static-site-importer-sha: 676f303261f932f7ff3726167f5b8ee22fd29802 blocks-engine-sha: ${{ github.event.pull_request.head.sha || github.sha }} blocks-engine-repository: ${{ github.event.pull_request.head.repo.full_name || github.repository }}