Skip to content

Build1 publisher3 min readPublished

GitHub traced two hours of delayed Actions runs to timeouts on one git data partition

At the peak, up to 25% of runs started late and up to 4% never started at all. The component that failed was GitHub's own pull request processing, upstream of the self-hosted runners a hybrid CI plan falls back to.

The Engineer · Build desk

Illustration accompanying GitHub traced two hours of delayed Actions runs to timeouts on one git data partition

What happened

  • GitHub declared an incident on August 26, 2026 covering elevated delays and timeouts on Actions workflow runs triggered by pull request events, running from about 21:55 UTC to 23:58 UTC.
  • At the peak, up to 25% of Actions runs started late, with some delays longer than five minutes, and up to 4% of runs failed to trigger at all.
  • The resulting backlog also delayed merge-commit generation, degraded mergeability information and left the merge button unavailable, so manual merges were blocked as well.
  • Engineers reduced overall workload, shifted traffic off the affected infrastructure and restored the component, and committed to better saturation detection, impact isolation and backpressure.

Compiled by The EngineerSomething wrong?How this is made

Why it matters

  • exposure A check that was never created cannot go red, so pull requests caught by the 4% sat blocked with no failed job for anyone to find or retry.
  • constraint The published numbers are peak percentages, so they bound the worst minute rather than the whole window, and no team can size its own lost runs from them without its own queue data.
  • decision Teams whose break-glass procedure is a manual merge followed by a later CI run need a different one, because that button went out with the checks.

Twenty-five percent late and 4% never triggered are two different failures. A run that starts five minutes behind still reports a status when it finishes [3]. A run that was never created reports nothing at all, so the required check stays uncreated and there is nothing to re-run [4].

GitHub's post-incident summary attributes the delays and the merge problems to one component: background jobs that process pull request updates and generate merge commits, timing out while reading a single partition of git data [6]. The backlog those timeouts produced delayed pull request-triggered workflows and degraded the accuracy and availability of mergeability information [7]. It also took away the merge button [5]. The manual override people reach for during an Actions incident was produced by the jobs that were failing.

Timeouts on that one partition delayed up to a quarter of Actions runs at peak, some by more than five minutes [3][6]. The remediation list GitHub published is the right one for a saturating dependency: better resource saturation detection, isolation of impact, stronger backpressure [9]. Its immediate mitigations were to shed load, shift traffic away from the affected infrastructure, and restore the component to health [8].

The dev.to writeup that relayed the incident recommends auditing CI/CD for single points of failure, and suggests hybrid setups where critical stages run on self-hosted runners or an alternative platform [10]. Against the cause it reports, self-hosted runners do not fire. They execute work GitHub has already dispatched, and the failing jobs sat upstream of dispatch, in pull request update and merge-commit processing [6]. The scoping in the summary is the useful part for anyone designing a fallback: impact was limited to workflow runs triggered by pull request events [1]. A gate job that also runs on push does not wait on merge-commit generation, if that scoping is exact.

Both headline percentages are peak figures [3][4]. The window ran about 123 minutes [12]. At the peak, 4% is roughly one pull request event in 25 producing no run [13]. The figures are given as percentages of runs, with no absolute counts [14]. For them to describe your exposure, your pushes have to land in the bad minutes and your merge gate has to be a required check fired by a pull request event.

The writeup called GitHub's rapid detection and communication "commendable" [11], though detection on the provider side does not tell you which of your own pull requests lost a run. Over a window that long, an alert on pull requests whose required checks have not been created within a few minutes is what separates a slow queue from a run that will never exist [4].

What to watch

  • Whether GitHub ships the partition isolation and backpressure work named in the summary, and whether the next pull request-path incident stays inside one partition.
  • Whether any later report gives absolute run counts. Teams need those to size their own losses.
  • Whether a repeat incident scoped to pull request events shows that a push-triggered duplicate gate job actually clears branch protection.
Loading claim ledger
Loading source directory links
Loading share composer
Loading topic controls
Loading related stories