mirror of
https://github.com/openclaw/openclaw.git
synced 2026-05-06 12:00:44 +00:00
test: split heavy extension test shards
This commit is contained in:
@@ -33,12 +33,12 @@ function findExtensionWithoutTests() {
|
||||
}
|
||||
|
||||
describe("scripts/test-extension.mjs", () => {
|
||||
it("resolves channel-root extensions onto the channel vitest config", () => {
|
||||
it("resolves split channel extensions onto their own vitest configs", () => {
|
||||
const plan = resolveExtensionTestPlan({ targetArg: "slack", cwd: process.cwd() });
|
||||
|
||||
expect(plan.extensionId).toBe("slack");
|
||||
expect(plan.extensionDir).toBe(bundledPluginRoot("slack"));
|
||||
expect(plan.config).toBe("test/vitest/vitest.extension-channels.config.ts");
|
||||
expect(plan.config).toBe("test/vitest/vitest.extension-slack.config.ts");
|
||||
expect(plan.roots).toContain(bundledPluginRoot("slack"));
|
||||
expect(plan.hasTests).toBe(true);
|
||||
});
|
||||
@@ -79,11 +79,11 @@ describe("scripts/test-extension.mjs", () => {
|
||||
expect(plan.hasTests).toBe(true);
|
||||
});
|
||||
|
||||
it("resolves provider extensions onto the provider vitest config", () => {
|
||||
it("resolves OpenAI onto its own provider vitest config", () => {
|
||||
const plan = resolveExtensionTestPlan({ targetArg: "openai", cwd: process.cwd() });
|
||||
|
||||
expect(plan.extensionId).toBe("openai");
|
||||
expect(plan.config).toBe("test/vitest/vitest.extension-providers.config.ts");
|
||||
expect(plan.config).toBe("test/vitest/vitest.extension-provider-openai.config.ts");
|
||||
expect(plan.roots).toContain(bundledPluginRoot("openai"));
|
||||
expect(plan.hasTests).toBe(true);
|
||||
});
|
||||
@@ -183,7 +183,7 @@ describe("scripts/test-extension.mjs", () => {
|
||||
|
||||
expect(plan.roots).toContain(bundledPluginRoot("line"));
|
||||
expect(plan.roots).not.toContain("src/line");
|
||||
expect(plan.config).toBe("test/vitest/vitest.extension-channels.config.ts");
|
||||
expect(plan.config).toBe("test/vitest/vitest.extension-line.config.ts");
|
||||
expect(plan.hasTests).toBe(true);
|
||||
});
|
||||
|
||||
@@ -294,13 +294,6 @@ describe("scripts/test-extension.mjs", () => {
|
||||
roots: [bundledPluginRoot("bluebubbles")],
|
||||
testFileCount: expect.any(Number),
|
||||
},
|
||||
{
|
||||
config: "test/vitest/vitest.extension-channels.config.ts",
|
||||
estimatedCost: expect.any(Number),
|
||||
extensionIds: ["line", "slack"],
|
||||
roots: [bundledPluginRoot("slack"), bundledPluginRoot("line")],
|
||||
testFileCount: expect.any(Number),
|
||||
},
|
||||
{
|
||||
config: "test/vitest/vitest.extension-diffs.config.ts",
|
||||
estimatedCost: expect.any(Number),
|
||||
@@ -322,6 +315,13 @@ describe("scripts/test-extension.mjs", () => {
|
||||
roots: [bundledPluginRoot("irc")],
|
||||
testFileCount: expect.any(Number),
|
||||
},
|
||||
{
|
||||
config: "test/vitest/vitest.extension-line.config.ts",
|
||||
estimatedCost: expect.any(Number),
|
||||
extensionIds: ["line"],
|
||||
roots: [bundledPluginRoot("line")],
|
||||
testFileCount: expect.any(Number),
|
||||
},
|
||||
{
|
||||
config: "test/vitest/vitest.extension-matrix.config.ts",
|
||||
estimatedCost: expect.any(Number),
|
||||
@@ -351,12 +351,19 @@ describe("scripts/test-extension.mjs", () => {
|
||||
testFileCount: expect.any(Number),
|
||||
},
|
||||
{
|
||||
config: "test/vitest/vitest.extension-providers.config.ts",
|
||||
config: "test/vitest/vitest.extension-provider-openai.config.ts",
|
||||
estimatedCost: expect.any(Number),
|
||||
extensionIds: ["openai"],
|
||||
roots: [bundledPluginRoot("openai")],
|
||||
testFileCount: expect.any(Number),
|
||||
},
|
||||
{
|
||||
config: "test/vitest/vitest.extension-slack.config.ts",
|
||||
estimatedCost: expect.any(Number),
|
||||
extensionIds: ["slack"],
|
||||
roots: [bundledPluginRoot("slack")],
|
||||
testFileCount: expect.any(Number),
|
||||
},
|
||||
{
|
||||
config: "test/vitest/vitest.extension-telegram.config.ts",
|
||||
estimatedCost: expect.any(Number),
|
||||
|
||||
@@ -4,6 +4,7 @@ import {
|
||||
applyParallelVitestCachePaths,
|
||||
buildFullSuiteVitestRunPlans,
|
||||
buildVitestRunPlans,
|
||||
listFullExtensionVitestProjectConfigs,
|
||||
shouldAcquireLocalHeavyCheckLock,
|
||||
resolveChangedTargetArgs,
|
||||
resolveParallelFullSuiteConcurrency,
|
||||
@@ -28,12 +29,89 @@ describe("scripts/test-projects changed-target routing", () => {
|
||||
).toBeNull();
|
||||
});
|
||||
|
||||
it("ignores changed files that cannot map to test lanes", () => {
|
||||
it("keeps the broad changed run for shared test helpers", () => {
|
||||
expect(
|
||||
resolveChangedTargetArgs(["--changed", "origin/main"], process.cwd(), () => [
|
||||
"test/helpers/channels/plugin.ts",
|
||||
]),
|
||||
).toBeNull();
|
||||
});
|
||||
|
||||
it("keeps the broad changed run for unknown root surfaces", () => {
|
||||
expect(
|
||||
resolveChangedTargetArgs(["--changed", "origin/main"], process.cwd(), () => [
|
||||
"unknown/file.txt",
|
||||
]),
|
||||
).toBeNull();
|
||||
});
|
||||
|
||||
it("skips changed docs files that cannot map to test lanes", () => {
|
||||
expect(
|
||||
resolveChangedTargetArgs(["--changed", "origin/main"], process.cwd(), () => [
|
||||
"docs/help/testing.md",
|
||||
]),
|
||||
).toBeNull();
|
||||
).toEqual([]);
|
||||
});
|
||||
|
||||
it("skips root agent guidance changes instead of broad-running tests", () => {
|
||||
expect(
|
||||
buildVitestRunPlans(["--changed", "origin/main"], process.cwd(), () => ["AGENTS.md"]),
|
||||
).toEqual([]);
|
||||
});
|
||||
|
||||
it("skips app-only changes because app tests are separate from Vitest lanes", () => {
|
||||
expect(
|
||||
buildVitestRunPlans(["--changed", "origin/main"], process.cwd(), () => [
|
||||
"apps/macos/OpenClaw/AppDelegate.swift",
|
||||
]),
|
||||
).toEqual([]);
|
||||
});
|
||||
|
||||
it("adds extension tests for public plugin SDK changes", () => {
|
||||
const plans = buildVitestRunPlans(["--changed", "origin/main"], process.cwd(), () => [
|
||||
"src/plugin-sdk/provider-entry.ts",
|
||||
]);
|
||||
|
||||
expect(plans).toEqual([
|
||||
{
|
||||
config: "test/vitest/vitest.unit-fast.config.ts",
|
||||
forwardedArgs: [],
|
||||
includePatterns: ["src/plugin-sdk/provider-entry.test.ts"],
|
||||
watchMode: false,
|
||||
},
|
||||
...listFullExtensionVitestProjectConfigs().map((config) => ({
|
||||
config,
|
||||
forwardedArgs: [],
|
||||
includePatterns: null,
|
||||
watchMode: false,
|
||||
})),
|
||||
]);
|
||||
});
|
||||
|
||||
it("routes LM Studio changes to the provider extension lane", () => {
|
||||
const plans = buildVitestRunPlans(["--changed", "origin/main"], process.cwd(), () => [
|
||||
"extensions/lmstudio/src/runtime.ts",
|
||||
]);
|
||||
|
||||
expect(plans).toEqual([
|
||||
{
|
||||
config: "test/vitest/vitest.extension-providers.config.ts",
|
||||
forwardedArgs: [],
|
||||
includePatterns: ["extensions/lmstudio/src/**/*.test.ts"],
|
||||
watchMode: false,
|
||||
},
|
||||
]);
|
||||
});
|
||||
|
||||
it("routes the top-level extensions target to every extension shard", () => {
|
||||
expect(buildVitestRunPlans(["extensions"], process.cwd())).toEqual(
|
||||
listFullExtensionVitestProjectConfigs().map((config) => ({
|
||||
config,
|
||||
forwardedArgs: [],
|
||||
includePatterns: null,
|
||||
watchMode: false,
|
||||
})),
|
||||
);
|
||||
});
|
||||
|
||||
it("narrows default-lane changed source files to include globs", () => {
|
||||
@@ -115,7 +193,7 @@ describe("scripts/test-projects changed-target routing", () => {
|
||||
]);
|
||||
});
|
||||
|
||||
it("routes changed plugin-sdk source allowlist files to sibling light tests", () => {
|
||||
it("keeps changed plugin-sdk allowlist files on sibling light tests plus extension tests", () => {
|
||||
const plans = buildVitestRunPlans(["--changed", "origin/main"], process.cwd(), () => [
|
||||
"src/plugin-sdk/provider-entry.ts",
|
||||
]);
|
||||
@@ -127,6 +205,12 @@ describe("scripts/test-projects changed-target routing", () => {
|
||||
includePatterns: ["src/plugin-sdk/provider-entry.test.ts"],
|
||||
watchMode: false,
|
||||
},
|
||||
...listFullExtensionVitestProjectConfigs().map((config) => ({
|
||||
config,
|
||||
forwardedArgs: [],
|
||||
includePatterns: null,
|
||||
watchMode: false,
|
||||
})),
|
||||
]);
|
||||
});
|
||||
|
||||
@@ -149,7 +233,7 @@ describe("scripts/test-projects changed-target routing", () => {
|
||||
]);
|
||||
});
|
||||
|
||||
it("keeps non-allowlisted plugin-sdk source files on the heavy lane", () => {
|
||||
it("keeps non-allowlisted plugin-sdk source files on the heavy lane plus extension tests", () => {
|
||||
const plans = buildVitestRunPlans(["--changed", "origin/main"], process.cwd(), () => [
|
||||
"src/plugin-sdk/facade-runtime.ts",
|
||||
]);
|
||||
@@ -161,6 +245,12 @@ describe("scripts/test-projects changed-target routing", () => {
|
||||
includePatterns: ["src/plugin-sdk/**/*.test.ts"],
|
||||
watchMode: false,
|
||||
},
|
||||
...listFullExtensionVitestProjectConfigs().map((config) => ({
|
||||
config,
|
||||
forwardedArgs: [],
|
||||
includePatterns: null,
|
||||
watchMode: false,
|
||||
})),
|
||||
]);
|
||||
});
|
||||
|
||||
@@ -316,16 +406,21 @@ describe("scripts/test-projects full-suite sharding", () => {
|
||||
"test/vitest/vitest.full-auto-reply.config.ts",
|
||||
"test/vitest/vitest.extension-acpx.config.ts",
|
||||
"test/vitest/vitest.extension-bluebubbles.config.ts",
|
||||
"test/vitest/vitest.extension-channels.config.ts",
|
||||
"test/vitest/vitest.extension-diffs.config.ts",
|
||||
"test/vitest/vitest.extension-discord.config.ts",
|
||||
"test/vitest/vitest.extension-feishu.config.ts",
|
||||
"test/vitest/vitest.extension-imessage.config.ts",
|
||||
"test/vitest/vitest.extension-irc.config.ts",
|
||||
"test/vitest/vitest.extension-line.config.ts",
|
||||
"test/vitest/vitest.extension-mattermost.config.ts",
|
||||
"test/vitest/vitest.extension-matrix.config.ts",
|
||||
"test/vitest/vitest.extension-memory.config.ts",
|
||||
"test/vitest/vitest.extension-messaging.config.ts",
|
||||
"test/vitest/vitest.extension-msteams.config.ts",
|
||||
"test/vitest/vitest.extension-provider-openai.config.ts",
|
||||
"test/vitest/vitest.extension-providers.config.ts",
|
||||
"test/vitest/vitest.extension-signal.config.ts",
|
||||
"test/vitest/vitest.extension-slack.config.ts",
|
||||
"test/vitest/vitest.extension-telegram.config.ts",
|
||||
"test/vitest/vitest.extension-voice-call.config.ts",
|
||||
"test/vitest/vitest.extension-whatsapp.config.ts",
|
||||
@@ -499,16 +594,21 @@ describe("scripts/test-projects full-suite sharding", () => {
|
||||
"test/vitest/vitest.auto-reply-reply.config.ts",
|
||||
"test/vitest/vitest.extension-acpx.config.ts",
|
||||
"test/vitest/vitest.extension-bluebubbles.config.ts",
|
||||
"test/vitest/vitest.extension-channels.config.ts",
|
||||
"test/vitest/vitest.extension-diffs.config.ts",
|
||||
"test/vitest/vitest.extension-discord.config.ts",
|
||||
"test/vitest/vitest.extension-feishu.config.ts",
|
||||
"test/vitest/vitest.extension-imessage.config.ts",
|
||||
"test/vitest/vitest.extension-irc.config.ts",
|
||||
"test/vitest/vitest.extension-line.config.ts",
|
||||
"test/vitest/vitest.extension-mattermost.config.ts",
|
||||
"test/vitest/vitest.extension-matrix.config.ts",
|
||||
"test/vitest/vitest.extension-memory.config.ts",
|
||||
"test/vitest/vitest.extension-messaging.config.ts",
|
||||
"test/vitest/vitest.extension-msteams.config.ts",
|
||||
"test/vitest/vitest.extension-provider-openai.config.ts",
|
||||
"test/vitest/vitest.extension-providers.config.ts",
|
||||
"test/vitest/vitest.extension-signal.config.ts",
|
||||
"test/vitest/vitest.extension-slack.config.ts",
|
||||
"test/vitest/vitest.extension-telegram.config.ts",
|
||||
"test/vitest/vitest.extension-voice-call.config.ts",
|
||||
"test/vitest/vitest.extension-whatsapp.config.ts",
|
||||
|
||||
Reference in New Issue
Block a user