Skip to content

ci: put a ceiling on every job, and on the step that hung - #22

Merged
Paururo merged 1 commit into
mainfrom
ci/job-timeouts
Aug 19, 2026
Merged

Paururo merged 1 commit into
mainfrom
ci/job-timeouts

Conversation

@Paururo

@Paururo Paururo commented Aug 19, 2026

Copy link
Copy Markdown
Member

A pull request sat pending for three and a half hours today. Both jobs were stuck in the same place:

test          in_progress   Install build dependencies
GUI (Linux)   in_progress   Install build dependencies

That step normally takes 75 to 193 seconds. apt-get update queries around thirty repositories and stopped answering.

Why it lasted three and a half hours

Nothing failed, because nothing was allowed to. With no timeout-minutes, GitHub applies its 6 hour default. A hung network call holds a runner for six hours while the pull request reports pending with no indication why.

Six of the eight jobs here had no ceiling. The two that did are the ones added most recently, which is the usual shape of this problem: the habit arrived with the new files and nobody went back for the old ones.

The ceilings

Set from measured durations, with roughly four times the headroom so a cold cache or a slow runner does not trip them.

Workflow Job Measured Ceiling
ci.yml test 5.2 min 20
ci.yml gui 3.2 min 20
docs.yml build 0.7 min 15
docs.yml deploy 0.1 min 10
release.yml release 11.4 min (Windows, slowest of the matrix) 45
validate-markers.yml validate 0.1 min 10

Also a ceiling on the apt steps

Each one gets its own ten minutes. The job-level limit alone would have caught today's hang, but it would have reported that the job timed out. The step-level one names the step that actually stopped responding, which is the difference between a diagnosis and a shrug.

Verified

Every workflow still parses, every trigger is unchanged, and the release matrix still has its four platforms. An audit script confirms 8 of 8 jobs now carry a ceiling.

A pull request sat pending for three and a half hours today. Both jobs were
stuck in the same place, "Install build dependencies", a step that normally
takes between 75 and 193 seconds. apt-get update queries about thirty
repositories, and it stopped answering.

Nothing failed, because nothing was allowed to. With no timeout-minutes, GitHub
applies its 6 hour default, so a hung network call holds a runner for six hours
and the pull request reports "pending" the whole time with no indication why.

Six of the eight jobs in this repository had no ceiling at all. The two that did
are the ones added most recently, which is the usual shape of this: the habit
arrived with the new files and nobody went back for the old ones.

Ceilings are set from measured durations, with roughly four times the headroom
so a cold cache or a slow runner does not trip them:

  ci.yml       test      5.2 min measured   ->  20
  ci.yml       gui       3.2 min measured   ->  20
  docs.yml     build     0.7 min measured   ->  15
  docs.yml     deploy    0.1 min measured   ->  10
  release.yml  release  11.4 min measured   ->  45   (Windows, slowest of the matrix)
  validate     validate  0.1 min measured   ->  10

Each apt step also gets its own ten minute ceiling. The job-level limit alone
would have caught this, but it would have reported that the job timed out; the
step-level one names the step that actually stopped responding, which is the
difference between a diagnosis and a shrug.
@Paururo Paururo added the area:ci Workflows, checks and repository automation label Aug 19, 2026
@github-actions github-actions Bot added the area:packaging Release artifacts, Bioconda, installation label Aug 19, 2026
@Paururo
Paururo merged commit 419e8af into main Aug 19, 2026
4 checks passed
@Paururo
Paururo deleted the ci/job-timeouts branch August 19, 2026 19:41
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

area:ci Workflows, checks and repository automation area:packaging Release artifacts, Bioconda, installation

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant