From 8b8df813d07bffd26f24fdb9601ef1ff2d3c48f1 Mon Sep 17 00:00:00 2001 From: Peter Steinberger Date: Wed, 22 Apr 2026 17:53:38 +0100 Subject: [PATCH] ci: keep native lanes native scoped --- docs/ci.md | 1 + scripts/ci-changed-scope.mjs | 7 ------- src/scripts/ci-changed-scope.test.ts | 8 ++++---- 3 files changed, 5 insertions(+), 11 deletions(-) diff --git a/docs/ci.md b/docs/ci.md index 081cbaf3f67..731e47d2bfc 100644 --- a/docs/ci.md +++ b/docs/ci.md @@ -45,6 +45,7 @@ Jobs are ordered so cheap checks fail before expensive ones run: 4. Heavier platform and runtime lanes fan out after that: `checks-fast-core`, `checks-fast-contracts-channels`, `checks-node-extensions`, `checks-node-core-test`, `extension-fast`, `checks`, `checks-windows`, `macos-node`, `macos-swift`, and `android`. Scope logic lives in `scripts/ci-changed-scope.mjs` and is covered by unit tests in `src/scripts/ci-changed-scope.test.ts`. +CI workflow edits validate the Node and Windows CI graph plus workflow linting, but do not force Android or macOS native builds by themselves; those platform lanes stay scoped to native source changes. 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. 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. diff --git a/scripts/ci-changed-scope.mjs b/scripts/ci-changed-scope.mjs index 12f7fdce3bf..a093a7e91c1 100644 --- a/scripts/ci-changed-scope.mjs +++ b/scripts/ci-changed-scope.mjs @@ -5,7 +5,6 @@ import { appendFileSync } from "node:fs"; const DOCS_PATH_RE = /^(docs\/|.*\.mdx?$)/; const SKILLS_PYTHON_SCOPE_RE = /^(skills\/|pyproject\.toml$)/; -const CI_WORKFLOW_SCOPE_RE = /^\.github\/workflows\/ci\.yml$/; const INSTALL_SMOKE_WORKFLOW_SCOPE_RE = /^\.github\/workflows\/install-smoke\.yml$/; const MACOS_PROTOCOL_GEN_RE = /^(apps\/macos\/Sources\/OpenClawProtocol\/|apps\/shared\/OpenClawKit\/Sources\/OpenClawProtocol\/)/; @@ -66,12 +65,6 @@ export function detectChangedScope(changedPaths) { runSkillsPython = true; } - if (CI_WORKFLOW_SCOPE_RE.test(path)) { - runMacos = true; - runAndroid = true; - runSkillsPython = true; - } - if (INSTALL_SMOKE_WORKFLOW_SCOPE_RE.test(path)) { runChangedSmoke = true; } diff --git a/src/scripts/ci-changed-scope.test.ts b/src/scripts/ci-changed-scope.test.ts index 1b110280c86..983fcb1ec86 100644 --- a/src/scripts/ci-changed-scope.test.ts +++ b/src/scripts/ci-changed-scope.test.ts @@ -170,13 +170,13 @@ describe("detectChangedScope", () => { }); }); - it("runs platform lanes when the CI workflow changes", () => { + it("keeps native platform lanes scoped when the CI workflow changes", () => { expect(detectChangedScope([".github/workflows/ci.yml"])).toEqual({ runNode: true, - runMacos: true, - runAndroid: true, + runMacos: false, + runAndroid: false, runWindows: true, - runSkillsPython: true, + runSkillsPython: false, runChangedSmoke: false, runControlUiI18n: false, });