Skip to content

ci(minimal): raise Go Tests job cap above its own go test timeout - #346

Merged
jdfalk merged 2 commits into
mainfrom
fix/go-tests-cap-above-test-timeout
Aug 12, 2026
Merged

ci(minimal): raise Go Tests job cap above its own go test timeout#346
jdfalk merged 2 commits into
mainfrom
fix/go-tests-cap-above-test-timeout

Conversation

@jdfalk

@jdfalk jdfalk commented Aug 12, 2026

Copy link
Copy Markdown
Collaborator

The Go Tests (short, race) job caps at 20 minutes, but its own test step runs:

go test -short -race -timeout 30m ./...

The runner therefore kills the job ten minutes before Go's own timeout can fire — and Go's -timeout is the only thing that prints a goroutine dump naming the stuck test. So a slow run can never produce the one artifact that would explain it.

The visible symptom is worse than a plain timeout: the run ends as conclusion=cancelled with no output, and cancelled renders on the PR as a test failure even though nothing failed.

Observed

In falkcorp/audiobook-organizer, repeatedly — #2311, #2315, and #2319. The last one is unambiguous:

Minimal CI / Go Tests (short, race)   cancelled   03:58:53Z -> 04:19:09Z   (20m16s)

20m16s against a 20m cap, on a docs-only PR. Every other job in that run succeeded.

That repo cannot fix this itself: this workflow exposes no timeout input (go-version, node-version, go-experiment, system-packages, frontend-working-dir, run-frontend), so the cap is only settable here.

Change

timeout-minutes: 2035 on go-test-short only. Every other job's timeout is untouched.

The comment states the invariant so this cannot silently regress: the job cap must stay strictly greater than the longest -timeout passed to any go test invocation in the job, plus setup. Raising the test timeout without raising the cap makes every slow run undiagnosable again.

Scope and risk

Raising a job cap cannot make a passing run fail. It only allows a genuinely slow or hung run to reach Go's timeout and emit the dump that identifies the culprit. Consumers whose suites finish well under 20m are unaffected — the cap is a ceiling, not a delay.

Not addressed here: why the audiobook-organizer suite approaches 20 minutes (its internal/server package alone is ~500s and sharding it is tracked separately in that repo). This change makes that problem diagnosable rather than hiding it behind cancelled.

🤖 Generated with Claude Code

https://claude.ai/code/session_01JnjSNo2WizbcnrW4pXT2xp

The job capped at 20 minutes while the test step runs go test with
-timeout 30m. The runner therefore killed the job ten minutes before
Go's own timeout could fire, and Go's timeout is the only thing that
prints a goroutine dump naming the stuck test.

Every slow run produced conclusion=cancelled with no diagnostic output
at all, and cancelled renders as a test failure on the PR even though
nothing actually failed. Observed repeatedly in
falkcorp/audiobook-organizer (#2311, #2315, and #2319, the last of which
was cancelled at exactly 20m16s).

Raises the cap to 35 and documents the invariant: the job cap must stay
strictly greater than the longest -timeout passed to any go test
invocation in the job, plus setup.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01JnjSNo2WizbcnrW4pXT2xp
@github-actions github-actions Bot added size/S github-actions GitHub Actions related work module:config Configuration management workflow:github-actions GitHub Actions workflows labels Aug 12, 2026
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01JnjSNo2WizbcnrW4pXT2xp
@github-actions github-actions Bot added size/M type:documentation Improvements or additions to documentation type:testing Testing related work labels Aug 12, 2026
@jdfalk
jdfalk merged commit 85a2909 into main Aug 12, 2026
41 of 42 checks passed
@jdfalk
jdfalk deleted the fix/go-tests-cap-above-test-timeout branch August 12, 2026 04:50
jdfalk added a commit to falkcorp/audiobook-organizer that referenced this pull request Aug 12, 2026
An earlier comment in ci.yml credited the #2311/#2315 conclusion=cancelled
failures to the Coverage Floor job and claimed raising it to 35 fixed them.
That was wrong.

Those cancellations were on Minimal CI / Go Tests (short, race), which is not
defined in this repo. The Minimal CI / prefix on a check name means the job
comes from a called workflow, here
falkcorp/github-common/.github/workflows/reusable-ci-minimal.yml, where the
cap was 20 against its own go test -timeout 30m.

Measured on #2319: Go Tests (short, race) cancelled at 20m16s while Coverage
Floor completed in 13m21s in the same run.

Fixed upstream in falkcorp/github-common#346. That workflow exposes no timeout
input, so it could not have been fixed from here. The 35 stays because it is
independently correct for this job, which runs make test-short with -timeout
25m.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01JnjSNo2WizbcnrW4pXT2xp
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

github-actions GitHub Actions related work module:config Configuration management size/M size/S type:documentation Improvements or additions to documentation type:testing Testing related work workflow:github-actions GitHub Actions workflows

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant