jordanpartridge/github-client
jordanpartridge/github-client is a lightweight Laravel wrapper for the GitHub API. Fetch repositories, issues, pull requests, releases, and user profiles through a clean, fluent interface, with token authentication and simple, Laravel-friendly configuration.
Architecture fit. This package occupies the outbound-integration layer of a Laravel application: it wraps GitHub's REST API behind a Saloon-based connector, with pluggable authentication strategies. The v3.1.0 addition of GitHub App authentication is architecturally significant — it moves the package from "personal credential wrapper" territory into "org-wide automation" territory, where the app mints a short-lived JWT (php-jwt ^7), exchanges it for a per-installation access token, and uses that for API calls. That is the correct pattern for multi-repo, multi-tenant automation and is materially better than PAT sprawl. Because it is Saloon-based, it inherits PSR-18/PSR-7 interoperability, Laravel container binding, and Saloon's MockClient for test doubles — a good fit for teams already standardizing on Saloon for other connectors.
Integration feasibility. Straightforward for a greenfield integration: composer require, publish config, supply credentials. The friction points are (a) the dependency floor bumps — Saloon ^4.3 and php-jwt ^7 — which can conflict with an application pinning older Saloon connectors, and (b) the new auth strategy requiring additional configuration surface (app ID, installation ID, private key material). Neither is exotic, but both mean this is not a pure drop-in for an existing install.
Technical risk. Moderate-low, with caveats:
Key questions.
Retry-After, secondary limits) and retry/backoff, or does it surface raw 403/429 to the caller?docs/ARCHITECTURE.md sufficient to explain the strategy/token lifecycle, or is it a stub?Stack fit. Laravel + Composer, with Saloon as the HTTP layer and php-jwt required only on the GitHub App path. It composes cleanly with queue workers, scheduled commands, and webhook handlers — the places where GitHub API calls typically originate. No database or queue driver assumptions are implied by the package, which keeps the blast radius small.
Migration path.
composer update with -W on the two constrained packages, resolve any Saloon conflicts against other connectors, then audit code and tests that read auth status or assert on exception messages.Compatibility. Verify PHP version implied by php-jwt ^7 (8.x-only) and by Laravel 13 support (likely 8.3+ for the top end). Check the package's CI matrix before committing. If the app runs multiple Saloon-based connectors, resolve the Saloon floor globally — this is the most likely source of an upgrade stall.
Sequencing.
Maintenance. Small code surface, but two ongoing obligations: (a) tracking Saloon and php-jwt major versions, since this package pins to their current majors and will force coordinated upgrades; (b) private-key lifecycle management — storage, rotation, per-environment keys, and revocation on personnel change. The latter is the real cost increase in v3.1.0.
Support. docs/ARCHITECTURE.md is a genuine onboarding improvement and should reduce "how does auth work here" tickets. The error-guidance fix targets the most common self-inflicted failure — misconfigured strategy auth — so expect fewer escalations for GitHub App misconfiguration. Remaining support hot spots will be GitHub-side permission scoping (403s that look like package bugs but are not) and installation-not-found errors after an app is uninstalled or suspended.
Scaling. Net positive. Installation tokens are rate-limited per installation (5,000 req/hr baseline, scaling with org size) rather than per user, so org-wide automation stops competing with a human's PAT budget. The scaling risk is on our side: if tokens are minted per request rather than cached, a fleet of queue workers will hammer the token endpoint and hit its own limits. Confirm caching behavior and, if absent, wrap it. Watch for cache stampede on token refresh under concurrency.
Failure modes.
expires_at.Retry-After semantics — unclear whether the package handles these or passes them through.Ramp-up. Modest. A developer familiar with Saloon can be productive in under a day. The conceptual overhead is GitHub's model — App vs. installation vs. installation token — which is genuinely confusing on first contact and worth a half-day of explicit onboarding plus the new architecture doc. Recommend one engineer own the GitHub App registration, key custody, and rotation runbook rather than distributing that responsibility.
How can I help you explore Laravel packages today?