v2.86.0
Binaries and the merged-pull-request list are on the GitHub releases page.
A build says what it has made
A bootstrap takes the best part of an hour. Its event stream said what the engine was doing, a line at a time; what a person watching it wants to keep in view is what it has made. So the stream now carries facts beside its lines: one record per thing, replaced when the thing changes (orun-cloud saas-build-panel BV3).
| Kind | Filed by | What it says |
|---|---|---|
repo | orun.repo/ensure@v1 | the repository, whether this build created it, and its visibility when it did |
epic | orun.task/ensure@v1 (kind: epic) | the epic the build files its work under |
pr | orun.pr/land@v1 | the pull request: opening before the push, checks the moment it is open, then merged, failing or open (a draft) |
url | orun.http/probe@v1 | each address checked, its environment, and whether it answered |
run | orun.run/watch@v1 | the convergence run, as soon as the watch finds it |
- A fact is an event with
state: "fact"and no narration; its payload is inmeta:fact("1"),key,kind,label,value,href,env,status,private,pin. - It is sent only when it changed: a pull request whose checks run for forty minutes is one event, not one a poll.
- A landing reports its pull request while it waits on CI, and a watch its run while it deploys — actions now report progress mid-flight.
- A failing hook's facts arrive before its phase's
failed, never after. - A health check (
/health,/healthz,/ready, …) and a convergence run are recorded withpin: "false": kept, but not an address a person opens.
orun baseline new and orun new print each fact as a row under the step
that made it (--progress plain stays narration only; json is the raw
stream).
Every step that matters leaves a line
A hook that authored no narrate: was followed by silence however long it
took. Now the action says what it did, from its outputs:
- Created the repository acme/notes. / The repository acme/notes is ready.
- Merged #7 into main. / There was nothing to land: main already has every file.
- The convergence run on main is green.
- All 4 addresses answered.
- Opened the epic EP-3.
- Minted 3 secret(s) from your connection.
An authored narrate: still wins. Bookkeeping — finding a milestone or a
task — still says nothing, as it is still not announced.
The run's own hooks, and the run's own end
preInstantiateandpostInstantiatehooks are reported like a phase's, underphase: "": the epic a build opens before its first phase is the first thing a reader sees it make. A failed one is reported with its hook id before the run's own failure.- A run with an event sink now says when it starts and when it is over: a
run-level
startedfirst, anddoneorfailed(with the error) last —phase: ""and no step. A parked run says nothing: it is waiting, and--resumecontinues it. Orunbase gives a repository's build lease back on that end; until now a local build held it until the lease expired. A terminal does not print these two lines.
Labels for what a hook makes
Three optional keys on any hook:
- id: land
uses: orun.pr/land@v1
label: Product # what a reader calls its facts
- id: reprobe
uses: orun.http/probe@v1
quiet: true # no facts, no generated line; narrate: still speaks
- id: verify
uses: orun.http/probe@v1
pin: false # recorded, kept off a reader's pinned list
And orun.http/probe@v1 takes targets beside urls, each
{url, env, label, pin}. Without them, a probe's addresses take their
environment from the host (notes-console-stage.acme.workers.dev is
stage) and a health check is not pinned. The probe now outputs urls and
failedUrls, one per line.
Fixes
- The stream is delivered in order. The emitter handed events to the
sink after releasing its lock, so two events emitted at once could arrive
out of
seqorder — a hole the platform's door refuses. It now delivers under the lock. - A failed landing names its pull request as one. Its URL was reported
as
runUrl, which a console reads as the deploy that failed; it is nowprUrl(andprNumber). - A wait names the hook. A pre or post hook that parked reported the
action's id (
orun.run/watch@v1) as the step and in.orun/run.state; it now names the hook (converge), as anawaithook always did. - Mapping-form phase hooks get line numbers. A misspelled parameter in a
pre:orawait:hook is reported with its line, like one in a bare list.
Compatibility
- A consumer that reads a phase's latest event as where it stands must skip
factevents, and must read a run-level event with a step as a step, not as the end of the run. Orunbase does both from saas-build-panel BV2 on. - The new hook keys are ignored by earlier releases, so a baseline may use them before every builder has this one.
orun.http/probe@v1still takesurlsalone; a probe with neitherurlsnortargetsis a blueprint error, as an empty one was.