Skip to main content

v2.78.1

Binaries and the merged-pull-request list are on the GitHub releases page.

A waiting lane backs off again​

v2.78.0 made a job's wait for an upstream in another lane event-driven: the runner long-polls the run's event stream and re-reads the run's state when an event arrives. A long-poll that lapsed with no event was reported as an event too, so a waiting lane job re-read the whole run (the event log and the plan object, three requests) every 2 seconds for as long as it waited, and a --job runner waiting on its dependencies re-read on every lapse as well. On a run with many waiting jobs that was most of the run's traffic.

A lapse is now time spent, not news: the long-polls lengthen 2, 4, 8, 15 s while nothing happens, the state is read once per long-poll, and an event still wakes the wait at once. The traffic of a waiting job falls to a handful of requests per minute. The analysis is in specs/orun-sync-efficiency in the repository, with the rest of the plan.

status --watch is woken by the run​

orun status --remote-state --watch read the run and its jobs every second (two requests a second per watcher, on the tightest rate-limit family). It now reads through the same coordination backend orun run uses, which long-polls the run's events: a watcher makes one request per 15 s while nothing happens and refreshes when something does. orun logs and orun tui share the backend; ORUN_COORDINATION=legacy keeps the old one.

--github-output no longer needs --artifact github​

orun plan --github-output wrote matrix, lane-matrix, the per-level matrices, plan_id and exec_id to $GITHUB_OUTPUT only when the same command also uploaded the plan as a GitHub Actions artifact: with --artifact github, inside GitHub Actions. A workflow that keeps its plan on the platform and runs each lane with orun run --lane … --remote-state, as the lanes recipes do, passes no --artifact, and its plan step produced no outputs. Its run jobs then found no matrix: skipped by a level guard, or failed on fromJson of an empty output.

The outputs are now written whenever --github-output is set and $GITHUB_OUTPUT names a file, with or without an artifact backend. exec_id is the id it always was (GITHUB_RUN_ID, GITHUB_RUN_ATTEMPT and the plan checksum), and --artifact github still names its upload by it, so a workflow that uploads the plan is unchanged. When $GITHUB_OUTPUT is not set, orun plan succeeds and warns that nothing was written instead of staying silent. The orun plan reference describes both forms.