mirror of
https://github.com/openclaw/openclaw.git
synced 2026-08-12 21:53:00 -06:00
test(ci): prove compact tooling coverage
This commit is contained in:
@@ -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", () => {
|
||||
|
||||
@@ -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");
|
||||
|
||||
Reference in New Issue
Block a user