Repository navigation
release/v0.7.71 - #725
release/v0.7.71#725
Conversation
… needs a newer FrankenPHP
Octane 2.22.0 requires FrankenPHP 1.13.0 and checks the binary each time
octane:frankenphp starts. On the 1.12.4 base image it answered its own
download prompt with yes, moved /usr/local/bin/frankenphp aside, downloaded
a generic build to base_path('frankenphp'), deleted the original and then
ran the emptied path: "exec: /usr/local/bin/frankenphp: not found", exit
127 on every start. The v0.7.70 cloud deploy crash-looped on this while the
image itself built fine.
- Base image: dunglas/frankenphp:1.13.1-php8.2-bookworm.
- docker/scripts/assert-frankenphp-version.php runs after composer install
and fails the build when the image's FrankenPHP is older than the
installed Octane's $requiredFrankenPhpVersion, naming both versions.
- laravel/octane is held to ~2.22.0 (locked 2.22.0), so a new Octane minor
version comes in only with a deliberate bump alongside the base image.
Codecov Report✅ All modified and coverable lines are covered by tests. Additional details and impacted files@@ Coverage Diff @@
## main #725 +/- ##
===========================================
Coverage 100.00% 100.00%
Complexity 38 38
===========================================
Files 196 196
Lines 4092 4092
===========================================
Hits 4092 4092
Flags with carried forward coverage won't be shown. Click here to find out more. 🚀 New features to boost your workflow:
|
Fleetbase API performance — release/v0.7.71p95: 1.99 s · p99: 2.36 s · Throughput: 17.4 req/s · Errors: 0% · Thresholds: ✅ PASS · Rate-limit isolation: ✅ PASS
Performance
Endpoints (slowest p95 first)
Budgets (p95): reads < 800 ms, writes < 1500 ms — report only. Changes are against v0.7.70; 🔺/🟢 mark a change of 20% or more. Not measured: Regression gate vs v0.7.70 — ❌ REGRESSED
A scope regresses when it is more than 35% and more than 150 ms slower p95 than the previous release. On a release PR a regression is re-measured once before it fails the check. Rate-limit isolation trafficNoisy tenant (NOISY key, normal limit)
Noisy errors exclude the expected 429 responses (the 429s column); latencies include them. Victim tenant (VICTIM key, different org)
Anonymous console route
Isolation result — ✅ PASSOne tenant floods the API far above its per-key limit while a second tenant and an anonymous console visitor keep working. Only the flooding tenant may be throttled.
Thresholds — ✅ PASS
Run
Confirmation run: latency regression confirmed. Workflow run · full HTML report in the |
Release v0.7.71. Merging into
maintagsv0.7.71through the release workflow.FrankenPHP / Octane startup fix
Octane 2.22.0 requires FrankenPHP 1.13.0 and checks the binary each time
octane:frankenphpstarts. On the 1.12.4 base image it answers its own "download the latest binary?" prompt with yes (no TTY), moves/usr/local/bin/frankenphpaside, downloads a generic build tobase_path('frankenphp'), deletes the original, and then runs the path it emptied:exec: /usr/local/bin/frankenphp: not found, exit 127, on every start. The image builds fine; only startup fails.mainstill locks Octane 2.19.1, so the published v0.7.70 images are not affected. The nextcomposer updatewould have pulled 2.22.0 under the old^2.3range.dunglas/frankenphp:1.13.1-php8.2-bookworm.docker/scripts/assert-frankenphp-version.phpruns aftercomposer install. It reads$requiredFrankenPhpVersionfrom the installed Octane (by reflection, not grep) and compares it withfrankenphp version. If the image's binary is older, or either version can't be read, the build fails and names both versions. This covers every target built fromdocker/Dockerfile:ci.ymlbake,install-smoke.yml, the published images and the cloud CD build.^2.3→~2.22.0, locked at 2.22.0 (composer update laravel/octaneonly). A new Octane minor version now needs a deliberate bump alongside the base image, and the guard enforces that pairing.install-smoke.ymlalready boots theapp-releaseimage and checks:8000/healthon this PR, so it shows that 1.13.1 actually serves.Components
1.6.72(release: Core API v1.6.72 — searchable columns registered at runtime core-api#317): runtime-registered searchable columns.0.6.74(release: v0.6.74 fleetops#410): geocoding uses the settings-backed Google Maps key everywhere. Fixes [BUG] /api/int/v1/geocoder/query returns [] for valid addresses while places/search resolves them #723.The composer lock moves only
fleetbase/core-apiandfleetbase/fleetops-api. The pnpm lock moves only@fleetbase/fleetops-engine. The submodule pointers are at the peeled tag commits. No engine routes changed, sorouter.map.jsis untouched.Verified in CI
The build-guard step ran in the image build and printed
FrankenPHP 1.13.1 meets laravel/octane's minimum (1.13.0). The fresh-install smoke test booted theapp-releaseimage on 1.13.1 and served:8000/health.