Skip to content

Move to Saloon 4, and fix the graphql-php floor - #6

Merged
inxilpro merged 5 commits into
mainfrom
claude/saloon-update-aqomo5
Sep 20, 2026
Merged

inxilpro merged 5 commits into
mainfrom
claude/saloon-update-aqomo5

Conversation

@inxilpro

@inxilpro inxilpro commented Sep 20, 2026

Copy link
Copy Markdown
Contributor

Summary

Moves the package onto Saloon 4, and fixes a dependency floor that had been breaking every lowest CI 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), Fixture paths are checked for traversal, and AccessTokenAuthenticator lost its serialize hooks (we use TokenAuthenticator). Nothing in src/ 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/phpunit gains ^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 reason from @deprecated on input fields. SchemaFetcherTest round-trips the committed schema through introspection and compares, so it failed on every lowest job.

This was a real bug, not just a CI annoyance: anyone installing at the declared floor would see composer fetch-schema rewrite local.graphql on every run, even when Linear's schema had not moved. Bisected to the commit — 15.34.0 fails, 15.34.1 passes.

CI

  • The matrix moves to PHP 8.3, 8.4 and 8.5. Every version is now 8.3 or newer, so the Laravel 13 exclusion is redundant and goes.
  • timeout-minutes 15 → 30. A SchemaFetcherTest failure diffs two copies of a 35,000 line schema, and PHPUnit takes about 15 minutes to render that. At 15, five of the six lowest jobs 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 lowest jobs 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

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
@inxilpro inxilpro changed the title Support Guzzle 8 and Saloon 4, allow PHPUnit 13 Move to Saloon 4, and fix the graphql-php floor Sep 20, 2026
@inxilpro
inxilpro merged commit 02eccf5 into main Sep 20, 2026
38 checks passed
@inxilpro
inxilpro deleted the claude/saloon-update-aqomo5 branch September 20, 2026 17:50
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants