ci: split remaining slow test shards

This commit is contained in:
Peter Steinberger
2026-04-20 19:15:31 +01:00
parent 9a71595d97
commit 7aebac697e
5 changed files with 84 additions and 44 deletions

View File

@@ -14,31 +14,27 @@ function listContractTestFiles(rootDir = "src/channels/plugins/contracts") {
export function createChannelContractTestShards() {
const rootDir = "src/channels/plugins/contracts";
const groups = {
"checks-fast-contracts-channels-registry-a": [],
"checks-fast-contracts-channels-registry-b": [],
"checks-fast-contracts-channels-core-a": [],
"checks-fast-contracts-channels-core-b": [],
const suffixes = ["a", "b", "c", "d"];
const groups = Object.fromEntries(
["registry", "core"].flatMap((family) =>
suffixes.map((suffix) => [`checks-fast-contracts-channels-${family}-${suffix}`, []]),
),
);
const groupKeys = {
core: suffixes.map((suffix) => `checks-fast-contracts-channels-core-${suffix}`),
registry: suffixes.map((suffix) => `checks-fast-contracts-channels-registry-${suffix}`),
};
const pushBalanced = (firstKey, secondKey, file) => {
const target = groups[firstKey].length <= groups[secondKey].length ? firstKey : secondKey;
const pushBalanced = (keys, file) => {
const target = keys.toSorted((a, b) => groups[a].length - groups[b].length)[0];
groups[target].push(file);
};
for (const file of listContractTestFiles(rootDir)) {
const name = relative(rootDir, file).replaceAll("\\", "/");
if (name.startsWith("plugins-core.") || name.startsWith("plugin.")) {
pushBalanced(
"checks-fast-contracts-channels-core-a",
"checks-fast-contracts-channels-core-b",
file,
);
pushBalanced(groupKeys.core, file);
} else {
pushBalanced(
"checks-fast-contracts-channels-registry-a",
"checks-fast-contracts-channels-registry-b",
file,
);
pushBalanced(groupKeys.registry, file);
}
}

View File

@@ -66,21 +66,13 @@ function createAutoReplyReplySplitShards() {
}
return Object.entries(groups).flatMap(([groupName, includePatterns]) => {
const midpoint = Math.ceil(includePatterns.length / 2);
return [
{
shardName: `${groupName}-a`,
configs: ["test/vitest/vitest.auto-reply-reply.config.ts"],
includePatterns: includePatterns.slice(0, midpoint),
requiresDist: false,
},
{
shardName: `${groupName}-b`,
configs: ["test/vitest/vitest.auto-reply-reply.config.ts"],
includePatterns: includePatterns.slice(midpoint),
requiresDist: false,
},
].filter((shard) => shard.includePatterns.length > 0);
const shardCount = groupName === "auto-reply-reply-commands" ? 4 : 2;
return Array.from({ length: shardCount }, (_, index) => ({
shardName: `${groupName}-${String.fromCharCode(97 + index)}`,
configs: ["test/vitest/vitest.auto-reply-reply.config.ts"],
includePatterns: includePatterns.filter((_, fileIndex) => fileIndex % shardCount === index),
requiresDist: false,
})).filter((shard) => shard.includePatterns.length > 0);
});
}
@@ -164,13 +156,21 @@ const SPLIT_NODE_SHARDS = new Map([
requiresDist: false,
},
{
shardName: "agentic-agents-plugins",
shardName: "agentic-agents",
configs: ["test/vitest/vitest.agents.config.ts"],
requiresDist: false,
},
{
shardName: "agentic-plugin-sdk",
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: false,
},
{
shardName: "agentic-plugins",
configs: ["test/vitest/vitest.plugins.config.ts"],
requiresDist: true,
},
],