Repository navigation
ci(windows-shared): shared-engine Windows SDK (php8ts.dll) + Windows Xdebug catalog - #73
Open
luthermonson wants to merge 1 commit into
Open
luthermonson wants to merge 1 commit into
luthermonson wants to merge 1 commit into
Conversation
The default Windows SDK is a static spc --build-embed, and a binary that
links PHP statically has no php8ts.dll for extension DLLs to import the
engine from, so php_xdebug.dll (or any php_*.dll) cannot load into it.
Add a separate lane, windows-shared.yml + tools/windows-shared/package.ps1,
that repackages the official windows.php.net ZTS x64 build of a release
instead of compiling PHP:
php-sdk-<ver>-windows-x86_64-shared.tar.gz (attached to v<ver>)
lib/php8embed.lib + lib/php8ts.lib + include/php + bin/php8ts.dll,
the dependency DLLs, the official bin/ext/php_*.dll, and
ephpm-sdk.json whose `preload` list restores the static SDK's
extension set (mbstring, openssl, intl, pdo_mysql, ...; opcache as a
zend_extension on 8.3/8.4).
ephpm-ext-<ver>-windows-x86_64.tar.gz (attached to ext-<ver>)
php_xdebug.dll (the official xdebug.org ZTS DLL for the minor) +
manifest.json in the Linux catalog's schema, libc "msvc".
Every download is sha256-verified (checksums.txt pins, or the live
windows.php.net list for current releases; the Xdebug pins match
xdebug.org's published hashes). Packaging is refused unless the official
php.exe, run from a directory holding only the packaged bin/ payload,
loads all 37 extensions of the static set plus Xdebug as a Zend extension.
Nothing is compiled, so it runs on GitHub-hosted windows-latest, not the
ephemerd fleet. Publishing (main + workflow_dispatch only) uses
`gh release upload --clobber`, which adds assets and never rewrites an
existing release's body. A PR touching the lane builds and smoke-tests
8.3.33 / 8.4.23 / 8.5.7 without publishing. build.yml and extensions.yml
are untouched.
|
ePHPm Preview — deployed (health check pending)
Preview updates automatically on each push to this PR. |
|
ePHPm Preview — deployed (health check pending)
Preview updates automatically on each push to this PR. |
1 similar comment
|
ePHPm Preview — deployed (health check pending)
Preview updates automatically on each push to this PR. |
This branch was previously deployed
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
The default Windows SDK is a static
spc --build-embed. A binary that links PHP statically has nophp8ts.dll, and every PHP extension DLL (php_xdebug.dllincluded) imports the engine fromphp8ts.dll, so ePHPm on Windows cannot load extensions at all. ePHPm's companion PR (ephpm/ephpm,--variant shared) needs a Windows SDK whose engine is a DLL, plus a Windows Xdebug forephpm dev --xdebug.What
A new, separate lane (
windows-shared.yml+tools/windows-shared/package.ps1).build.ymlandextensions.yml(incl. #72's Xdebug pin) are untouched.It does not compile PHP. It repackages the official windows.php.net ZTS x64 build of the release (the zip already ships a small static
php8embed.libthat imports the engine throughphp8ts.lib; the devel pack hasphp8ts.lib+ headers). Because the engine is the official one, the officialphp_*.dllextensions and xdebug.org's Xdebug DLLs are ABI-matched by construction.php-sdk-<ver>-windows-x86_64-shared.tar.gzv<ver>lib/php8embed.lib,lib/php8ts.lib,include/php/,bin/php8ts.dll+ dependency DLLs +bin/ext/php_*.dll,ephpm-sdk.json(ABI identity +preloadlist), PHP license, redist notices, SBOMephpm-ext-<ver>-windows-x86_64.tar.gzext-<ver>php_xdebug.dll+manifest.json(Linux catalog schema,libc: "msvc",os,crt) +LICENSE-xdebug.txtpreload= the static SDK's extension set minus whatphp8ts.dllcompiles in (mbstring, openssl, curl, intl, pdo_mysql, ... and opcache as azend_extensionon 8.3/8.4), in a dependency-safe order.checksums.txt(archived releases have no upstream list; Xdebug pins match xdebug.org's published hashes) or the live windows.php.netsha256sum.txt. Missing hash = refusal that prints the hash to pin.php.exe, run from a directory holding only the packagedbin/payload, must load all 37 extensions of the static set and register Xdebug as a Zend extension (with Xdebug v3.5.3), and report ZTS.windows-latest(nothing to compile), not the ephemerd fleet.workflow_dispatchonmainonly, viagh release upload --clobber(adds assets, never edits an existing release's title/body). A PR touching the lane packages + smoke-tests 8.3.33 / 8.4.23 / 8.5.7 (ePHPm's current pins) without publishing.Verified locally (Windows 11, this script)
SDK tarballs are 33.6-36.0 MB; ext tarballs 0.2 MB. The 8.5.7 SDK from this script was linked into a shared-engine
ephpm.exe(ephpm/ephpm#564), which then loaded Xdebug from the ext tarball and ran a DBGp step session (breakpoint, stack, locals, resume).CI on this PR (hosted
windows-latest): Package 8.3.33 / 8.4.23 / 8.5.7 all pass (~25 s each, including the smoke gate); Publish correctly skipped.After merge
Dispatch once per pinned version so ePHPm's xtask can download the assets:
Not yet wired into
watch-php.yml; a new PHP patch needs a manual dispatch.