惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

D
Docker
V
V2EX
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
云风的 BLOG
云风的 BLOG
Blog — PlanetScale
Blog — PlanetScale
Recent Announcements
Recent Announcements
Last Week in AI
Last Week in AI
博客园 - Franky
Microsoft Security Blog
Microsoft Security Blog
Hugging Face - Blog
Hugging Face - Blog
H
Hackread – Cybersecurity News, Data Breaches, AI and More
Vercel News
Vercel News
MyScale Blog
MyScale Blog
大猫的无限游戏
大猫的无限游戏
罗磊的独立博客
H
Help Net Security
月光博客
月光博客
Martin Fowler
Martin Fowler
博客园 - 【当耐特】
宝玉的分享
宝玉的分享
P
Proofpoint News Feed
GbyAI
GbyAI
腾讯CDC
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More

Recent Commits to openclaw:main

test: merge chat side-result checks · openclaw/openclaw@ddd2c2a test: merge cron history checks · openclaw/openclaw@f7eb746 test: merge responsive navigation shell checks · openclaw/openclaw@c2e4b47 docs(changelog): add codex oauth fixes · openclaw/openclaw@628e6cd test: merge navigation routing cases · openclaw/openclaw@5d8cecb Tests: mock channel registry bundled fallback · openclaw/openclaw@2b08233 Secrets: avoid broad web search discovery for single plugin config · openclaw/openclaw@a464f59 test: merge config view browser checks · openclaw/openclaw@20cf511 fix(status): align oauth health with runtime · openclaw/openclaw@eed7116 feat: add macOS screen snapshots for monitor preview (#67954) thanks … · openclaw/openclaw@f377db1 fix: report shared auth scopes in hello-ok (#67810) thanks @BunsDev · openclaw/openclaw@0b6c39b Auto-reply: avoid eager bundled route fallback · openclaw/openclaw@3ea1bf4 Tests: narrow session binding contract setup · openclaw/openclaw@54e4e16 fix(macOS): enable undo/redo in webchat composer text input (#34962) · openclaw/openclaw@00951dc Tests: speed up channel setup promotion · openclaw/openclaw@82b529a Docs: refresh agent instructions · openclaw/openclaw@5775fe2 fix(auth): serialize OAuth refresh across agents to fix #26322 (#67876) · openclaw/openclaw@8e79080 test: allow ollama public surface boundary test · openclaw/openclaw@7d4f1a6 Docs: add test performance guardrails · openclaw/openclaw@89706d3 Tests: restore context-engine usage proof · openclaw/openclaw@e4c4f95 Tests: slim context engine runtime coverage · openclaw/openclaw@74c198f ci: retry failed custom checkouts · openclaw/openclaw@0ee5baf test: trim duplicate provider auth onboarding cases · openclaw/openclaw@1ffc02e matrix: fix sessions_spawn --thread subagent session spawning (#67643) · openclaw/openclaw@1ce2596 test: reduce auth choice fixture churn · openclaw/openclaw@857b9cd test: mock health status config boundaries · openclaw/openclaw@9d5ab4a test: mock onboard config io boundary · openclaw/openclaw@299694d test: mock legacy state plugin boundaries · openclaw/openclaw@2713089 test: mock channel install boundaries · openclaw/openclaw@b945248 test: mock doctor preview channel boundaries · openclaw/openclaw@b1a3ad4
ci: expand docker smoke changed scope · openclaw/openclaw...
steipete · 2026-04-23 · via Recent Commits to openclaw:main
Original file line numberDiff line numberDiff line change

@@ -47,7 +47,7 @@ Jobs are ordered so cheap checks fail before expensive ones run:

4747

Scope logic lives in `scripts/ci-changed-scope.mjs` and is covered by unit tests in `src/scripts/ci-changed-scope.test.ts`.

4848

CI workflow edits validate the Node CI graph plus workflow linting, but do not force Windows, Android, or macOS native builds by themselves; those platform lanes stay scoped to platform source changes.

4949

Windows Node checks are scoped to Windows-specific process/path wrappers, npm/pnpm/UI runner helpers, package manager config, and the CI workflow surfaces that execute that lane; unrelated source, plugin, install-smoke, and test-only changes stay on the Linux Node lanes so they do not reserve a 16-vCPU Windows worker for coverage that is already exercised by the normal test shards.

50-

The separate `install-smoke` workflow reuses the same scope script through its own `preflight` job. It computes `run_install_smoke` from the narrower changed-smoke signal, so Docker/install smoke only runs for install, packaging, and container-relevant changes. Its QR package smoke forces the Docker `pnpm install` layer to rerun while preserving the BuildKit pnpm store cache, so it still exercises installation without redownloading dependencies on every run. Its gateway-network e2e reuses the runtime image built earlier in the job, so it adds real container-to-container WebSocket coverage without adding another Docker build. A separate `docker-e2e-fast` job runs the bounded bundled-plugin Docker profile under a 120-second command timeout: setup-entry dependency repair plus synthetic bundled-loader failure isolation. The full bundled update/channel matrix remains manual/full-suite because it performs repeated real npm update and doctor repair passes.

50+

The separate `install-smoke` workflow reuses the same scope script through its own `preflight` job. It computes `run_install_smoke` from the narrower changed-smoke signal, so Docker/install smoke runs for install, packaging, container-relevant changes, bundled extension production changes, and the core plugin/channel/gateway/Plugin SDK surfaces that the Docker smoke jobs exercise. Test-only and docs-only edits do not reserve Docker workers. Its QR package smoke forces the Docker `pnpm install` layer to rerun while preserving the BuildKit pnpm store cache, so it still exercises installation without redownloading dependencies on every run. Its gateway-network e2e reuses the runtime image built earlier in the job, so it adds real container-to-container WebSocket coverage without adding another Docker build. A separate `docker-e2e-fast` job runs the bounded bundled-plugin Docker profile under a 120-second command timeout: setup-entry dependency repair plus synthetic bundled-loader failure isolation. The full bundled update/channel matrix remains manual/full-suite because it performs repeated real npm update and doctor repair passes.

5151
5252

Local changed-lane logic lives in `scripts/changed-lanes.mjs` and is executed by `scripts/check-changed.mjs`. That local gate is stricter about architecture boundaries than the broad CI platform scope: core production changes run core prod typecheck plus core tests, core test-only changes run only core test typecheck/tests, extension production changes run extension prod typecheck plus extension tests, and extension test-only changes run only extension test typecheck/tests. Public Plugin SDK or plugin-contract changes expand to extension validation because extensions depend on those core contracts. Release metadata-only version bumps run targeted version/config/root-dependency checks. Unknown root/config changes fail safe to all lanes.

5353
Original file line numberDiff line numberDiff line change

@@ -44,7 +44,9 @@ const CONTROL_UI_I18N_SCOPE_RE =

4444

const NATIVE_ONLY_RE =

4545

/^(apps\/android\/|apps\/ios\/|apps\/macos\/|apps\/macos-mlx-tts\/|apps\/shared\/|Swabble\/|appcast\.xml$)/;

4646

const CHANGED_SMOKE_SCOPE_RE =

47-

/^(Dockerfile$|\.npmrc$|package\.json$|pnpm-lock\.yaml$|pnpm-workspace\.yaml$|scripts\/install\.sh$|scripts\/postinstall-bundled-plugins\.mjs$|scripts\/test-install-sh-docker\.sh$|scripts\/docker\/|scripts\/e2e\/Dockerfile$|scripts\/e2e\/(?:Dockerfile\.qr-import|bundled-channel-runtime-deps-docker|qr-import-docker|gateway-network-docker)\.sh$|src\/plugins\/bundled-runtime-deps\.ts$|extensions\/[^/]+\/package\.json$|\.github\/workflows\/install-smoke\.yml$|\.github\/actions\/setup-node-env\/action\.yml$)/;

47+

/^(Dockerfile$|\.npmrc$|package\.json$|pnpm-lock\.yaml$|pnpm-workspace\.yaml$|scripts\/install\.sh$|scripts\/postinstall-bundled-plugins\.mjs$|scripts\/test-install-sh-docker\.sh$|scripts\/docker\/|scripts\/e2e\/(?:Dockerfile(?:\.qr-import)?|.*\.sh)$|src\/plugins\/bundled-runtime-deps\.ts$|extensions\/[^/]+\/package\.json$|\.github\/workflows\/install-smoke\.yml$|\.github\/actions\/setup-node-env\/action\.yml$)/;

48+

const CHANGED_SMOKE_RUNTIME_SCOPE_RE =

49+

/^(src\/(?:channels|gateway|plugin-sdk|plugins)\/|extensions\/)/;

4850
4951

/**

5052

* @param {string[]} changedPaths

@@ -112,7 +114,10 @@ export function detectChangedScope(changedPaths) {

112114

runWindows = true;

113115

}

114116
115-

if (CHANGED_SMOKE_SCOPE_RE.test(path)) {

117+

if (

118+

CHANGED_SMOKE_SCOPE_RE.test(path) ||

119+

(CHANGED_SMOKE_RUNTIME_SCOPE_RE.test(path) && !TEST_ONLY_PATH_RE.test(path))

120+

) {

116121

runChangedSmoke = true;

117122

}

118123
Original file line numberDiff line numberDiff line change

@@ -74,7 +74,7 @@ describe("detectChangedScope", () => {

7474

});

7575
7676

it("enables node lane for node-relevant files", () => {

77-

expect(detectChangedScope(["src/plugins/runtime/index.ts"])).toEqual({

77+

expect(detectChangedScope(["src/config/defaults.ts"])).toEqual({

7878

runNode: true,

7979

runMacos: false,

8080

runAndroid: false,

@@ -313,6 +313,15 @@ describe("detectChangedScope", () => {

313313

runChangedSmoke: true,

314314

runControlUiI18n: false,

315315

});

316+

expect(detectChangedScope(["scripts/e2e/plugin-update-unchanged-docker.sh"])).toEqual({

317+

runNode: true,

318+

runMacos: false,

319+

runAndroid: false,

320+

runWindows: false,

321+

runSkillsPython: false,

322+

runChangedSmoke: true,

323+

runControlUiI18n: false,

324+

});

316325

expect(detectChangedScope(["scripts/postinstall-bundled-plugins.mjs"])).toEqual({

317326

runNode: true,

318327

runMacos: false,

@@ -333,6 +342,75 @@ describe("detectChangedScope", () => {

333342

});

334343

});

335344
345+

it("runs changed-smoke for Docker-covered core and extension runtime surfaces", () => {

346+

expect(detectChangedScope(["src/plugins/loader.ts"])).toEqual({

347+

runNode: true,

348+

runMacos: false,

349+

runAndroid: false,

350+

runWindows: false,

351+

runSkillsPython: false,

352+

runChangedSmoke: true,

353+

runControlUiI18n: false,

354+

});

355+

expect(detectChangedScope(["src/plugin-sdk/provider-entry.ts"])).toEqual({

356+

runNode: true,

357+

runMacos: false,

358+

runAndroid: false,

359+

runWindows: false,

360+

runSkillsPython: false,

361+

runChangedSmoke: true,

362+

runControlUiI18n: false,

363+

});

364+

expect(detectChangedScope(["src/gateway/protocol/messages.ts"])).toEqual({

365+

runNode: true,

366+

runMacos: false,

367+

runAndroid: false,

368+

runWindows: false,

369+

runSkillsPython: false,

370+

runChangedSmoke: true,

371+

runControlUiI18n: false,

372+

});

373+

expect(detectChangedScope(["src/channels/plugins/catalog.ts"])).toEqual({

374+

runNode: true,

375+

runMacos: false,

376+

runAndroid: false,

377+

runWindows: false,

378+

runSkillsPython: false,

379+

runChangedSmoke: true,

380+

runControlUiI18n: false,

381+

});

382+

expect(detectChangedScope([bundledPluginFile("matrix", "index.ts")])).toEqual({

383+

runNode: true,

384+

runMacos: false,

385+

runAndroid: false,

386+

runWindows: false,

387+

runSkillsPython: false,

388+

runChangedSmoke: true,

389+

runControlUiI18n: false,

390+

});

391+

});

392+
393+

it("keeps changed-smoke off for runtime-surface tests", () => {

394+

expect(detectChangedScope(["src/plugins/loader.test.ts"])).toEqual({

395+

runNode: true,

396+

runMacos: false,

397+

runAndroid: false,

398+

runWindows: false,

399+

runSkillsPython: false,

400+

runChangedSmoke: false,

401+

runControlUiI18n: false,

402+

});

403+

expect(detectChangedScope([bundledPluginFile("matrix", "index.test.ts")])).toEqual({

404+

runNode: true,

405+

runMacos: false,

406+

runAndroid: false,

407+

runWindows: false,

408+

runSkillsPython: false,

409+

runChangedSmoke: false,

410+

runControlUiI18n: false,

411+

});

412+

});

413+
336414

it("runs control-ui locale check only for control-ui i18n surfaces", () => {

337415

expect(detectChangedScope(["ui/src/i18n/locales/en.ts"])).toEqual({

338416

runNode: true,