diff --git a/scripts/lib/extension-test-plan.mjs b/scripts/lib/extension-test-plan.mjs index 14315f4cf71..3fb285fe3eb 100644 --- a/scripts/lib/extension-test-plan.mjs +++ b/scripts/lib/extension-test-plan.mjs @@ -31,26 +31,31 @@ const repoRoot = path.resolve(import.meta.dirname, "..", ".."); export const DEFAULT_EXTENSION_TEST_SHARD_COUNT = 6; const EXTENSION_TEST_COST_MULTIPLIERS = { // CI shard planning uses measured wall time rather than raw file count. - // Import-heavy channel suites vary widely: Slack/Mattermost are much more - // expensive per file than Matrix/Discord/MSTeams. + // These ratios come from Blacksmith extension batch timings; import-heavy + // suites vary widely, and file count alone leaves long tail shards. + "test/vitest/vitest.extension-acpx.config.ts": 0.75, "test/vitest/vitest.extension-bluebubbles.config.ts": 0.8, - "test/vitest/vitest.extension-browser.config.ts": 0.55, - "test/vitest/vitest.extension-discord.config.ts": 0.55, - "test/vitest/vitest.extension-feishu.config.ts": 1.1, - "test/vitest/vitest.extension-imessage.config.ts": 0.9, - "test/vitest/vitest.extension-matrix.config.ts": 0.25, - "test/vitest/vitest.extension-mattermost.config.ts": 1.05, + "test/vitest/vitest.extension-browser.config.ts": 0.3, + "test/vitest/vitest.extension-diffs.config.ts": 0.6, + "test/vitest/vitest.extension-discord.config.ts": 0.18, + "test/vitest/vitest.extension-feishu.config.ts": 0.18, + "test/vitest/vitest.extension-imessage.config.ts": 1.7, + "test/vitest/vitest.extension-irc.config.ts": 1.0, + "test/vitest/vitest.extension-line.config.ts": 1.1, + "test/vitest/vitest.extension-matrix.config.ts": 0.28, + "test/vitest/vitest.extension-mattermost.config.ts": 0.75, "test/vitest/vitest.extension-media.config.ts": 0.7, - "test/vitest/vitest.extension-memory.config.ts": 0.3, + "test/vitest/vitest.extension-memory.config.ts": 0.25, "test/vitest/vitest.extension-messaging.config.ts": 0.4, "test/vitest/vitest.extension-misc.config.ts": 0.7, - "test/vitest/vitest.extension-msteams.config.ts": 0.3, + "test/vitest/vitest.extension-msteams.config.ts": 0.4, + "test/vitest/vitest.extension-provider-openai.config.ts": 1.35, "test/vitest/vitest.extension-providers.config.ts": 0.5, - "test/vitest/vitest.extension-qa.config.ts": 0.4, - "test/vitest/vitest.extension-slack.config.ts": 0.7, - "test/vitest/vitest.extension-telegram.config.ts": 0.4, - "test/vitest/vitest.extension-voice-call.config.ts": 0.25, - "test/vitest/vitest.extension-whatsapp.config.ts": 0.6, + "test/vitest/vitest.extension-qa.config.ts": 0.6, + "test/vitest/vitest.extension-slack.config.ts": 0.14, + "test/vitest/vitest.extension-telegram.config.ts": 0.15, + "test/vitest/vitest.extension-voice-call.config.ts": 0.27, + "test/vitest/vitest.extension-whatsapp.config.ts": 0.5, "test/vitest/vitest.extension-zalo.config.ts": 0.7, // This shared config is comparatively cheap per file, so raw file count // overstates its real wall-clock cost during CI shard planning. diff --git a/test/scripts/test-extension.test.ts b/test/scripts/test-extension.test.ts index 6ed409aee7f..c91f9036f63 100644 --- a/test/scripts/test-extension.test.ts +++ b/test/scripts/test-extension.test.ts @@ -474,24 +474,24 @@ describe("scripts/test-extension.mjs", () => { const totals = shards.map((shard) => shard.estimatedCost); expect(Math.max(...totals) - Math.min(...totals)).toBeLessThanOrEqual(1); - const msTeamsShardIndex = shards.findIndex((shard) => shard.extensionIds.includes("msteams")); - const feishuShardIndex = shards.findIndex((shard) => shard.extensionIds.includes("feishu")); const browserShardIndex = shards.findIndex((shard) => shard.extensionIds.includes("browser")); - const slackShardIndex = shards.findIndex((shard) => shard.extensionIds.includes("slack")); - const matrixShardIndex = shards.findIndex((shard) => shard.extensionIds.includes("matrix")); + const imessageShardIndex = shards.findIndex((shard) => shard.extensionIds.includes("imessage")); const mattermostShardIndex = shards.findIndex((shard) => shard.extensionIds.includes("mattermost"), ); + const openAiShardIndex = shards.findIndex((shard) => shard.extensionIds.includes("openai")); + const qaLabShardIndex = shards.findIndex((shard) => shard.extensionIds.includes("qa-lab")); + const whatsappShardIndex = shards.findIndex((shard) => shard.extensionIds.includes("whatsapp")); - expect(msTeamsShardIndex).toBeGreaterThanOrEqual(0); - expect(feishuShardIndex).toBeGreaterThanOrEqual(0); - expect(msTeamsShardIndex).not.toBe(feishuShardIndex); expect(browserShardIndex).toBeGreaterThanOrEqual(0); - expect(slackShardIndex).toBeGreaterThanOrEqual(0); - expect(browserShardIndex).not.toBe(slackShardIndex); - expect(matrixShardIndex).toBeGreaterThanOrEqual(0); + expect(imessageShardIndex).toBeGreaterThanOrEqual(0); expect(mattermostShardIndex).toBeGreaterThanOrEqual(0); - expect(matrixShardIndex).not.toBe(mattermostShardIndex); + expect(openAiShardIndex).toBeGreaterThanOrEqual(0); + expect(qaLabShardIndex).toBeGreaterThanOrEqual(0); + expect(whatsappShardIndex).toBeGreaterThanOrEqual(0); + expect(browserShardIndex).not.toBe(qaLabShardIndex); + expect(imessageShardIndex).not.toBe(openAiShardIndex); + expect(mattermostShardIndex).not.toBe(whatsappShardIndex); }); it("runs extension batch config groups concurrently when requested", async () => {