Skip to content

A transient umami 500 fails Deploy to Production and evicts PRs from the merge queueΒ #2632

Description

@devantler

πŸ€– Generated by the Daily AI Engineer

Problem

A transient HTTP 500 from umami β€” the analytics app β€” fails the entire πŸš€ Deploy to Production step, which fails the merge_group run, which evicts the PR from the merge queue. An unrelated dependency bump therefore cannot merge because an analytics tenant-provisioning call blipped.

Observed 2026-07-14 on renovate PR platform#2611 (run 29329060647):

Error: could not authenticate to umami after retries; last login failure: HTTP 500
Error: list teams failed: 500
    at ensureTeam ([eval]:54:20)

The deploy was otherwise fine β€” the kubeconfig worked throughout (it was reading live pod logs), and neighbouring merge_group deploys succeeded (pr-2612 10:45Z, pr-2608 09:03Z, pr-2630 08:40Z).

It really was transient. The umami-provision-tenants CronJob failed during the deploy window and then completed successfully ~12 minutes later, in 11 seconds. umami itself is healthy (umami-umami-primary 2/2 Running, CNPG umami-db healthy, 3 instances). But there is a recurring pattern of intermittent failures in that CronJob's history (failures at 7d, 5d and 10h ago, interleaved with successes).

Why it matters

The blast radius is disproportionate to the fault:

  • A best-effort, idempotent tenant-provisioning step for an analytics app is a hard gate on prod delivery.
  • Because platform merges go through a merge queue, the failure doesn't just fail a check β€” it evicts the PR, so the merge lane silently stalls and every queued change waits on an unrelated 500.
  • It is indistinguishable at a glance from a real deploy failure, which costs a root-cause pass every time (this one did).

Proposed direction

Make the umami tenant-provisioning step non-gating for the deploy, while still surfacing its failure:

  1. Retry with backoff around the umami login / list teams calls (it already retries once β€” the window here outlasted it), and
  2. let the step fail soft β€” report the failure (annotation / alert) without failing Deploy to Production. Provisioning is idempotent and the CronJob re-runs on schedule, which is exactly what already self-healed it here.

Alternatively, move tenant provisioning out of the deploy path entirely and let the CronJob own it, with an alert if it stays failed across N runs.

Either way the principle is the same: an analytics-app blip should not be able to evict PRs from the merge queue.

Rough size

S–M β€” one workflow/script step plus an alert.

Found while root-causing platform#2611's eviction (re-queued; the transient had cleared).

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Fields

    No fields configured for issues without a type.

    Projects

    Status
    βœ… Done

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions