v2.35.0
Release notes for orun v2.35.0 — everything landed since v2.34.0. The
headline is orun-workflows-v3: the workflow engine comes home, in-process,
with a new language and no backward compatibility with torkflow/v1
files. This note supersedes the engine model described in the v2.32.0 notes.
Highlights
-
Workflows v3 — one language, one binary. The external torkflow engine boundary is deleted;
apiVersion: orun.dev/v1, kind: Workflowfiles are parsed, validated, and executed in-process by orun itself.- The language: pull-only
needs:edges, CEL expressions, three verbs —run:(argv, never a shell),action:(built-inshttp.request,script,sleep),workflow:(nested, cycle-detected). See the new Workflow schema reference. orun workflow validateis now a full compile check — DAG, verb exclusivity, actionwith:validation, CEL compilation, and reference visibility (a step can only read ancestors' outputs, so cross-branch races are rejected by construction).orun planruns the same check on embedded workflows, so an invalid file fails the plan, not the run.poll:— the wait primitive. Re-execute a step's verb on an interval until a CEL condition holds; a non-zerorun:exit is an evaluable attempt, not a fault — built forgh pr checks-style wait loops.- Resume. Run state lives under
.orun/wfruns/<execId>/;orun workflow run --resume <execId>re-executes only non-succeeded steps and refuses a changed file digest. envInherit— a declared, review-visible allowlist of host env vars passed through torun:steps (SSH_AUTH_SOCKand kin). Nothing ambient leaks in.- Live step streaming — step output streams line-buffered as it happens; parallel steps never interleave mid-line.
- The self shim — a step invoking
orunalways gets the binary running the workflow, never a stale install onPATH.
- The language: pull-only
-
Remote workflow refs.
orun workflow runacceptsgithub:owner/repo@ref//path/to/workflow.yamlandhttps://…references — fetched (withGITHUB_TOKEN/GH_TOKEN), pinned to a resolved commit, and exposed to steps asORUN_FLOW_SOURCE_{REPO,REF,SHA,URL}so a flow can fetch its own payload at exactly the commit it ran from. -
Resume-aware CI reruns:
--retrygot real. With exec-id = run id, a CI rerun resumes the same execution.orun run --job <id> --retrynow (1) re-opens the job's failed remote claim (the platform's sanctionedJOB_RETRIEDre-open) and (2) waits out failed upstream dependencies while their own retry lanes recover, bounded by the 30-minute dependency deadline.gh run rerun --failedon an orun-driven workflow just works. -
Secrets, end to end. New docs: Secrets,
orun secrets, Scope references.optionalSecretEnv— best-effort component references: an unseeded key is skipped at resolve instead of failing the job. Wire now, seed later.secretOutputs— declared job output secrets. Steps appendKEY=valuelines to$ORUN_SECRET_OUTPUTS; after the job succeeds the runner enforces the declared-key allow-list and publishes the batch over the run's lease-bound channel. A minted database password reaches the platform without transiting CI logs or a human.- Scope-reference grammar —
secret://,config://, andflag://share one named-dimension grammar (secret://project:api/env:prod/KEY@3) with contextual omission: an omitted dimension binds to the run context, so one manifest line works in every environment. Legacy positional references still parse and pin identically. - Secrets UX — scope selectors (
--env/--project/--workspace) onreveal/rotate/versions, one-shot compositerevealpreflight, typo suggestions that exit non-zero,--jsoneverywhere (metadata only),set --from-brokerfor provider-rotated secrets androtate --remintfor break-glass re-mints.
-
orun integrations— the console-parity verb tree. List connections, check provider status, author integration-bound secrets (<provider> secret create … --mode brokered|rotated), and manage scope templates — registry-served, offline-capable viaorun integrations sync, and value-less by design. Seeorun integrations. -
Terraform state on the platform. Remote component jobs export a complete
TF_HTTP_*environment pointingbackend "http" {}at Orun Cloud's native Terraform state store — per(component, environment)addressing, per-step re-minted tokens, no tenant S3 bucket or OIDC role. See Terraform state on the platform. -
Headless cloud linking.
orun cloud linkandorun cloud checkhonorORUN_TOKEN, so containers and CI drivers can self-link without a browser login. -
Auth resilience. Browser login and device-flow polls ride out
429 rate_limitedand transient transport errors; concurrent orun processes no longer race the session store into a dead token family.
Upgrade notes
torkflow/v1workflow files are rejected — there is no converter. The v3 design's mapping table is the manual path: drop thespec:wrapper, replaceoutboundEdges/nextStepName/branchNamewithneeds:pull edges,actionRefwith one of the three verbs,Trigger.*withinputs.*,maxParallelStepswithmaxParallel.- An intent declaring
execution.workflowEnginefails to load — delete the block.orun workflow engine-digestis removed andORUN_TORKFLOW_ENGINEis no longer read. - Workflow digests are unchanged (
sha256:over raw bytes) — plans and provenance locks for unchanged files stay stable. orun secrets set --from-brokeris deprecated (works for one release); it prints the exactorun integrations <provider> secret createreplacement for your invocation.orun policy test --component-typeis retired —component.typewas never a resolvable fact. Use--component <name>, or scope the secret to the component directly.