CI: unbounded apt steps consume the whole job budget and report as opaque job timeouts
- Dominant language
- Rust
- Stars
- 32.7k
- Forks
- 4.3k
- Avg merge
- 1d 13h
- Merged PRs (30d)
- 253
Description
## Summary
Two CI steps run `apt` with no step-level time bound. When a package mirror is slow, the step consumes the entire job budget and the job dies at `timeout-minutes`. The failure surfaces as a generic job timeout, which is indistinguishable from a slow build or a hung test — no test ever runs.
This has burned at least **five jobs across four runs in ~13 hours**, including three on `main`.
## The two steps
- `.github/workflows/ci.yml:271-272` — `Install Playwright system dependencies` → `pnpm exec playwright install-deps chromium` (apt under the hood). Job `timeout-minutes: 30`.
- `.github/workflows/ci.yml:159-183` — `Install Tauri dependencies (Linux)` → `apt-get update` + `apt-get install`. Job `timeout-minutes: 45`.
Both already pass `Acquire::Retries=3` and `Acquire::http::Timeout=30`. Those bound an individual *request*; neither bounds the step, so a mirror that is slow-but-not-dead is retried until the job budget is gone.
## Observed occurrences
| run | branch | head | job | step | duration |
|---|---|---|---|---|---|
| 32155633872 | PR #5946 | `17d455a9b` | Desktop Smoke E2E (4) | `Install Playwright system dependencies` | 29m47s → cancelled @30m |
| 32155633872 | PR #5946 | `17d455a9b` | Desktop Core | `Install Tauri dependencies (Linux)` | 43m35s → cancelled @45m |
| 32095368993 | main | `ee992ff08` | Desktop Smoke E2E (3) | `Install Playwright system dependencies` | ~29m50s → cancelled @30m |
| 32156485001 | main | `3fdf289b7` | Desktop Smoke E2E (3) and (1) | `Install Playwright system dependencies` | ~29m50s → cancelled @30m |
| 32158297977 | main | `5694e78de` | Desktop Smoke E2E (2) and (3) | `Install Playwright system dependencies` | observed running >20m |
In every case each preceding step succeeded and every following step is `skipped`. Annotation is always `The job has exceeded the maximum execution time of 30m0s` / `45m0s` — nothing names apt, which is what makes this expensive to diagnose. The PR that surfaced it (#5946) changes only six files under `docs/`.
## Why it's worth fixing rather than re-running
The failure is silent about its own cause. A reviewer sees "Desktop Core timed out at 45m" and reasonably suspects a build regression; the actual event is a package mirror being slow during a ~4-minute apt install. Re-running works often enough that the underlying tax stays invisible.
## Suggested fix
Bound the step so it fails fast and says what happened:
```yaml
- name: Install Playwright system dependencies
timeout-minutes: 10
run: cd desktop && pnpm exec playwright install-deps chromium
```
and likewise for the Tauri deps step. A step-level `timeout-minutes` turns a 30-minute silent budget burn into a fast, correctly-attributed failure. Optionally add `-o Acquire::http::Dl-Limit` / an overall `timeout` wrapper, but the step bound is the part that makes the diagnosis obvious.
Contributor guide
Research direction
Start with .github/workflows/ci.yml lines 159-183 and 271-272, reading the two apt-related workflow steps and their existing job timeouts. Add bounded step-level handling for both installation steps, then validate the workflow syntax and confirm that an installation failure is reported at the step rather than only as a job timeout.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- github-actions, linux
- Domain
- ci-cd, devops
- Issue type
- Bug
- Difficulty
- 2/5
- Estimated time
- 1-3 hours
- Activity status
- Active
- Clarity
- Clearly specified
- Newbie friendliness
- 86/100