mirror of
https://github.com/openclaw/openclaw.git
synced 2026-06-06 05:51:15 +08:00
test: expose changed fallback skip metadata
This commit is contained in:
@@ -20,6 +20,12 @@ export type ChangedTestTargetOptions = {
|
|||||||
broad?: boolean;
|
broad?: boolean;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
export type ChangedTestTargetPlan = {
|
||||||
|
mode: "none" | "broad" | "targets";
|
||||||
|
targets: string[];
|
||||||
|
skippedBroadFallbackPaths?: string[];
|
||||||
|
};
|
||||||
|
|
||||||
export const DEFAULT_TEST_PROJECTS_VITEST_NO_OUTPUT_TIMEOUT_MS: string;
|
export const DEFAULT_TEST_PROJECTS_VITEST_NO_OUTPUT_TIMEOUT_MS: string;
|
||||||
export const DEFAULT_TEST_PROJECTS_VITEST_NO_OUTPUT_HEARTBEAT_MS: string;
|
export const DEFAULT_TEST_PROJECTS_VITEST_NO_OUTPUT_HEARTBEAT_MS: string;
|
||||||
|
|
||||||
@@ -49,10 +55,14 @@ export function resolveChangedTargetArgs(
|
|||||||
export function resolveChangedTestTargetPlan(
|
export function resolveChangedTestTargetPlan(
|
||||||
changedPaths: string[],
|
changedPaths: string[],
|
||||||
options?: ChangedTestTargetOptions,
|
options?: ChangedTestTargetOptions,
|
||||||
): {
|
): ChangedTestTargetPlan;
|
||||||
mode: "none" | "broad" | "targets";
|
|
||||||
targets: string[];
|
export function resolveChangedTestTargetPlanForArgs(
|
||||||
};
|
args: string[],
|
||||||
|
cwd?: string,
|
||||||
|
listChangedPaths?: (baseRef: string, cwd: string) => string[],
|
||||||
|
options?: ChangedTestTargetOptions,
|
||||||
|
): ChangedTestTargetPlan | null;
|
||||||
|
|
||||||
export function listFullExtensionVitestProjectConfigs(): string[];
|
export function listFullExtensionVitestProjectConfigs(): string[];
|
||||||
|
|
||||||
|
|||||||
@@ -1789,6 +1789,7 @@ export function resolveChangedTestTargetPlan(changedPaths, options = {}) {
|
|||||||
const useBroadFallback = options.broad ?? shouldUseBroadChangedTargets(env);
|
const useBroadFallback = options.broad ?? shouldUseBroadChangedTargets(env);
|
||||||
const skipImportGraph = changedLanes.lanes.all && !useBroadFallback;
|
const skipImportGraph = changedLanes.lanes.all && !useBroadFallback;
|
||||||
const targets = [];
|
const targets = [];
|
||||||
|
const skippedBroadFallbackPaths = [];
|
||||||
for (const changedPath of changedPaths) {
|
for (const changedPath of changedPaths) {
|
||||||
const preciseTargets = resolvePreciseChangedTestTargets(changedPath, {
|
const preciseTargets = resolvePreciseChangedTestTargets(changedPath, {
|
||||||
...options,
|
...options,
|
||||||
@@ -1803,6 +1804,7 @@ export function resolveChangedTestTargetPlan(changedPaths, options = {}) {
|
|||||||
if (useBroadFallback) {
|
if (useBroadFallback) {
|
||||||
return { mode: "broad", targets: [] };
|
return { mode: "broad", targets: [] };
|
||||||
}
|
}
|
||||||
|
skippedBroadFallbackPaths.push(changedPath);
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
if (isRoutableChangedTarget(changedPath)) {
|
if (isRoutableChangedTarget(changedPath)) {
|
||||||
@@ -1812,7 +1814,11 @@ export function resolveChangedTestTargetPlan(changedPaths, options = {}) {
|
|||||||
if (useBroadFallback && changedLanes.extensionImpactFromCore) {
|
if (useBroadFallback && changedLanes.extensionImpactFromCore) {
|
||||||
targets.push("extensions");
|
targets.push("extensions");
|
||||||
}
|
}
|
||||||
return { mode: "targets", targets: [...new Set(targets)] };
|
const plan = { mode: "targets", targets: [...new Set(targets)] };
|
||||||
|
if (skippedBroadFallbackPaths.length > 0) {
|
||||||
|
plan.skippedBroadFallbackPaths = [...new Set(skippedBroadFallbackPaths)];
|
||||||
|
}
|
||||||
|
return plan;
|
||||||
}
|
}
|
||||||
|
|
||||||
export function listFullExtensionVitestProjectConfigs() {
|
export function listFullExtensionVitestProjectConfigs() {
|
||||||
@@ -1827,20 +1833,32 @@ export function resolveChangedTargetArgs(
|
|||||||
cwd = process.cwd(),
|
cwd = process.cwd(),
|
||||||
listChangedPaths = listChangedPathsFromGit,
|
listChangedPaths = listChangedPathsFromGit,
|
||||||
options = {},
|
options = {},
|
||||||
|
) {
|
||||||
|
const plan = resolveChangedTestTargetPlanForArgs(args, cwd, listChangedPaths, options);
|
||||||
|
if (!plan) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
if (plan.mode === "broad") {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
return plan.targets;
|
||||||
|
}
|
||||||
|
|
||||||
|
export function resolveChangedTestTargetPlanForArgs(
|
||||||
|
args,
|
||||||
|
cwd = process.cwd(),
|
||||||
|
listChangedPaths = listChangedPathsFromGit,
|
||||||
|
options = {},
|
||||||
) {
|
) {
|
||||||
const baseRef = extractChangedBaseRef(args);
|
const baseRef = extractChangedBaseRef(args);
|
||||||
if (!baseRef) {
|
if (!baseRef) {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
const changedPaths = listChangedPaths(baseRef, cwd);
|
const changedPaths = listChangedPaths(baseRef, cwd);
|
||||||
const plan = resolveChangedTestTargetPlan(changedPaths, {
|
return resolveChangedTestTargetPlan(changedPaths, {
|
||||||
cwd,
|
cwd,
|
||||||
...options,
|
...options,
|
||||||
});
|
});
|
||||||
if (plan.mode === "broad") {
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
return plan.targets;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
function classifyTarget(arg, cwd) {
|
function classifyTarget(arg, cwd) {
|
||||||
|
|||||||
@@ -18,6 +18,7 @@ import {
|
|||||||
listFullExtensionVitestProjectConfigs,
|
listFullExtensionVitestProjectConfigs,
|
||||||
orderFullSuiteSpecsForParallelRun,
|
orderFullSuiteSpecsForParallelRun,
|
||||||
shouldAcquireLocalHeavyCheckLock,
|
shouldAcquireLocalHeavyCheckLock,
|
||||||
|
resolveChangedTestTargetPlanForArgs,
|
||||||
resolveChangedTestTargetPlan,
|
resolveChangedTestTargetPlan,
|
||||||
resolveChangedTargetArgs,
|
resolveChangedTargetArgs,
|
||||||
resolveParallelFullSuiteConcurrency,
|
resolveParallelFullSuiteConcurrency,
|
||||||
@@ -198,6 +199,19 @@ describe("scripts/test-projects changed-target routing", () => {
|
|||||||
).toEqual(["src/utils/provider-utils.test.ts"]);
|
).toEqual(["src/utils/provider-utils.test.ts"]);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
it("records broad fallback paths skipped by focused changed mode", () => {
|
||||||
|
expect(
|
||||||
|
resolveChangedTestTargetPlan([
|
||||||
|
"test/vitest/vitest.shared.config.ts",
|
||||||
|
"src/utils/provider-utils.ts",
|
||||||
|
]),
|
||||||
|
).toEqual({
|
||||||
|
mode: "targets",
|
||||||
|
skippedBroadFallbackPaths: ["test/vitest/vitest.shared.config.ts"],
|
||||||
|
targets: ["src/utils/provider-utils.test.ts"],
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
it("keeps the broad changed run available for Vitest wiring edits", () => {
|
it("keeps the broad changed run available for Vitest wiring edits", () => {
|
||||||
expect(
|
expect(
|
||||||
resolveChangedTargetArgs(
|
resolveChangedTargetArgs(
|
||||||
@@ -1136,6 +1150,18 @@ describe("scripts/test-projects changed-target routing", () => {
|
|||||||
).toStrictEqual([]);
|
).toStrictEqual([]);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
it("keeps unknown root surface skip reasons available to changed-mode callers", () => {
|
||||||
|
expect(
|
||||||
|
resolveChangedTestTargetPlanForArgs(["--changed", "origin/main"], process.cwd(), () => [
|
||||||
|
"unknown/file.txt",
|
||||||
|
]),
|
||||||
|
).toEqual({
|
||||||
|
mode: "targets",
|
||||||
|
skippedBroadFallbackPaths: ["unknown/file.txt"],
|
||||||
|
targets: [],
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
it("keeps the broad changed run available for unknown root surfaces", () => {
|
it("keeps the broad changed run available for unknown root surfaces", () => {
|
||||||
expect(
|
expect(
|
||||||
resolveChangedTargetArgs(
|
resolveChangedTargetArgs(
|
||||||
@@ -1690,6 +1716,7 @@ describe("scripts/test-projects changed-target routing", () => {
|
|||||||
it("keeps changed mode to precise targets by default", () => {
|
it("keeps changed mode to precise targets by default", () => {
|
||||||
expect(resolveChangedTestTargetPlan(["package.json", "src/commands/channels.add.ts"])).toEqual({
|
expect(resolveChangedTestTargetPlan(["package.json", "src/commands/channels.add.ts"])).toEqual({
|
||||||
mode: "targets",
|
mode: "targets",
|
||||||
|
skippedBroadFallbackPaths: ["package.json"],
|
||||||
targets: ["src/commands/channels.add.test.ts"],
|
targets: ["src/commands/channels.add.test.ts"],
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
@@ -1709,6 +1736,7 @@ describe("scripts/test-projects changed-target routing", () => {
|
|||||||
|
|
||||||
expect(plan).toEqual({
|
expect(plan).toEqual({
|
||||||
mode: "targets",
|
mode: "targets",
|
||||||
|
skippedBroadFallbackPaths: ["src/gateway/server.impl.ts"],
|
||||||
targets: ["test/scripts/package-acceptance-workflow.test.ts", "test/scripts/check.test.ts"],
|
targets: ["test/scripts/package-acceptance-workflow.test.ts", "test/scripts/check.test.ts"],
|
||||||
});
|
});
|
||||||
expect(repoSourceReads).toEqual([]);
|
expect(repoSourceReads).toEqual([]);
|
||||||
|
|||||||
Reference in New Issue
Block a user