Repository navigation
Migrate to PHP 8.4.27 - #158
Merged
Merged
Conversation
str_getcsv() must receive its escape argument explicitly in PHP 8.4, rss.php could pass a NULL slug to rawurlencode() (deprecated since 8.1), and the azure theme used the __ prefix PHP reserves for itself. All changes run unchanged on PHP 7.4, which preprod keeps until its own runtime switch. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
php:7.4-apache is Debian 11, whose security mirror is gone, and PHP 7.4 has been end-of-life since 2022. The image, the e2e stack and the workflows now use PHP 8.4.27 (supported until the end of 2028). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This was referenced Oct 21, 2026
The decks API image of the e2e stack is built from a pinned commit but on the latest FrankenPHP base, whose Mercure now refuses publisher_jwt / subscriber_jwt outside compatibility mode: the container exits at start and the Playwright job fails before any test, whatever the PHP version. Same setting as preprod (#131). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
julesduroux
approved these changes
Oct 21, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Why
PHP 7.4 has been end-of-life since November 2022, and its Docker image is Debian 11 (bullseye), whose security mirror is gone since August 2026 — the image only builds thanks to a
sedhack. PHP 8.4 is supported until 31 Dec 2028 (8.2 ends 31 Dec 2026), so we go straight to PHP 8.4.27 (php:8.4.27-apache, Debian 13 trixie).Prod switches first, then preprod. This PR only changes the code/CI/docs side; the runtime switch is done in AlteredOps.
What changes
equinox-deck-importDeckParser: passstr_getcsv()'s escape argument explicitly (8.4 deprecation; same behaviour as before).pages/rss.php: guard a NULLnews.slugbeforerawurlencode()(8.1 deprecation).__nav_href/__nav_active→acNavHref/acNavActive(the__prefix is reserved by PHP).CurlDeckApiClient: docblocks accept\CurlHandle(no code change).FROM php:8.4.27-apache, bullseye-security workaround removed. This image is used by the local compose, the e2e stack and the Aspire dev env.deploy.yml(front bundle build) andplugins-ci.yml(lint, tests, e2e) on PHP 8.4.docker-compose.stack.ymlgives the decks APIMERCURE_EXTRA_DIRECTIVES: "protocol_version_compatibility 8", as preprod already does (Re:Builder: keep unique illustrations, fix collection and digital ownership searches #131). Without it the decks API container (built on the latest FrankenPHP base) exits at start and the Playwright job fails before any test, whatever the PHP version — it was red on this PR for that reason only.What does not change
Rollout order (merging = deploying)
main: deploy.yml pushes the code to prod, which still runs PHP 7.4 — the code is 7.4-compatible, nothing changes at runtime.How it was verified
php -lon all PHP files under 8.4; touched files also under 7.4 (php:7.4-cli). PHPCompatibility (testVersion 8.4): only the 2 known false positives left.tests/run.php96/96, core-altered-cards 70/70, equinox-deck-import 21/21 on both 7.4 and 8.4 (the equinox suite emitted 6str_getcsvdeprecations on 8.4 before the fix, 0 after).web_src,sql/bootstrap.php): public pages, 7 plugins activated, admin logged in, deck image drawn by GD (fr/en), migrations over SSH in the sidecar — 0 Deprecated/Warning/Fatal.🤖 Generated with Claude Code