Running locally

Run any workflow on your machine with the local runner.

Because workflows are programs, they run anywhere Node runs. The plain-ci runner ships with @plainalpha/ci and executes workflows on your machine with the same loading and validation as the hosted runner.

List workflows

From the repository root:

pnpm plain-ci list

This loads .plain/workflows/ and prints every workflow it finds, with its triggers. If a workflow has a type error, you find out here, not three pushes later.

Run a workflow

pnpm plain-ci run ci

The run executes in a subprocess sandbox with output streaming to your terminal. Iterate on the workflow file and re-run; the loop is seconds, not push-and-wait.

Simulating events

A workflow can behave differently per trigger, so the runner lets you choose what to simulate:

pnpm plain-ci run ci --event pull_request --branch feature/search

ctx.trigger and ctx.git reflect the simulated event, exercising the same code paths a real PR would.

Differences from hosted runs

  • Secrets come from your local environment rather than the repository's encrypted store.
  • Substrate writes (ctx.issues, ctx.comments) need a server to write to; locally, the run explains what it would have done rather than mutating production from your laptop.
  • ai.chat requires credentials in hosted runs; locally it tells you what to configure.

The contract is: if it runs locally, the hosted run executes the same definition the same way. "Works locally, fails in CI" stops being a category you budget time for.