test(ci): prove compact tooling coverage

This commit is contained in:
Vincent Koc
2026-07-11 05:57:34 -07:00
committed by Vincent Koc
parent 02045aa384
commit e8c83ac0b4
2 changed files with 48 additions and 11 deletions
+47 -10
View File
@@ -11,6 +11,7 @@ import { expectNoNodeFsScans } from "../../src/test-utils/fs-scan-assertions.js"
import { listGitTrackedFiles, sortRepoPaths, toRepoPath } from "../../src/test-utils/repo-files.js";
import { commandsLightTestFiles } from "../vitest/vitest.commands-light-paths.mjs";
import { createPluginsVitestConfig } from "../vitest/vitest.plugins.config.ts";
import { createToolingVitestConfig } from "../vitest/vitest.tooling.config.ts";
type VitestTestConfig = {
dir?: string;
@@ -81,6 +82,21 @@ function listMatchedTestFiles(config: VitestConfig): string[] {
.toSorted((a, b) => a.localeCompare(b));
}
function listAllToolingTestFiles(): string[] {
const originalArgv = process.argv;
try {
process.argv = originalArgv.slice(0, 2);
return listMatchedTestFiles(
createToolingVitestConfig({
...process.env,
OPENCLAW_VITEST_INCLUDE_FILE: undefined,
}),
);
} finally {
process.argv = originalArgv;
}
}
function isGatewayServerTestFile(file: string): boolean {
return (
file.startsWith("src/gateway/") &&
@@ -164,7 +180,7 @@ describe("scripts/lib/ci-node-test-plan.mjs", () => {
compact: true,
});
expect(compact.length).toBeLessThan(40);
expect(compact).toHaveLength(20);
expect(compact.every((shard) => Array.isArray(shard.groups))).toBe(true);
expect(compact.some((shard) => shard.requiresDist)).toBe(true);
expect(
@@ -174,7 +190,11 @@ describe("scripts/lib/ci-node-test-plan.mjs", () => {
).toBe(true);
expect(
compact
.flatMap((shard) => shard.groups.flatMap((group) => group.includePatterns ?? []))
.flatMap((shard) =>
shard.groups.flatMap((group) =>
group.shard_name.startsWith("core-tooling-") ? [] : (group.includePatterns ?? []),
),
)
.toSorted((a, b) => a.localeCompare(b)),
).toEqual(
base.flatMap((shard) => shard.includePatterns ?? []).toSorted((a, b) => a.localeCompare(b)),
@@ -213,15 +233,32 @@ describe("scripts/lib/ci-node-test-plan.mjs", () => {
);
const wholeGroupCounts = smallWholeJobs.map((shard) => shard.groups.length);
expect(Math.max(...wholeGroupCounts) - Math.min(...wholeGroupCounts)).toBeLessThanOrEqual(1);
const toolingJob = smallWholeJobs.find((shard) =>
shard.groups.some((group) => group.shard_name === "core-tooling"),
expect(
smallWholeJobs.some((shard) =>
shard.groups.some((group) => group.shard_name === "core-tooling"),
),
).toBe(false);
expect(
smallWholeJobs
.flatMap((shard) => shard.groups)
.find((group) => group.shard_name === "core-tooling-isolated"),
).toEqual(
expect.objectContaining({
configs: ["test/vitest/vitest.tooling-isolated.config.ts"],
}),
);
const tuiPtyJob = smallWholeJobs.find((shard) =>
shard.groups.some((group) => group.shard_name === "core-runtime-tui-pty"),
);
expect(toolingJob).toBeDefined();
expect(tuiPtyJob).toBeDefined();
expect(toolingJob?.checkName).not.toBe(tuiPtyJob?.checkName);
const toolingGroups = compact
.flatMap((shard) => shard.groups)
.filter((group) => /^core-tooling-\d+$/u.test(group.shard_name));
const toolingFiles = toolingGroups.flatMap((group) => group.includePatterns ?? []);
expect(toolingGroups).toHaveLength(3);
expect(
toolingGroups.every((group) => group.configs[0] === "test/vitest/vitest.tooling.config.ts"),
).toBe(true);
const toolingGroupSizes = toolingGroups.map((group) => group.includePatterns?.length ?? 0);
expect(Math.max(...toolingGroupSizes) - Math.min(...toolingGroupSizes)).toBeLessThanOrEqual(1);
expect(new Set(toolingFiles).size).toBe(toolingFiles.length);
expect(toolingFiles.toSorted((a, b) => a.localeCompare(b))).toEqual(listAllToolingTestFiles());
});
it("splits the slow core unit shards while keeping paired source/security coverage", () => {
+1 -1
View File
@@ -1857,7 +1857,7 @@ describe("ci workflow guards", () => {
expect(JSON.stringify(preflightJob.steps)).toContain("timeout_minutes: shard.timeoutMinutes");
expect(manifestStep.run).toContain(
'shard.groups?.some((group) => group.shard_name === "core-tooling")',
'shard.groups?.some((group) => group.shard_name.startsWith("core-tooling"))',
);
expect(nodeTestJob["timeout-minutes"]).toBe("${{ matrix.timeout_minutes || 60 }}");
expect(runStep.env.OPENCLAW_VITEST_NO_OUTPUT_TIMEOUT_MS).toBe("300000");