Skip to content

PHP 8.6: Restore memcached and add debug images - #102

Merged
jakubboucek merged 11 commits into
masterfrom
update-php
Oct 13, 2026
Merged

jakubboucek merged 11 commits into
masterfrom
update-php

Conversation

@jakubboucek

@jakubboucek jakubboucek commented Oct 13, 2026 •

Copy link
Copy Markdown
Owner

PHP 8.6 RC images regain a working PIE installer and memcached extension, and gain a complete 8.6-rc-debug variant with Xdebug and SPX. Stable PHP image definitions remain unchanged.

  • Use current stable PIE (verified with 1.5.2) and memcached dev-master, which contains PHP 8.6 API fixes absent from 3.4.0.
  • Add Xdebug ^3.6@alpha (verified with 3.6.0alpha1) and SPX 0.5.x-dev, including debug build/tag/push steps and the test runner entry.
  • Use temporary SPX compiler flags and the bundled Dockerfile frontend for the debug build. Cleanup requirements are tracked in PHP 8.6: Complete the image set once upstream support lands #100; repository documentation retains build prerequisites only.

Compatibility decisions

  • PIE PHP 8.6 support landed in 1.5; an unstable PIE release is unnecessary. Refresh old cached assets before rebuilding with NO_PULL=1.
  • Stable memcached 3.4.0 failed to compile against PHP 8.6 APIs. Its development branch contains the required API fixes.
  • Xdebug 3.6.0alpha1 supports PHP 8.6. SPX support is on its v0.5 branch (upstream #349); stable 0.4.22 and dev-master did not support 8.6 during validation.
  • SPX's ZTS TLS declaration triggers an old-style-declaration warning under -Werror; -Wno-error=old-style-declaration keeps that warning non-fatal. Its strict C11 mode conflicts with typeof in PHP headers, so -Dtypeof=__typeof__ uses the equivalent GNU spelling. Separately, CI=true disables -march=native for portable amd64 images.
  • With Docker 29.8.2 / BuildKit 0.33.1 and the containerd image store, the external Dockerfile frontend resolved the published base instead of the newly built local image. The bundled frontend resolved the local base, so the debug Dockerfile omits the external syntax directive.

Validation

Original validation on PHP 8.6.0RC3, before the separate mbstring fix (#103):

  • Apache, CLI, and debug images built locally with NO_PUSH=1.
  • Nette Tester passed in all three images: 23 tests, one expected skip for the older PDO API.
  • Memcached data and session round trips, Xdebug trace generation, Apache extension loading, SPX web UI, and SPX HTTP profiling passed.
  • Shell syntax and whitespace checks passed. Images have not been published to Docker Hub.

Addresses the RC functionality items in #100; the stable transition remains outstanding. Follows #99.

The build smoke checks print loaded modules but do not enforce an expected inventory; functional extension tests may skip absent modules. The inventory checker is a separate php-test-ext follow-up, not part of this PR. Stable dependency selection, removal of RC compiler workarounds and release verification are tracked in #100.

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🟡 Changes recommended

The new smoke check does not enforce required extensions and cannot catch the documented stale-base regression.

1 open finding
What changed in this PR

Restores memcached for PHP 8.6 RC and adds the Xdebug/SPX debug image tracked by #100.

Changes:

  • Re-enables memcached using its development branch.
  • Adds build, tags, tests, and publishing for 8.6-rc-debug.
  • Documents temporary RC dependencies and compiler workarounds.
File Description
php/​Dockerfile-8.6 Restores memcached in the Apache image.
php/​Dockerfile-8.6-cli Restores memcached in the CLI image.
php/​Dockerfile-8.6-debug Adds the Xdebug/SPX debug image.
php/​build-php-8.6.sh Builds, tests, tags, and pushes debug images.
test-php.sh Adds the debug image to the test suite.
README.md Documents PHP 8.6 RC capabilities and tags.
build-notes.md Records temporary dependencies and cleanup requirements.
CLAUDE.md Updates project build and testing guidance.

🧠 Review effort: Balanced


💡 Add a code-review agent skill or configure MCP servers for context-aware, tailored reviews. Learn more in the docs.

Comment thread php/build-php-8.6.sh
Use stable NEON 3.4.8 and validate recursive conditions, exact exceptions and rule conflicts. Derive the variant from DEVSTACK_IMAGE and the version from PHP, without a profile allowlist. Report missing and unexpected modules without skipping the inventory check.

Validated rule behavior for future versions, nested conditions, exceptions and malformed data. Full suites passed in all 15 maintained image variants; negative container probes rejected wrong variants and missing identity. PhpStorm inspections reported no warnings.
Run all configured tags or one requested tag through test-php.sh, passing DEVSTACK_IMAGE and aggregating failures. Invoke the same suite from all maintained PHP build scripts before push, preserving NO_TEST. Mount tooling read-only and document the NEON contract; keep investigation notes ignored.

All ten real build test phases passed with NO_PULL=1 NO_BUILD=1 NO_PUSH=1. Mocked Docker checks confirmed that failed tests prevent any push, successful tests precede push, and NO_TEST bypass works. No images were rebuilt or published.
tests: enforce PHP extension inventories before publishing
@jakubboucek
jakubboucek merged commit 3e0fee8 into master Oct 13, 2026
@jakubboucek
jakubboucek deleted the update-php branch October 13, 2026 20:46
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants