From 8febc20e80f31298efc59bb3af6c490ecfdca58e Mon Sep 17 00:00:00 2001 From: Peter Steinberger Date: Wed, 22 Apr 2026 17:25:49 +0100 Subject: [PATCH] ci: reduce blacksmith test pressure --- .github/workflows/ci.yml | 6 +++--- docs/ci.md | 18 +++++++++--------- scripts/lib/ci-node-test-plan.mjs | 2 +- test/scripts/ci-node-test-plan.test.ts | 4 ++-- 4 files changed, 15 insertions(+), 15 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 162d804141e..95500243887 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -305,7 +305,7 @@ jobs: permissions: contents: read if: github.event_name != 'pull_request' || !github.event.pull_request.draft - runs-on: ${{ github.repository == 'openclaw/openclaw' && 'blacksmith-8vcpu-ubuntu-2404' || 'ubuntu-24.04' }} + runs-on: ubuntu-24.04 timeout-minutes: 20 env: PRE_COMMIT_HOME: .cache/pre-commit-security-fast @@ -396,7 +396,7 @@ jobs: permissions: contents: read if: github.event_name != 'pull_request' || !github.event.pull_request.draft - runs-on: ${{ github.repository == 'openclaw/openclaw' && 'blacksmith-8vcpu-ubuntu-2404' || 'ubuntu-24.04' }} + runs-on: ubuntu-24.04 timeout-minutes: 10 steps: - name: Checkout @@ -638,7 +638,7 @@ jobs: name: ${{ matrix.checkName }} needs: [preflight] if: needs.preflight.outputs.run_checks_fast == 'true' - runs-on: ${{ github.repository == 'openclaw/openclaw' && 'blacksmith-8vcpu-ubuntu-2404' || 'ubuntu-24.04' }} + runs-on: ubuntu-24.04 timeout-minutes: 60 strategy: fail-fast: false diff --git a/docs/ci.md b/docs/ci.md index 78dcc410c85..8919e860d82 100644 --- a/docs/ci.md +++ b/docs/ci.md @@ -51,21 +51,21 @@ Local changed-lane logic lives in `scripts/changed-lanes.mjs` and is executed by On pushes, the `checks` matrix adds the push-only `compat-node22` lane. On pull requests, that lane is skipped and the matrix stays focused on the normal test/channel lanes. -The slowest Node test families are split or balanced so each job stays small: channel contracts split registry and core coverage into eight weighted shards each, auto-reply reply command tests split into four include-pattern shards, the other large auto-reply reply prefix groups split into two shards each, and agentic gateway configs are spread across the existing agentic Node jobs instead of running as one serial tail. `check-additional` also separates package-boundary compile/canary work from runtime topology gateway/architecture work. +The slowest Node test families are split or balanced so each job stays small: channel contracts split registry and core coverage into eight weighted shards each, auto-reply reply command tests split into four include-pattern shards, the other large auto-reply reply prefix groups split into two shards each, and agentic gateway/plugin configs are spread across the existing source-only agentic Node jobs instead of waiting on built artifacts. `check-additional` also separates package-boundary compile/canary work from runtime topology gateway/architecture work. GitHub may mark superseded jobs as `cancelled` when a newer push lands on the same PR or `main` ref. Treat that as CI noise unless the newest run for the same ref is also failing. Aggregate shard checks use `!cancelled() && always()` so they still report normal shard failures but do not queue after the whole workflow has already been superseded. The CI concurrency key is versioned (`CI-v2-*`) so a GitHub-side zombie in an old queue group cannot indefinitely block newer main runs. ## Runners -| Runner | Jobs | -| -------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| `ubuntu-24.04` | `preflight`, short aggregate verifier jobs (`security-fast`, `check`, `check-additional`, `checks-fast-contracts-channels`), workflow-sanity, labeler, auto-response; install-smoke preflight also uses GitHub-hosted Ubuntu so the Blacksmith matrix can queue earlier | -| `blacksmith-8vcpu-ubuntu-2404` | `security-scm-fast`, `security-dependency-audit`, `build-artifacts`, Linux checks except `check-lint`, long-matrix aggregate verifiers, docs checks, Python skills, `android` | -| `blacksmith-16vcpu-ubuntu-2404` | `check-lint`, which remains CPU-sensitive enough that 8 vCPU cost more than it saved | -| `blacksmith-16vcpu-windows-2025` | `checks-windows` | -| `blacksmith-6vcpu-macos-latest` | `macos-node` on `openclaw/openclaw`; forks fall back to `macos-latest` | -| `blacksmith-12vcpu-macos-latest` | `macos-swift` on `openclaw/openclaw`; forks fall back to `macos-latest` | +| Runner | Jobs | +| -------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `ubuntu-24.04` | `preflight`, fast security jobs and aggregates (`security-scm-fast`, `security-dependency-audit`, `security-fast`), sharded channel contract checks, short aggregate verifier jobs (`check`, `check-additional`, `checks-fast-contracts-channels`), workflow-sanity, labeler, auto-response; install-smoke preflight also uses GitHub-hosted Ubuntu so the Blacksmith matrix can queue earlier | +| `blacksmith-8vcpu-ubuntu-2404` | `build-artifacts`, Linux checks except `check-lint` and channel contracts, long-matrix aggregate verifiers, docs checks, Python skills, `android` | +| `blacksmith-16vcpu-ubuntu-2404` | `check-lint`, which remains CPU-sensitive enough that 8 vCPU cost more than it saved | +| `blacksmith-16vcpu-windows-2025` | `checks-windows` | +| `blacksmith-6vcpu-macos-latest` | `macos-node` on `openclaw/openclaw`; forks fall back to `macos-latest` | +| `blacksmith-12vcpu-macos-latest` | `macos-swift` on `openclaw/openclaw`; forks fall back to `macos-latest` | ## Local Equivalents diff --git a/scripts/lib/ci-node-test-plan.mjs b/scripts/lib/ci-node-test-plan.mjs index f5a476c2ab0..0f14fe28e81 100644 --- a/scripts/lib/ci-node-test-plan.mjs +++ b/scripts/lib/ci-node-test-plan.mjs @@ -178,7 +178,7 @@ const SPLIT_NODE_SHARDS = new Map([ { shardName: "agentic-plugins", configs: ["test/vitest/vitest.plugins.config.ts"], - requiresDist: true, + requiresDist: false, }, ], ], diff --git a/test/scripts/ci-node-test-plan.test.ts b/test/scripts/ci-node-test-plan.test.ts index 44219e9c54b..536a061b203 100644 --- a/test/scripts/ci-node-test-plan.test.ts +++ b/test/scripts/ci-node-test-plan.test.ts @@ -53,7 +53,7 @@ describe("scripts/lib/ci-node-test-plan.mjs", () => { .filter((shard) => shard.requiresDist) .map((shard) => shard.shardName); - expect(requiresDistShardNames).toEqual(["core-support-boundary", "agentic-plugins"]); + expect(requiresDistShardNames).toEqual(["core-support-boundary"]); }); it("splits core runtime configs into smaller source-only shards", () => { @@ -152,7 +152,7 @@ describe("scripts/lib/ci-node-test-plan.mjs", () => { checkName: "checks-node-agentic-plugins", shardName: "agentic-plugins", configs: ["test/vitest/vitest.plugins.config.ts"], - requiresDist: true, + requiresDist: false, }); });