Skip to content

Build Linux ZTS turbo binaries for PHP 8.3-8.5 too - #6706

Merged
ondrejmirtes merged 1 commit into
2.3.xfrom
turbo-linux-zts
Oct 8, 2026
Merged

ondrejmirtes merged 1 commit into
2.3.xfrom
turbo-linux-zts

Conversation

@ondrejmirtes

@ondrejmirtes ondrejmirtes commented Oct 8, 2026 •

Copy link
Copy Markdown
Member

Thread-safe PHP on Linux before 8.6 has had no turbo binary since the Linux ZTS legs were retired. That leaves out the php:*-zts Docker images (the base of FrankenPHP's), and musl ZTS 8.3–8.5 never had one at all. With the shared core (#6703) a ZTS leg only compiles the per-version shim and links it against the platform's existing core, so every Linux target now builds both variants for every minor:

8.3 8.4 8.5 8.6
linux-gnu-x86_64 NTS + ZTS NTS + ZTS NTS + ZTS NTS + ZTS
linux-gnu-arm64 NTS + ZTS NTS + ZTS NTS + ZTS NTS + ZTS
linux-musl-x86_64 NTS + ZTS NTS + ZTS NTS + ZTS NTS + ZTS
linux-musl-arm64 NTS + ZTS NTS + ZTS NTS + ZTS NTS + ZTS

That's 12 new binaries (bold), each a thin extension of at most ~130 KB, since they reuse the existing cores. macOS stays NTS-only.

  • build-php.sh no longer pins tarballs. At build time it resolves the newest release of the requested minor from php.net and verifies the download against the published sha256. It uses the releases API, or for a minor without a stable release yet (8.6 today) the <minor>.0 entry of the pre-release API. The weekly image rebuild and the musl legs therefore follow new patch releases and release candidates on their own; 8.6 moves from RC2 to today's RC3. turbo-build-image.yml publishes gnu-php8.3-zts, gnu-php8.4-zts and gnu-php8.5-zts (built from this branch with workflow_dispatch, so this PR's run can pull them). The musl ZTS legs build the same release in Alpine, as they already did for 8.6.
  • turbo-compile and turbo-compile-musl-arm64 get a ts matrix dimension instead of 8.6-only include entries.
  • turbo-differential runs the gnu ZTS legs in their build image, and turbo-differential-musl runs every musl ZTS leg.
  • turbo-docker-run loads the 8.5 ZTS binaries into the official php:8.5-zts-bookworm and php:8.5-zts-alpine images.
  • TURBO_RETIRED_BINARIES is empty again. Otherwise the commit job would delete the binaries this brings back.

🤖 Generated with Claude Code

https://claude.ai/code/session_01LSeeJXEA18Ma6X4qyx1xMx

Closes phpstan/phpstan#15422

Thread-safe PHP on Linux before 8.6 got no binary since the Linux ZTS
legs were retired: the php:*-zts Docker images (the base of FrankenPHP)
and the musl variants never had one. With the shared core a ZTS leg only
compiles the per-version shim, so every Linux target now builds both
variants for every minor.

- build-php.sh builds the newest release of the minor, resolved from
  php.net at build time (the releases API, or the pre-release one for a
  minor without a stable release yet, like 8.6) and verified against the
  published sha256, instead of a pinned tarball, so the weekly image
  rebuild and the musl legs follow new patch releases and release
  candidates on their own; turbo-build-image.yml publishes
  gnu-php8.3-zts, gnu-php8.4-zts and gnu-php8.5-zts
- turbo-compile and turbo-compile-musl-arm64 gain a ts dimension instead
  of 8.6-only include entries; macOS stays NTS-only
- turbo-differential runs the gnu ZTS legs in their build image,
  turbo-differential-musl every musl ZTS leg
- turbo-docker-run loads the 8.5 ZTS binaries into php:8.5-zts-bookworm
  and php:8.5-zts-alpine
- TURBO_RETIRED_BINARIES is empty again

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01LSeeJXEA18Ma6X4qyx1xMx
@ondrejmirtes
ondrejmirtes merged commit 9bd33f6 into 2.3.x Oct 8, 2026
264 checks passed
@ondrejmirtes
ondrejmirtes deleted the turbo-linux-zts branch October 8, 2026 16:47
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.

Turbo extension not loaded in ZTS builds

1 participant