diff --git a/scripts/lib/ci-node-test-plan.mjs b/scripts/lib/ci-node-test-plan.mjs index 14be0280c5c6..83987ef0e6a9 100644 --- a/scripts/lib/ci-node-test-plan.mjs +++ b/scripts/lib/ci-node-test-plan.mjs @@ -16,6 +16,11 @@ const BUNDLED_NODE_TEST_RUNNER = "blacksmith-4vcpu-ubuntu-2404"; // Startup-core transforms the broad gateway graph before its assertions run. // Keep enough CPU here to avoid spending minutes in Vitest imports on 4 vCPU. const GATEWAY_STARTUP_CORE_RUNNER = DEFAULT_NODE_TEST_RUNNER; +// This cold gateway graph can stall after warming Vitest's module cache; its +// retry completes in seconds, so do not spend the global five-minute timeout. +const GATEWAY_STARTUP_HEALTH_RUNTIME_ENV = { + OPENCLAW_VITEST_NO_OUTPUT_TIMEOUT_MS: "60000", +}; const MAX_BUNDLED_NODE_TEST_PATTERNS = 64; const COMPACT_NODE_TEST_JOB_WEIGHT = 192; const COMPACT_NODE_TEST_JOB_GROUPS = 8; @@ -436,6 +441,10 @@ function createGatewayServerSplitShards() { ] .map((shardName) => ({ configs: ["test/vitest/vitest.gateway-server.config.ts"], + env: + shardName === "agentic-control-plane-startup-health-runtime" + ? GATEWAY_STARTUP_HEALTH_RUNTIME_ENV + : undefined, includePatterns: groups.get(shardName) ?? [], requiresDist: false, runner: diff --git a/test/scripts/ci-node-test-plan.test.ts b/test/scripts/ci-node-test-plan.test.ts index c2157b252a32..ebc4bd920032 100644 --- a/test/scripts/ci-node-test-plan.test.ts +++ b/test/scripts/ci-node-test-plan.test.ts @@ -132,6 +132,10 @@ describe("scripts/lib/ci-node-test-plan.mjs", () => { expect(bundled.find((shard) => shard.shardName === "core-unit-fast")?.runner).toBe( DEFAULT_NODE_TEST_RUNNER, ); + expect( + bundled.find((shard) => shard.shardName === "agentic-control-plane-startup-health-runtime") + ?.env, + ).toEqual({ OPENCLAW_VITEST_NO_OUTPUT_TIMEOUT_MS: "60000" }); expect( bundled.find((shard) => shard.shardName === "agentic-control-plane-startup-core")?.runner, ).toBe(DEFAULT_NODE_TEST_RUNNER); @@ -194,6 +198,11 @@ describe("scripts/lib/ci-node-test-plan.mjs", () => { (group) => group.shard_name === "agentic-control-plane-startup-core", )?.runner, ).toBe(DEFAULT_NODE_TEST_RUNNER); + expect( + compact + .flatMap((shard) => shard.groups) + .find((group) => group.shard_name === "agentic-control-plane-startup-health-runtime")?.env, + ).toEqual({ OPENCLAW_VITEST_NO_OUTPUT_TIMEOUT_MS: "60000" }); expect( compact .filter((shard) => shard.groups.some((group) => !group.includePatterns)) @@ -666,6 +675,9 @@ describe("scripts/lib/ci-node-test-plan.mjs", () => { controlPlaneShards.map((shard) => ({ checkName: `checks-node-${shard.shardName}`, configs: ["test/vitest/vitest.gateway-server.config.ts"], + ...(shard.shardName === "agentic-control-plane-startup-health-runtime" + ? { env: { OPENCLAW_VITEST_NO_OUTPUT_TIMEOUT_MS: "60000" } } + : {}), includePatterns: shard.includePatterns, requiresDist: false, runner: