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.