title, description, summary, read_when
| title |
description |
summary |
read_when |
| CI Pipeline |
How the OpenClaw CI pipeline works |
CI job graph, scope gates, and local command equivalents |
| You need to understand why a CI job did or did not run |
| You are debugging failing GitHub Actions checks |
|
CI Pipeline
The CI runs on every push to main and every pull request. It uses smart scoping to skip expensive jobs when only docs or native code changed.
Job Overview
| Job |
Purpose |
When it runs |
docs-scope |
Detect docs-only changes |
Always |
changed-scope |
Detect which areas changed (node/macos/android) |
Non-docs PRs |
check |
TypeScript types, lint, format |
Non-docs changes |
check-docs |
Markdown lint + broken link check |
Docs changed |
code-analysis |
LOC threshold check (1000 lines) |
PRs only |
secrets |
Detect leaked secrets |
Always |
build-artifacts |
Build dist once, share with other jobs |
Non-docs, node changes |
release-check |
Validate npm pack contents |
After build |
checks |
Node/Bun tests + protocol check |
Non-docs, node changes |
checks-windows |
Windows-specific tests |
Non-docs, node changes |
macos |
Swift lint/build/test + TS tests |
PRs with macos changes |
android |
Gradle build + tests |
Non-docs, android changes |
Fail-Fast Order
Jobs are ordered so cheap checks fail before expensive ones run:
docs-scope + code-analysis + check (parallel, ~1-2 min)
build-artifacts (blocked on above)
checks, checks-windows, macos, android (blocked on build)
Runners
| Runner |
Jobs |
blacksmith-16vcpu-ubuntu-2404 |
Most Linux jobs, including scope detection |
blacksmith-16vcpu-windows-2025 |
checks-windows |
macos-latest |
macos, ios |
Local Equivalents