feat: support Laravel 13 and PHP 8.5, drop Laravel 11 - #25
Merged
Conversation
Laravel 13 needs a Pest 4 toolchain: pest-plugin-laravel 3 caps at Laravel 12 and will not resolve against 13. Pest 4 keeps the PHP 8.3 floor and covers Laravel 12 and 13, so the suite moves to it unchanged. Pest 5 would have forced PHP 8.4 and the loss of 8.3 for no gain here. Laravel 11 is removed rather than carried forward. Its security window closed in March 2026, and the advisories currently open against the framework are fixed in 12.60/12.61 and 13.10/13.12 with nothing in the 11.x branch. Declaring ^11.0 told users an unpatched framework was supported. composer audit is clean on 12 and 13. The matrix gains PHP 8.5 and Laravel 13 and loses Laravel 11, going from 16 jobs to 24. PHPStan runs on 8.5.
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.
This started as "add a row to the CI matrix" and turned out to be two separate things.
1. Laravel 13 needs a Pest 4 toolchain
Adding
laravel/framework:13.*to the matrix does not resolve:The plugin's 3.x line caps at Laravel 12. The support matrix upstream:
Pest 4 is the version that reaches Laravel 13 while keeping the PHP 8.3 floor. Pest 5 would force PHP ^8.4 and cost us 8.3 support for nothing we need. So:
pestphp/pest ^4.4.1,pest-plugin-arch ^4.0,pest-plugin-laravel ^4.1.The test suite needed no changes. All 69 tests pass on Pest 4 as written. Verified locally against Laravel 12 and 13,
prefer-lowestandprefer-stable, on PHP 8.5.3.2. Laravel 11 is out of support and unpatched
This is the part worth reading. With Laravel 11 installed:
Every fixed version is in the 12.60/12.61 or 13.10/13.12 line. There is no 11.x release carrying any of them. Laravel 11's security window closed in March 2026.
composer.jsondeclared"illuminate/contracts": "^11.0", which tells every consumer that an unpatched framework is a supported configuration. That is the actual defect here, and it is not fixed by testing Laravel 11 more thoroughly.Removed.
requireis now^12.0||^13.0, andcomposer auditis clean on both.Breaking change
Dropping a supported framework version is a major. This targets v3.0.0.
Applications on Laravel 11 stay on
kml-parser:^2.0, which keeps working, and the README says so. There is no functional change in this PR: same parser, same output, same 69 tests.Matrix
16 jobs to 24. Linux runs in about 20s and Windows in about a minute, so the added cost is small next to catching a real incompatibility. PHPStan moves to PHP 8.5.
Verified locally
Every matrix combination was resolved and run before writing it into the workflow, rather than assumed:
PHPStan
[OK] No errors, Pint clean, both workflow files passyaml-lint.Not changed
minimum-stability: devstays as the skeleton left it. It does meancomposer require laravel/framework:13.*can see13.x-dev, butprefer-stablepicks the stable tag and did so in every combination above. Worth revisiting separately, not while also moving the toolchain.