Skip to main content

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).

KindFiled byWhat it says
repoorun.repo/ensure@v1the repository, whether this build created it, and its visibility when it did
epicorun.task/ensure@v1 (kind: epic)the epic the build files its work under
prorun.pr/land@v1the pull request: opening before the push, checks the moment it is open, then merged, failing or open (a draft)
urlorun.http/probe@v1each address checked, its environment, and whether it answered
runorun.run/watch@v1the convergence run, as soon as the watch finds it
  • A fact is an event with state: "fact" and no narration; its payload is in meta: 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 with pin: "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​

  • preInstantiate and postInstantiate hooks are reported like a phase's, under phase: "": 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 started first, and done or failed (with the error) last — phase: "" and no step. A parked run says nothing: it is waiting, and --resume continues 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 seq order — 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 now prUrl (and prNumber).
  • 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 an await hook always did.
  • Mapping-form phase hooks get line numbers. A misspelled parameter in a pre: or await: 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 fact events, 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@v1 still takes urls alone; a probe with neither urls nor targets is a blueprint error, as an empty one was.