ci: run the test suite on PHP 8.1 - #7
Open
roxblnfk wants to merge 7 commits into
Open
Conversation
Add an 8.1 leg to the testing matrix. The library already targets 8.1, but its dev tooling (testo above all) is written for 8.2+, so the leg drops the tools the suite does not need and then uses php-internal/actions/install-php to resolve the rest as if on 8.1 and downgrade whatever has no 8.1-compatible version. Assisted-By: Claude Opus 4.8 (1M context)
Use the matrix dependency set (highest) rather than lowest on the 8.1 leg: install-php pins the platform, so Composer already caps every dependency to its newest 8.1-compatible version and downgrades only what has none. Drop llm/skills too (a Composer plugin whose hook is written for 8.2+), and raise the job timeout since downgrading the testo package set takes longer than the 8.2+ legs. Assisted-By: Claude Opus 4.8 (1M context)
testo/bridge-symfony-console ships a deliberately unparseable stub under resources/stubs, which Rector cannot process. Pass it to install-php's skip so the downgrade leaves those stubs alone. Assisted-By: Claude Opus 4.8 (1M context)
The test stubs use 8.2 standalone types (e.g. `: false`), so the suite cannot load on 8.1 as written. Downgrade tests and the testo config via install-php's paths, but leave src alone so the shipped library is still exercised on 8.1 as-is. Assisted-By: Claude Opus 4.8 (1M context)
php-internal/actions/install-php was renamed to .../downgrade. Assisted-By: Claude Opus 4.8 (1M context)
The downgrade action installs with --no-scripts, so llm/skills no longer fires its post-install hooks; removing it beforehand was unnecessary. Trim the slim step to the heavy dev tooling that is genuinely not needed to run the suite, and tighten the comment. Assisted-By: Claude Opus 4.8 (1M context)
roxblnfk
force-pushed
the
ci/test-php-8.1
branch
from
September 8, 2026 19:52
7828460 to
ce19a96
Compare
roxblnfk
force-pushed
the
ci/test-php-8.1
branch
from
September 8, 2026 19:55
6ece2c0 to
3677b47
Compare
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 was changed
php-internal/actions/downgradeto resolve dependencies as if on 8.1 (so Composer picks 8.1-compatible versions and symfony falls to 6.x) and downgrades whatever has no 8.1-compatible version.testsandtesto.phpare downgraded, notsrc, so the library's own code is exercised on 8.1 as written.Why?
The library declares
php: >=8.1but was only ever run on 8.2+, because its test runner (testo) and the rest of the dev tooling target 8.2+. This leg proves the package actually runs on its stated minimum.Review notes
The 8.1 leg is red at
Run testsfor now: the installedtesto 0.10.40callsReflectionMethod::hasPrototype()(an 8.2 API) andrector ^2.6has no downgrade rule for it yet (rectorphp/rector-downgrade-php#398). Everything before that (resolve, relieve, Rector downgrade of the testo packages) runs. It goes green once the rule ships; bump the action'srector-versionthen.Checklist