Repository navigation
ci: generate the linux engine definitions natively instead of through docker - #292
Merged
Merged
Conversation
… docker The linux `header-drift` job regenerated `include/8.6/linux-x64-*` inside the official docker image, and for PHP 8.6 that produced a diff nobody could commit: docker-library ships the pre-release `php:8.6-rc-cli` image as a ZTS build (there is no nts variant), so the nts target silently came out as a ZTS artifact - and the job stayed red on every pull request against master. Move the linux artifacts to the same model the darwin and windows ones already use: `header-drift` becomes an nts/zts matrix that runs `generate.php --native` on the runner's setup-php build (the same build the tests run on) and diffs the leg's own directory, with the canonical nts leg also diffing `stubs/` and `.phpstorm.meta.php`. A new dispatchable "Generate linux headers" workflow refreshes and commits the artifacts the same way the darwin/windows workflows do, so a stale branch can be repaired without docker. The docker path (`composer gen-headers`) stays the local developer tool, but now builds into a staging directory and refuses an image whose thread-safety mode does not match the target instead of writing a ZTS layout under an nts name. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01VLQcsvgdQUzwBFsoKUAcG2
6 tasks done
master's own tree no longer passes `composer phpstan` with the PHPStan 2.3 the unlocked dev dependencies resolve to today: five findings in three test files. The 8.5 branch already carries the fixes (3843b85, b807faa) and they reach master with the pending cascade (#289); this ports the same three-file change so this PR's CI is green now. It no-ops once the cascade merges. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01VLQcsvgdQUzwBFsoKUAcG2
lisachenko
marked this pull request as ready for review
October 10, 2026 19:00
This was referenced Oct 10, 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.
What this changes
Unblocks the linux
header-driftjob that is red on every pull request againstmaster(last seen on #289).The job regenerated
include/8.6/linux-x64-*inside the official docker image. For PHP 8.6 that produces a diff nobody can commit: docker-library ships the pre-releasephp:8.6-rc-cliimage as a ZTS build (there is no nts variant), so the nts target silently came out as a ZTS artifact (TSRM symbols, ZTS layouts) under the nts name.header-driftbecomes an nts/zts matrix that runsgenerate.php --nativeon the runner's setup-php build (the same build the tests jobs run on) and diffs the leg's own directory. The canonical nts leg also diffsstubs/and.phpstorm.meta.php. This is the same model the darwin and windows drift jobs already use..github/workflows/generate-linux-headers.yml), mirroring the darwin/windows ones: regenerates both legs natively, uploads the artifacts (plus the stubs from the nts leg) and commits them to the branch in one commit. It also triggers on pull requests touching the generator, so it ran on this PR and refreshed the 8.6 linux artifacts here (ZEND_MODULE_API_NO20260924 and the fourvm_stack_page_cache*executor-globals fields); the darwin workflow refreshed the darwin artifacts the same way (identical to the ones on merge: cascade 8.5 into master (PHP 8.6 class-type fix) #289).composer gen-headers(the local docker path) now builds into a staging directory and refuses an image whose thread-safety mode does not match the target, instead of writing a ZTS layout into the nts directory.composer phpstanwith today's unlocked PHPStan, and the cascade (merge: cascade 8.5 into master (PHP 8.6 class-type fix) #289) brings the same change, so this no-ops once it merges.Note: the job name changes from
Generated headers up to datetoGenerated linux headers up to date (nts)/(zts). If a branch-protection rule names the old check, it needs updating.After this merges, merging
masterinto the #289 cascade branch makes #289 fully green.Environment it was verified on
php -v): CI, PHP 8.6.0-dev via setup-php (no PHP 8.6 locally); YAML validated,php -landphp-cs-fixerclean ontools/generator/generate.php--enable-debug)? no (the debug-build CI legs are green too)Checklist
master= newest supported minor) — the 8.4 and 8.5 branches still get nts and zts docker images and are unaffectedcomposer testpasses on the matching PHP minor — every CI test leg is green on the current headcomposer phpstan(level max) andcomposer cs:checkare greenlayout_structs— n/a, no engine access changedtools/generator/symbols.phpchanged: regenerated —symbols.phpunchanged; the artifacts were regenerated and committed by the workflows, nothing hand-edited🤖 Generated with Claude Code
https://claude.ai/code/session_01VLQcsvgdQUzwBFsoKUAcG2