roadrunner-php/version-checker
Checks the installed RoadRunner version against required constraints. Provides greaterThan, lessThan, and equal methods, throwing UnsupportedVersionException or RoadrunnerNotInstalledException on mismatch. Requires PHP 8.0+.
fix: detect the RoadRunner version from roadrunner/roadrunner (db8a121).
roadrunner/roadrunner package rather than wherever it looked before. Two things follow:
roadrunner/roadrunner — consistent with the v1.4.0 vendor consolidation. Our earlier guidance pinning spiral/roadrunner should be re-verified; it may now be the legacy coordinate.rr binary. This is a behavioral regression risk in our environment, not in the package.^1.4.1 as the floor.roadrunner-php/version-checker → roadrunner/version-checker (#29). Still a breaking change for dependency declaration (composer.json, lockfiles, CI caches, allowlists, SBOM).
RoadRunnerPHP\VersionChecker\...) remains unconfirmed — release notes for both v1.4.0 and v1.4.1 are silent. Still the highest-impact unknown.roadrunner-php/version-checker while the package is roadrunner/version-checker — a persistent source of confusion in tickets and code search.spiral/roadrunner vs roadrunner/roadrunner.deploy.php).roadrunner/roadrunner, the package's correctness is now coupled to how RR is installed, not merely whether it is running.
rr --version) is no longer a nice-to-have but a required wrapper.roadrunner/* vendor alignment now looks deliberate across both the checker and RR itself.composer require roadrunner-php/version-checker → composer require roadrunner/version-checker in every runbook, Dockerfile, CI job, and internal template.use statements break — small but build-breaking.composer.json, expect an empty/unknown result and plan the fallback.spiral/roadrunner: ^2.0.0. If the ecosystem has moved to roadrunner/roadrunner, that pin is stale and could produce a mismatch where the checker inspects a package we don't actually depend on. Confirm the canonical name before finalizing composer.json.| Risk Area | Severity | Mitigation Strategy |
|---|---|---|
| Package rename (composer name) | High | Migrate composer.json, lockfile, Dockerfiles, CI configs, and docs in one atomic change; grep for the old string across repo and IaC. |
| PHP namespace change (unconfirmed) | Medium–High | Verify via composer show roadrunner/version-checker and the autoload map before rollout; update all use statements if changed. |
| Detection source change in v1.4.1 | Medium–High | Test the checker against every install shape we run (composer-installed, image-provided, custom binary). Assert on the returned value in CI, not just "no exception." Add CLI fallback where RR isn't a Composer dep. |
Stale RR coordinate (spiral/roadrunner vs roadrunner/roadrunner) |
Medium | Confirm canonical package name; align composer.json pins with what the checker inspects to avoid a silent version mismatch. |
| Old package name abandoned | Medium | Treat as frozen: no further fixes (including detection fixes like v1.4.1) will land there. Policy rule blocking the old name in new services. |
| Unreviewed v1.2/v1.3 changes | Medium | Diff the intervening changelogs; v1.4.1's quick follow-up raises the prior that a detection/API change originated there. Confirm no PHP constraint bump. |
| v1.4.0 known-defective; teams may pin it | Medium | Mandate ^1.4.1 as the floor; scan lockfiles for 1.4.0. |
| RoadRunner API Changes | Medium | Pin exact RR version; keep CLI fallback. |
| False Positives/Negatives | Low–Medium (raised) | Test against multiple RR versions and multiple install methods in CI. |
| Dependency Bloat | Low | Package is tiny; negligible. |
| Lack of Laravel Integration | Low | Wrap in a Laravel facade or command. |
roadrunner/roadrunner), base image, or system package? This now determines whether v1.4.1's detection works at all.roadrunner/roadrunner or spiral/roadrunner — and is our pinned spiral/roadrunner: ^2.0.0 stale?rr --version checks?rr:check-version, service provider + facade, RRVersionMiddleware, Forge/Envoyer deploy hook.rr --version, and expose which path was used for observability.composer.json, composer.lock, Dockerfiles, CI workflows, deploy scripts, docs, SBOM/security allowlists.roadrunner/roadrunner vs spiral/roadrunner) and reconcile pins.composer remove roadrunner-php/version-checker then composer require roadrunner/version-checker:^1.4.1.^1.4.1 — do not land on 1.4.0.use RoadRunnerPHP\VersionChecker\VersionChecker; // confirm namespace after rename
$version = VersionChecker::getVersion(); // verify non-empty in our install shape
if ($version === null && !$cliFallbackOk) {
throw new \RuntimeException('RoadRunner version could not be detected');
}
if (!VersionChecker::check('>=2.0.0')) {
throw new \RuntimeException('RoadRunner version not supported');
}
composer.lock to avoid dual-install (duplicate classes → autoload conflicts).rr --version for a week to validate agreement.roadrunner-php/version-checker and pinning roadrunner/version-checker:^1.4.1.roadrunner/version-checker in resolved dependencies; verify with composer show | grep version-checker. Assert version >= 1.4.1.roadrunner/roadrunner is the package the checker inspects and that we actually depend on it; otherwise detection silently degrades.roadrunner/* and spiral/roadrunner pins in the same project.roadrunner/version-checker:^1.4.1 with (or after) the RR package it inspects.1.4.0."roadrunner/version-checker": "^1.4.1",
"roadrunner/roadrunner": "^2.0.0" // verify canonical coordinate; replace spiral/roadrunner if confirmed
conflict and/or CI grep to fail builds that do.1.4.0 in lockfile audits.roadrunner/roadrunner Composer package; if RR is provided by the image, the checker returns unknown and the CLI fallback is used."^1.4.1 floor so future audits distinguish stale-intentional from forgotten.which rr / rr --version.composer show roadrunner/roadrunner; use the CLI fallback.rr --version: the Composer package and the running binary are out of sync (image built from a different RR version than composer.json pins) — a genuine drift signal, not necessarily a bug.composer update, verify.bootstrap/cache and opcache.VersionChecker::getVersion() raw output; reproduce locally with php artisan rr:check-version.roadrunner-php/version-checker) despite the package rename — call this out in tickets so responders don't assume they're on the wrong project.| Failure Scenario | Impact | Mitigation |
|---|---|---|
| RR not a Composer dep → v1.4.1 detection returns unknown | Check silently degrades; drift goes unmonitored | Assert on returned value in CI; implement rr --version fallback; alert on "unknown" rather than treating as pass. |
| Version reported differs from running binary | False confidence or false failures | Treat mismatch as a drift alarm; compare against rr --version during pilot. |
Stale RR coordinate (spiral/roadrunner vs roadrunner/roadrunner) |
Checker inspects a package we don't ship; always unknown | Confirm canonical name; align pins. |
| Service pinned to v1.4.0 | Retains the detection defect v1.4.1 fixes | Lockfile audit; enforce ^1.4.1. |
| Old package name left in a service | No further updates (including this fix); silent drift | CI grep / conflict rule; fleet sweep. |
| Both package names installed | Autoload conflicts, unpredictable behavior | Remove old name, composer update, verify composer show. |
| PHP namespace changed, wrappers not updated | Fatal errors at boot | Verify namespace pre-rollout; update all use statements; full test suite. |
| Composer cache serves stale metadata | Builds resolve old name or fail | Invalidate CI Composer caches and Docker layers post-migration. |
| RR version too old | Deployment blocked | Upgrade RR or relax constraints. |
| RR API endpoint changes | Package breaks | CLI fallback (shell_exec('rr --version')). |
| Network/socket issues | False negatives | Retry logic or CLI fallback. |
| Permission denied | Checks fail silently | Ensure PHP process has RR access; assert at boot. |
| CI/CD pipeline fails | Blocked deployments | Stage first; keep the check non-blocking during Phase 2. |
How can I help you explore Laravel packages today?