Move to Saloon 4, and fix the graphql-php floor - #6
Merged
Merged
Conversation
Saloon 4 tightens a few things the package does not use: absolute endpoints must now opt in to overriding the base URL, `Fixture` paths are checked for traversal, and `AccessTokenAuthenticator` dropped its serialize hooks. None of the classes this package extends changed, so the upgrade is a constraint bump. Saloon 4 also allows Guzzle 8, so widen that constraint to match. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01BeiADGwDNroEEdar3np9mA
PHPUnit 13 needs PHP 8.4.1 or newer, so this only widens the ceiling: the 8.2 and 8.3 jobs keep resolving to 12. `phpunit.xml.dist` points at the schema shipped in `vendor`, so there is nothing to migrate. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01BeiADGwDNroEEdar3np9mA
The `lowest` CI jobs were failing `SchemaFetcherTest`: below webonyx/graphql-php 15.34.1, introspection drops the reason from `@deprecated` on input fields, so round-tripping the committed schema came back without them and a sync would rewrite `local.graphql` even when Linear had not changed anything. The declared floor was `^15.10`, so raise it to the version that actually works. Those jobs were also being cancelled rather than reported, because `composer update --prefer-lowest` alone takes about 14 minutes of the 15 minute budget. Raise the timeout so a real failure is visible. Move the matrix to PHP 8.3, 8.4 and 8.5. Every remaining version is 8.3 or newer, so the Laravel 13 exclusion is now redundant. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01BeiADGwDNroEEdar3np9mA
The test matrix no longer covers 8.2, so the constraint should not claim it. Laravel 13 already requires 8.3, and Saloon 4 runs on it. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01BeiADGwDNroEEdar3np9mA
Resolution was never the bottleneck: the CI log shows Composer taking three seconds, and PHPUnit reporting `Time: 14:15`. The run was slow because SchemaFetcherTest was failing, and rendering the diff between two copies of the whole Linear schema is what takes a quarter of an hour. Fixing the graphql-php floor fixed the runtime with it, and the lowest jobs now finish in under a minute. Keep the headroom, so any future failure in that test is reported rather than cancelled, but describe what it is actually for. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01BeiADGwDNroEEdar3np9mA
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.
Summary
Moves the package onto Saloon 4, and fixes a dependency floor that had been breaking every
lowestCI job.No source changes — this is
composer.json, the CI matrix and the changelog.Dependencies
saloonphp/saloon^3.5→^4.0. Saloon 4's breaking changes all miss this package: absolute endpoints must now opt in to overriding the base URL (our requests are relative),Fixturepaths are checked for traversal, andAccessTokenAuthenticatorlost its serialize hooks (we useTokenAuthenticator). Nothing insrc/needed to change.guzzlehttp/guzzle^7.8→^7.8|^8.0, matching what Saloon 4 allows.webonyx/graphql-php^15.10→^15.34.1— see below.phpunit/phpunitgains^13.0. PHPUnit 13 needs PHP 8.4.1+, so 8.3 still resolves to 12.php^8.2→^8.3, to match the test matrix.The graphql-php floor
Below 15.34.1, introspection drops the
reasonfrom@deprecatedon input fields.SchemaFetcherTestround-trips the committed schema through introspection and compares, so it failed on everylowestjob.This was a real bug, not just a CI annoyance: anyone installing at the declared floor would see
composer fetch-schemarewritelocal.graphqlon every run, even when Linear's schema had not moved. Bisected to the commit — 15.34.0 fails, 15.34.1 passes.CI
timeout-minutes15 → 30. ASchemaFetcherTestfailure diffs two copies of a 35,000 line schema, and PHPUnit takes about 15 minutes to render that. At 15, five of the sixlowestjobs were cancelled part-way through the diff, so only one reported the failure and the rest looked like flakes.Testing
47 tests pass at both ends of every new constraint: Saloon 4.0.0 and 4.3.0, graphql-php 15.34.1 and 15.37.2, Guzzle 7 and 8, PHPUnit 12 and 13.
All 19 checks pass. The
lowestjobs now finish in under a minute, down from 14m39s — the old runtime was PHPUnit rendering that schema diff, not dependency resolution.🤖 Generated with Claude Code
https://claude.ai/code/session_01BeiADGwDNroEEdar3np9mA