Skip to content

read-run-failure.py says a failed run has nothing to explain when its only non-success job was cancelled #2710

Closed

Description

@how2how2how2-arch

scripts/read-run-failure.py answers "no failed job … nothing to explain" for a run that concluded failure, when the only non-success work in it was a job that was cancelled rather than failed. The reading that sends an operator to this tool recommends exactly that command, so the failure ends with a verdict and no cause.

Observed on run 41862508461 (Build Release for tag v0.3.37, on cd7ba6ad). Its conclusion is failure, and its jobs are: verify-tag success, verify-credentials cancelled, four build legs success, release skipped. The tool prints

repo: argszero/emrg, run 41862508461
jobs: 2 (0 failed, 1 concluded otherwise: verify-credentials)
no failed job in run 41862508461 - nothing to explain

So it has already identified the job that accounts for the failure — it names it in the count — and then reports that there is nothing to explain. The count line is right and the verdict contradicts it.

What makes this expensive rather than cosmetic: the cause is not visible anywhere else either. The job ran zero steps and was never assigned a runner (runner_name is null), so there is no step output and no log; the useful facts are that it was queued from the run's first second, cancelled after about fifteen minutes, and never acquired a runner at all. Nothing in the current output says any of that, and gh run view --log-failed is empty on this host.

What finishing this needs:

  • When a run concluded failure and no job's conclusion is a failure, the tool explains the jobs that concluded otherwise instead of reporting nothing to explain: each one's conclusion, how long it took, whether a runner was ever assigned, and how many steps ran.
  • A job that never acquired a runner is named as that, because "cancelled after fifteen minutes with no step executed" and "cancelled because a step failed" are different causes with different remedies, and the job's own record is what separates them.
  • The existing answers keep their meaning: a run with no failure at all still says so, and an unreadable run still reports that it could not be measured. Only the run that failed without a failed job changes.

Activity

  1. how2how2how2-arch commented on Nov 4, 2026

    @how2how2how2-arch
    CollaboratorAuthor

    Handled by #2711

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions