v2.17.0
Release notes for orun v2.17.0.
This release graduates the remote state backend into the Orun Platform client: a credential-agnostic CLI that authenticates a session, links a repo to an org/project, coordinates runs against a hosted backend, and pushes the service catalog into an org-global browser — all over the same content-addressed object model orun already records on disk. The cockpit also lands its Catalog surface as the single home for browse, run, and history.
Highlights
- Orun Cloud client (OC0–OC6). The CLI now speaks the full hosted-backend
contract.
orun authmanages a local CLI session (browser + headless device login, rotating refresh tokens, OS-keychain storage);orun cloudlinks the current repo to an org/project and caches the scope.orun run --remote-statecoordinates execution against the backend — leases, live log streaming, and a fail-fast path before any backend call when you are not logged in or the repo is not linked. - Credential-agnostic CI. Inside GitHub Actions,
--remote-stateexchanges the workflow's OIDC token for a scoped backend session — no PAT, no stored secret. The OIDC-resolved org/project fills in any scope you did not pass explicitly, so the same command works locally and in CI. orun catalog push. Sync the resolved catalog snapshot to Orun Cloud and advance the catalog head, recording the source commit. The upload is a content set-difference (only the blobs the server lacks), so a re-push transfers ~zero bytes.orun catalog refresh --pushdoes both in one step.orun run --localescape hatch. Force local filesystem state for a single run, overriding any remote-state config/flags — the safe fallback when the backend is down.orun logs --follow. Live-tail a job's log from the backend (--remote-state --job <id>), polling from afromSeqcursor until the job completes.- Cockpit Catalog surface. The cockpit's Catalog replaces the old Components surface as one home for browse, run, history, and the changed/affected overlay. A two-line header carries source context (repo, branch, commit) alongside an animated brand mark, and the live step-log view no longer leaves ghost rows while streaming.
Orun Cloud: the platform client
The remote state backend is no longer a single-tenant side door — it is the client half of the Orun Platform. Three commands frame the lifecycle:
| Command | What it does |
|---|---|
orun auth login | Browser or --device headless login. Stores only Orun-issued access/refresh tokens (never a GitHub PAT) in the OS keychain, falling back to ~/.orun/credentials.json (0600). |
orun cloud link | Resolves the git remote → picks/creates an org/project → caches the scope in ~/.orun/config.yaml. Non-interactive --org/--project for CI. |
orun run --remote-state | Coordinates the run against the backend: claims work under the linked scope, holds a lease (server-driven interval; lease_lost preempts), and streams logs live. |
Auth and scope resolution follow a single precedence everywhere: explicit flag →
environment → cached link → (in CI) the OIDC-exchanged scope. See
orun auth and orun cloud.
Credential-agnostic CI
In GitHub Actions, the CLI requests the workflow's OIDC token and exchanges it at
the backend for a short-lived, org/project-scoped session. There is no long-lived
secret to provision: the same orun run --remote-state (or orun catalog push)
that works at your desk works unchanged in CI, with the OIDC-resolved scope
filling in anything you left unset.
Run coordination
orun run --remote-state delegates DAG ordering to the backend. Each matrix job
runs orun run --remote-state --job <id>, claims its work under a lease, polls
until its dependencies complete, and streams step logs to the backend as it goes.
When the backend is unreachable, orun run --local forces local filesystem state
so a run is never blocked on the platform.
Publishing the catalog
orun catalog push syncs the locally resolved catalogs/current closure to Orun
Cloud and advances the catalog head, recording the source git commit. The
org-global catalog browser reflects the new snapshot within seconds.
orun catalog refresh # (re)resolve the workspace
orun catalog push # upload the closure + advance the head
orun catalog refresh --push # both in one step
orun catalog push --environment staging # advance a named environment head
Because the object model is content-addressed, the upload is a set difference —
only the blobs the server is missing are transferred, and the head advance fails
closed if the closure was not uploaded first. See
orun catalog.
Object-model transport
The same object graph orun keeps under .orun/objectmodel/ now has HTTP
transports for its ObjectStore and RefStore, so a remote backend is a drop-in
endpoint behind the existing ModelReader read seam. Large objects upload via a
multipart sub-protocol, and the remote log pipeline spills to file under
backpressure. The on-disk schema is unchanged — remote is just another driver.
Cockpit
- Catalog replaces Components. The Catalog surface is now the single home for browsing entities, launching component-scoped runs, viewing history, and the changed/affected overlay — the standalone Components surface is gone.
- Two-line header. The cockpit header now shows source context (repository, branch, commit) on a second line, next to an animated brand mark.
- Steadier live logs. The streaming step-log view was stabilized — no more ghost rows while a run streams and you scroll.
Also in this release
- Work plane (internal, W0–W4). Foundations for
orun-work— a content-addressed system of record for delivery: PR-webhook ingestion, the delivery-decision core, and content-addressed sealing. Internal for now; no user-facing CLI surface yet. - Cross-language golden vectors.
objgoldenpublishes authoritative cross-language golden vectors for the object model, so non-Go readers can be validated byte-for-byte against the canonical encoder.
References
orun auth— CLI session login, status, token.orun cloud— repo ↔ org/project link and scope.orun catalog—pushandrefresh --push.orun run—--remote-statecoordination and the--localescape hatch.orun logs—--followlive tail.- Cockpit overview — the Catalog surface.