You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
Commit 84daba8
Browse filesBrowse the repository at this point in the historyBrowse files
feat(promotion): gate promotion out of an org on a passing check
`orgs.<slug>.check: <name>` in promotion.yml names a vapi-checks.yml
check that must pass in that org before any transition promotes out of
it. The gate runs the same inline check as the PR workflow, built from
the source org's files at the promoted commit, using that org's key from
VAPI_PROMOTION_TOKENS.
- Checks are validated before any transition: the named check must exist
and read and run in the gated org.
- Transitions with no changes skip the gate; plan-only runs print
`check would run <name> in <org> (<n> simulations × <t> targets)`
and run nothing.
- On --apply the check runs after bindings refresh and before
promotionPlanApply writes the target. Any non-pass (failed,
incomplete, build error) throws `Promotion out of <org> blocked: check
<name> <outcome> (<run url>)`, so the target is untouched and earlier
transitions are still committed (previous change).
- A pass is reused for later transitions out of the same org in the same
run, and dropped once a transition applies into that org.
- The "Reconcile configured promotions" step gets timeout-minutes: 90 on
the step, not the job, so the always() commit step still runs.
- With no check: configured, promotion is unchanged: a test pins the
plan output to what the pre-gate code prints, and asserts no check runs
and vapi-checks.yml is never read.
- Docs: promotion.example.yml and README ("Check before promoting", and a
pointer from "PR Checks").
Refs TEST-141
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
0 commit comments