From 58d0c179d7048463b609e209d9febcfa601c25c2 Mon Sep 17 00:00:00 2001 From: Vincent Koc Date: Tue, 14 Apr 2026 23:22:08 +0100 Subject: [PATCH] fix(ci): split agentic node shard by runtime shape --- scripts/lib/ci-node-test-plan.mjs | 54 ++++++++++++++++++++++++-- test/scripts/ci-node-test-plan.test.ts | 39 ++++++++++++++++++- 2 files changed, 88 insertions(+), 5 deletions(-) diff --git a/scripts/lib/ci-node-test-plan.mjs b/scripts/lib/ci-node-test-plan.mjs index ac1520931ee..72d14ef3e78 100644 --- a/scripts/lib/ci-node-test-plan.mjs +++ b/scripts/lib/ci-node-test-plan.mjs @@ -7,11 +7,38 @@ const EXCLUDED_FULL_SUITE_SHARDS = new Set([ ]); const EXCLUDED_PROJECT_CONFIGS = new Set(["test/vitest/vitest.channels.config.ts"]); -const DIST_DEPENDENT_NODE_SHARD_NAMES = new Set([ - "core-support-boundary", - "core-runtime", - "agentic", +const SPLIT_NODE_SHARDS = new Map([ + [ + "agentic", + [ + { + shardName: "agentic-control-plane", + configs: [ + "test/vitest/vitest.gateway-core.config.ts", + "test/vitest/vitest.gateway-client.config.ts", + "test/vitest/vitest.gateway-methods.config.ts", + "test/vitest/vitest.gateway-server.config.ts", + "test/vitest/vitest.cli.config.ts", + "test/vitest/vitest.commands-light.config.ts", + "test/vitest/vitest.commands.config.ts", + "test/vitest/vitest.daemon.config.ts", + ], + requiresDist: false, + }, + { + shardName: "agentic-agents-plugins", + configs: [ + "test/vitest/vitest.agents.config.ts", + "test/vitest/vitest.plugin-sdk-light.config.ts", + "test/vitest/vitest.plugin-sdk.config.ts", + "test/vitest/vitest.plugins.config.ts", + ], + requiresDist: true, + }, + ], + ], ]); +const DIST_DEPENDENT_NODE_SHARD_NAMES = new Set(["core-support-boundary", "core-runtime"]); function formatNodeTestShardCheckName(shardName) { const normalizedShardName = shardName.startsWith("core-unit-") @@ -31,6 +58,25 @@ export function createNodeTestShards() { return []; } + const splitShards = SPLIT_NODE_SHARDS.get(shard.name); + if (splitShards) { + return splitShards.flatMap((splitShard) => { + const splitConfigs = splitShard.configs.filter((config) => configs.includes(config)); + if (splitConfigs.length === 0) { + return []; + } + + return [ + { + checkName: formatNodeTestShardCheckName(splitShard.shardName), + shardName: splitShard.shardName, + configs: splitConfigs, + requiresDist: splitShard.requiresDist, + }, + ]; + }); + } + return [ { checkName: formatNodeTestShardCheckName(shard.name), diff --git a/test/scripts/ci-node-test-plan.test.ts b/test/scripts/ci-node-test-plan.test.ts index 16e7fe49c04..7fcec617f1b 100644 --- a/test/scripts/ci-node-test-plan.test.ts +++ b/test/scripts/ci-node-test-plan.test.ts @@ -30,6 +30,43 @@ describe("scripts/lib/ci-node-test-plan.mjs", () => { .filter((shard) => shard.requiresDist) .map((shard) => shard.shardName); - expect(requiresDistShardNames).toEqual(["core-support-boundary", "core-runtime", "agentic"]); + expect(requiresDistShardNames).toEqual([ + "core-support-boundary", + "core-runtime", + "agentic-agents-plugins", + ]); + }); + + it("splits the agentic lane into control-plane and agent/plugin shards", () => { + const shards = createNodeTestShards(); + const controlPlaneShard = shards.find((shard) => shard.shardName === "agentic-control-plane"); + const agentPluginShard = shards.find((shard) => shard.shardName === "agentic-agents-plugins"); + + expect(controlPlaneShard).toEqual({ + checkName: "checks-node-agentic-control-plane", + shardName: "agentic-control-plane", + configs: [ + "test/vitest/vitest.gateway-core.config.ts", + "test/vitest/vitest.gateway-client.config.ts", + "test/vitest/vitest.gateway-methods.config.ts", + "test/vitest/vitest.gateway-server.config.ts", + "test/vitest/vitest.cli.config.ts", + "test/vitest/vitest.commands-light.config.ts", + "test/vitest/vitest.commands.config.ts", + "test/vitest/vitest.daemon.config.ts", + ], + requiresDist: false, + }); + expect(agentPluginShard).toEqual({ + checkName: "checks-node-agentic-agents-plugins", + shardName: "agentic-agents-plugins", + configs: [ + "test/vitest/vitest.agents.config.ts", + "test/vitest/vitest.plugin-sdk-light.config.ts", + "test/vitest/vitest.plugin-sdk.config.ts", + "test/vitest/vitest.plugins.config.ts", + ], + requiresDist: true, + }); }); });