Environment
Version: firebase-tools 15.15.0 (already includes the #10253 fix shipped in 15.14.0)
OS / CI: GitHub Actions, Ubuntu 24.04
Summary
This is the same class of bug as #6989 (closed, fixed by #10253 in 15.14.0), but it still reproduces on 15.15.0. #10253 only fixed one cause — a background-analytics ping timing out and crashing the error handler before it could set the non-zero exit code. The 409 unable to queue the operation path is not covered.
In a combined hosting + functions deploy, the swallowed failure additionally means Hosting is never released to the live channel, while the command exits 0 and CI stays green — so the pipeline silently ships nothing and reports success.
Steps to reproduce
- Two CI pipelines deploy
functions:default to the same project within a few seconds of each other (here: a dev workflow and a staging workflow, both targeting the same Firebase project).
- Each runs a combined deploy:
firebase deploy --force --only hosting:main,hosting:patient,functions:default,firestore --project PROJECT_ID --debug
- Cloud Functions returns
409 ABORTED on a function the other deploy already has an operation in flight for.
Observed behavior
⚠ functions: Request to https://cloudfunctions.googleapis.com/v2/projects/PROJECT_ID/locations/europe-west3/functions/<fn>?updateMask=... had HTTP Error: 409, unable to queue the operation
⚠ functions: failed to update function projects/PROJECT_ID/locations/europe-west3/functions/<fn>
[queue] Retrying task index 0
- The
firebase deploy step exits 0 → GitHub Actions marks the deploy green.
- Hosting was never released.
firebase hosting:channel:list --site SITE_ID shows the live channel's last release predating this deploy, and the live site kept serving the previous build. Files were uploaded (file upload complete) but the live channel pointer never moved.
Expected behavior
A deploy that logs failed to update function and/or does not successfully release Hosting must exit non-zero, so CI fails loudly instead of silently shipping nothing.
Notes
Environment
Version: firebase-tools 15.15.0 (already includes the #10253 fix shipped in 15.14.0)
OS / CI: GitHub Actions, Ubuntu 24.04
Summary
This is the same class of bug as #6989 (closed, fixed by #10253 in 15.14.0), but it still reproduces on 15.15.0. #10253 only fixed one cause — a background-analytics ping timing out and crashing the error handler before it could set the non-zero exit code. The
409 unable to queue the operationpath is not covered.In a combined hosting + functions deploy, the swallowed failure additionally means Hosting is never released to the live channel, while the command exits
0and CI stays green — so the pipeline silently ships nothing and reports success.Steps to reproduce
functions:defaultto the same project within a few seconds of each other (here: adevworkflow and astagingworkflow, both targeting the same Firebase project).409 ABORTEDon a function the other deploy already has an operation in flight for.Observed behavior
firebase deploystep exits0→ GitHub Actions marks the deploy green.firebase hosting:channel:list --site SITE_IDshows thelivechannel's last release predating this deploy, and the live site kept serving the previous build. Files were uploaded (file upload complete) but the live channel pointer never moved.Expected behavior
A deploy that logs
failed to update functionand/or does not successfully release Hosting must exit non-zero, so CI fails loudly instead of silently shipping nothing.Notes
0-on-409behavior in firebase deploy returns an exit code == 0 even if a function failed to be deployed #6989 (ripperdoc,devth,nick-fields), including the "two CI jobs running close together" trigger.