






















@@ -0,0 +1,162 @@
1+---
2+name: openclaw-testing
3+description: Choose, run, rerun, or debug OpenClaw tests, CI checks, Docker E2E lanes, release validation, and the cheapest safe verification path.
4+---
5+6+# OpenClaw Testing
7+8+Use this skill when deciding what to test, debugging failures, rerunning CI,
9+or validating a change without wasting hours.
10+11+## Read First
12+13+- `docs/reference/test.md` for local test commands.
14+- `docs/ci.md` for CI scope, release checks, Docker chunks, and runner behavior.
15+- Scoped `AGENTS.md` files before editing code under a subtree.
16+17+## Default Rule
18+19+Prove the touched surface first. Do not reflexively run the whole suite.
20+21+1. Inspect the diff and classify the touched surface:
22+- source: `pnpm changed:lanes --json`, then `pnpm check:changed`
23+- tests only: `pnpm test:changed`
24+- one failing file: `pnpm test <path-or-filter> -- --reporter=verbose`
25+- workflow-only: `git diff --check`, workflow syntax/lint (`actionlint` when available)
26+- docs-only: `pnpm docs:list`, docs formatter/lint only if docs tooling changed or requested
27+2. Reproduce narrowly before fixing.
28+3. Fix root cause.
29+4. Rerun the same narrow proof.
30+5. Broaden only when the touched contract demands it.
31+32+## Guardrails
33+34+- Do not kill unrelated processes or tests. If something is running elsewhere, treat it as owned by the user or another agent.
35+- Do not run expensive local Docker, full release checks, full `pnpm test`, or full `pnpm check` unless the user asks or the change genuinely requires it.
36+- Prefer GitHub Actions for release/Docker proof when the workflow already has the prepared image and secrets.
37+- Use `scripts/committer "<msg>" <paths...>` when committing; stage only your files.
38+- If deps are missing, run `pnpm install`, retry once, then report the first actionable error.
39+40+## Local Test Shortcuts
41+42+```bash
43+pnpm changed:lanes --json
44+pnpm check:changed
45+pnpm test:changed
46+pnpm test:changed:focused
47+pnpm test <path-or-filter> -- --reporter=verbose
48+OPENCLAW_VITEST_MAX_WORKERS=1 pnpm test <path-or-filter>
49+```
50+51+Use targeted file paths whenever possible. Avoid raw `vitest`; use the repo
52+`pnpm test` wrapper so project routing, workers, and setup stay correct.
53+54+## CI Debugging
55+56+Start with current run state, not logs for everything:
57+58+```bash
59+gh run list --branch main --limit 10
60+gh run view <run-id> --json status,conclusion,headSha,url,jobs
61+gh run view <run-id> --job <job-id> --log
62+```
63+64+- Check exact SHA. Ignore newer unrelated `main` unless asked.
65+- For cancelled same-branch runs, confirm whether a newer run superseded it.
66+- Fetch full logs only for failed or relevant jobs.
67+68+## Docker
69+70+Docker is expensive. First inspect the scheduler without running Docker:
71+72+```bash
73+OPENCLAW_DOCKER_ALL_DRY_RUN=1 pnpm test:docker:all
74+OPENCLAW_DOCKER_ALL_DRY_RUN=1 OPENCLAW_DOCKER_ALL_LANES=install-e2e pnpm test:docker:all
75+```
76+77+Run one failed lane locally only when explicitly asked or when GitHub is not
78+usable:
79+80+```bash
81+OPENCLAW_DOCKER_ALL_LANES=<lane> \
82+OPENCLAW_DOCKER_ALL_BUILD=0 \
83+OPENCLAW_DOCKER_ALL_PREFLIGHT=0 \
84+OPENCLAW_SKIP_DOCKER_BUILD=1 \
85+OPENCLAW_DOCKER_E2E_IMAGE='<prepared-image>' \
86+pnpm test:docker:all
87+```
88+89+For release validation, prefer the reusable GitHub workflow input:
90+91+```yaml
92+docker_lanes: install-e2e
93+```
94+95+Multiple lanes are allowed:
96+97+```yaml
98+docker_lanes: install-e2e bundled-channel-update-acpx
99+```
100+101+That skips the three chunk matrix and runs one targeted Docker job against the
102+prepared GHCR image. Release-path normal mode remains max three Docker chunk
103+jobs:
104+105+- `core`
106+- `package-update`
107+- `plugins-integrations`
108+109+Every scheduler run writes `.artifacts/docker-tests/**/summary.json`. Read it
110+before rerunning. Lane entries include `command`, `rerunCommand`, status,
111+timing, timeout state, and log file path.
112+113+## Docker Expected Timings
114+115+Treat these as ballpark. Blacksmith queue time, GHCR pull speed, provider
116+latency, npm cache state, and Docker daemon health can dominate.
117+118+Current local timing artifact (`.artifacts/docker-tests/lane-timings.json`) has
119+these rough bands:
120+121+- Tiny lanes, seconds to under 1 minute:
122+`agents-delete-shared-workspace` ~3s, `plugin-update` ~7s,
123+`config-reload` ~14s, `pi-bundle-mcp-tools` ~15s, `onboard` ~18s,
124+`session-runtime-context` ~20s, `gateway-network` ~34s, `qr` ~44s.
125+- Medium deterministic lanes, ~1-5 minutes:
126+`npm-onboard-channel-agent` ~96s, `openai-image-auth` ~99s,
127+bundled channel/update lanes usually ~90-300s, `openwebui` ~225s,
128+`mcp-channels` ~274s.
129+- Heavy deterministic lanes, ~6-10 minutes:
130+`bundled-channel-root-owned` ~429s,
131+`bundled-channel-setup-entry` ~420s,
132+`bundled-channel-load-failure` ~383s,
133+`cron-mcp-cleanup` ~567s.
134+- Live provider lanes, often ~15-20 minutes:
135+`live-gateway` ~958s, `live-models` ~1054s.
136+- Installer/release lanes:
137+`install-e2e` and package-update paths can vary widely with npm, provider,
138+and package registry behavior. Budget tens of minutes; prefer GitHub targeted
139+reruns over local repeats.
140+141+Default fallback lane timeout is 120 minutes. A timeout usually means debug the
142+lane log/artifacts first, not “run the whole thing again.”
143+144+## Failure Workflow
145+146+1. Identify exact failing job, SHA, lane, and artifact path.
147+2. Read `summary.json` and the failed lane log tail.
148+3. If the lane has `rerunCommand`, use that command as the starting point.
149+4. For Docker release failures, dispatch `docker_lanes=<failed-lane>` on GitHub
150+before considering local Docker.
151+5. Patch narrowly, then rerun the failed file/lane only.
152+6. Broaden to `pnpm check:changed` or CI only after the isolated proof passes.
153+154+## When To Escalate
155+156+- Public SDK/plugin contract changes: run changed gate plus relevant extension
157+validation.
158+- Build output, lazy imports, package boundaries, or published surfaces:
159+include `pnpm build`.
160+- Workflow edits: run `actionlint` or equivalent workflow sanity.
161+- Release branch or tag validation: use release docs and GitHub workflows; avoid
162+local Docker unless Peter explicitly asks.
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。