v2.84.0
Binaries and the merged-pull-request list are on the GitHub releases page.
A dispatch plans what it names
A GitHub workflow_dispatch event matched no trigger binding, so a repository
that dispatched deploys planned them with a second, hand-written command in CI:
borrow another trigger by name, pass --component and --env from the inputs,
leave out --changed, and detach HEAD so the plan would not re-push the
catalog (orun-manual-triggers). A binding can now say all of that itself:
github-dispatch:
on: { provider: github, event: workflow_dispatch, branches: [main] }
plan:
scope: selected
components: inputs.component
environments: inputs.environment
autopush: false
requireRule: true
scope: selectedmakes the event's selection the whole plan.--changedand--filesare ignored for it. The selection is exact and never empty: a missing or empty value, an unknown component, a wildcard, an environment the trigger does not activate, or a component that does not subscribe to a selected environment fails the plan, naming the cause.componentsandenvironmentsare dot-paths into the event payload, read likebaseandhead: a comma-separated string or a list of strings. Under--triggerthere is no event, so--envand--componentare the selection.autopush: falseskips the plan-time catalog push for plans the binding resolves;--push-catalogstill pushes.
The same orun plan --from-ci github --event-file … --changed now serves pull
requests, pushes and dispatches.
A lane opts in
requireRule: true plans a lane under the binding only if one of its
profileRules names the binding. The rule is both the switch and what the lane
runs — deploy in stage, the check in dev — so a component decides which of
its lanes a person may run:
- name: stage
profile: verify
profileRules:
- { profile: deploy, when: { triggerRef: github-push-main } }
- { profile: deploy, when: { triggerRef: github-dispatch } }
Under scope: selected it is strict: a selected lane that did not opt in fails
the plan, naming every such lane and the fix. Under another scope those lanes
are dropped.
The catalog says which lanes a person may run
Each opted-in lane is recorded as
spec.environments.<env>.manual: { trigger, profile }, so a backend can offer a
manual run only where a lane opted in. A component that opts nothing in keeps
its manifest hash.
Compatibility
- No option has an effect unless it is written: every existing binding plans exactly as before, and golden plans, checksums and revision keys are unchanged.
- A selected plan's trigger metadata records scope
selected; its object-model revision recordsfull(the revision scope isfull | changed). - Inline intent components do not carry profile rules into the catalog, so they
get no
manualfield.