Skip to content

ci: "Test default on Linux" flakes on unrelated PRs, dying without logs (likely runner OOM) #633

Description

@pacu

Symptom: the required CI job "Test default on Linux" fails intermittently on PRs whose diffs cannot plausibly affect it, and passes on re-run of the same commit. Because it feeds the "Required status checks have passed" gate, every flake blocks a PR until someone re-runs it.

Observed occurrences (all within 2026-07-15 → 2026-07-16, all docs-only or docs+snapshot diffs that pass the full suite locally and on macOS/Windows):

PR Run Outcome
#612 29460281803 "Test default on Linux" failed with no failing step recorded; passed on re-run of failed jobs, same commit
#627 29508225415 same job failed with no failing step and its log absent from the run's log archive; separately, "Latest build on ubuntu-latest" failed at "Build crates (zebra-state backend)" with collect2: fatal error: ld terminated with signal 7 [Bus error], core dumped
#629 29513543191 (attempt 1) same job failed; in the attempt-1 log archive every other job's log is present, this job's is missing
#631 29523742999 same job failed (docs-only diff); re-run triggered

Why this looks like runner resource exhaustion rather than a flaky test:

  • A test failure records a failing step and uploads a log; these runs have neither — the job appears to die at the runner level before log upload.
  • The one adjacent failure that did leave a log is a linker Bus error (signal 7) on the same ubuntu-latest runner class, a classic symptom of memory/disk pressure while linking large binaries.
  • The zebra/zaino dependency trees produce very large test binaries; cargo test links several of them in parallel on a 7 GB standard runner.

Possible directions (for whoever picks this up to evaluate, not prescriptions):

  • Limit parallel linking in CI (e.g. -j for the final test build, or building test binaries with cargo test --no-run in a staged step).
  • Larger runner for the Linux test legs, or splitting the job.
  • A retry policy for infrastructure-class failures so the required gate doesn't hold PRs hostage.

Logs for the failed attempts expire quickly (several were already unavailable while investigating); the run links above may need GitHub support/api access to recover more detail.


Filed with AI assistance (Claude) while working on #600-series documentation PRs, which surfaced the pattern.

Metadata

Metadata

Assignees

No one assigned

    Labels

    A-testingArea: Tests and testing infrastructureC-bugCategory: This is a bug

    Type

    No type

    Fields

    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions