graham-campbell/github-notifications
A PHP client for GitHub's notifications API, letting you list, filter, mark as read, and manage repository notifications from your applications. Part of Graham Campbell's GitHub package ecosystem.
Architecture fit. The package is a Laravel service-provider package that exposes Artisan commands for triaging GitHub notifications (marking threads read/done, filtering by reason, etc.). It is tooling, not a library: there is no public API to embed in application code, no events, no extension points of consequence. That makes it a good fit for internal developer-productivity and ops automation, and a poor fit for anything on a customer-facing request path. Decide up front which of those two problems you are solving — the evaluation outcome flips entirely based on the answer.
Integration feasibility. Mechanically cheap: a Composer require, a published config file, a token in .env or a secret store, and a command invocation. The real constraints are not technical:
Technical risk. High relative to the value delivered. Concretely:
Key questions to answer before spending engineering time.
Stack fit. Laravel package, Composer-installed, no frontend, no Node build. Confirm the version matrix and whether it registers commands globally or only in console context. Confirm it does not publish migrations or config keys that collide with ours.
Placement. Treat it as a require-dev / internal-tooling dependency, or better, isolate it in a small internal "devtools" repo or a scheduled GitHub Actions workflow. Do not add it to the production application's runtime dependency graph — it earns no place there and adds supply-chain surface for zero production benefit.
Credential handling. Dedicated service account, fine-grained PAT scoped to notifications only, stored in the secret manager, rotated on a defined cadence, with an owner recorded. Never a personal token belonging to whoever set it up.
Migration path and lock-in. Low lock-in — this is the good news. The package is a convenience wrapper; the underlying work is a handful of REST calls. A replacement is a few hundred lines against the GitHub API, or a scheduled workflow using the gh CLI. Budget the fallback as a known, cheap option rather than a hypothetical.
Compatibility gates. Pin in composer.json; add it to the dependency-review list; confirm it does not conflict with our PHPUnit or static-analysis versions.
Sequencing.
Maintenance. We are effectively the maintainers of last resort. Establish now who watches upstream releases and Laravel major upgrades, and pre-agree that a dormant upstream triggers replacement rather than a fork. Read the source before adopting; it is small, and reading it is cheaper than discovering its behavior in production.
Support. Community only — GitHub issues, no SLA, likely a README as the entire documentation. Plan to write an internal runbook covering token rotation, how to confirm a run happened, and how to safely re-run (idempotency is not guaranteed; a partial run may leave threads in a mixed state).
Scaling. Two ceilings. First, GitHub's authenticated rate limit (5,000 requests/hour): processing many threads with per-thread calls consumes budget quickly, and pagination multiplies call count. Second, per-user tokens: cost and risk scale linearly with headcount, which makes org-wide rollout a credential-management project, not a tooling project. Stagger schedules, use conditional requests where possible, and never run this on every CI push.
Failure modes to instrument.
Every one of these presents as "notifications piling up," which is indistinguishable from "a busy week." Add a heartbeat check (did the job run and return a sane count?) rather than relying on humans noticing.
Ramp-up. Low for an individual engineer — hours, not days. The cost is not learning the tool; it is the surrounding ownership: token lifecycle, on-call awareness, and a documented replace-or-maintain decision. Price that in before treating the near-zero integration effort as the whole story.
How can I help you explore Laravel packages today?