

























@@ -19,6 +19,14 @@ import { resolveChangedTestTargetPlan } from "./test-projects.test-support.mjs";
1919export const CHANGED_CHECK_VITEST_NO_OUTPUT_TIMEOUT_MS = "600000";
2020const VITEST_NO_OUTPUT_TIMEOUT_ENV_KEY = "OPENCLAW_VITEST_NO_OUTPUT_TIMEOUT_MS";
2121const VITEST_NO_OUTPUT_RETRY_ENV_KEY = "OPENCLAW_VITEST_NO_OUTPUT_RETRY";
22+const LIVE_DOCKER_AUTH_SHELL_TARGETS = [
23+"scripts/lib/live-docker-auth.sh",
24+"scripts/test-live-acp-bind-docker.sh",
25+"scripts/test-live-cli-backend-docker.sh",
26+"scripts/test-live-codex-harness-docker.sh",
27+"scripts/test-live-gateway-models-docker.sh",
28+"scripts/test-live-models-docker.sh",
29+];
22302331export function createChangedCheckChildEnv(baseEnv = process.env) {
2432const resolvedBaseEnv = resolveLocalHeavyCheckEnv(baseEnv);
@@ -67,6 +75,15 @@ export function createChangedCheckPlan(result, options = {}) {
6775commands.push({ name, args, ...(env ? { env } : {}) });
6876}
6977};
78+const addCommand = (name, bin, args, env) => {
79+if (
80+!commands.some(
81+(command) => command.name === name && command.bin === bin && sameArgs(command.args, args),
82+)
83+) {
84+commands.push({ name, bin, args, ...(env ? { env } : {}) });
85+}
86+};
7087const addTypecheck = (name, args) => add(name, args, createSparseTsgoSkipEnv(baseEnv));
7188const addLint = (name, args) => add(name, args, baseEnv);
7289@@ -138,10 +155,17 @@ export function createChangedCheckPlan(result, options = {}) {
138155if (lanes.core || lanes.coreTests) {
139156addLint("lint core", ["lint:core"]);
140157}
158+if (
159+lanes.liveDockerTooling &&
160+result.paths.some((changedPath) => changedPath.startsWith("src/"))
161+) {
162+addTypecheck("typecheck core tests", ["tsgo:core:test"]);
163+addLint("lint core", ["lint:core"]);
164+}
141165if (lanes.extensions || lanes.extensionTests) {
142166addLint("lint extensions", ["lint:extensions"]);
143167}
144-if (lanes.tooling) {
168+if (lanes.tooling || lanes.liveDockerTooling) {
145169addLint("lint scripts", ["lint:scripts"]);
146170}
147171if (lanes.apps) {
@@ -157,6 +181,21 @@ export function createChangedCheckPlan(result, options = {}) {
157181add("pairing account guard", ["lint:auth:pairing-account-scope"]);
158182}
159183184+if (lanes.liveDockerTooling) {
185+addCommand("live Docker shell syntax", "bash", ["-n", ...LIVE_DOCKER_AUTH_SHELL_TARGETS]);
186+addCommand("live Docker scheduler dry run", "node", ["scripts/test-docker-all.mjs"], {
187+ ...baseEnv,
188+OPENCLAW_DOCKER_ALL_DRY_RUN: "1",
189+OPENCLAW_DOCKER_ALL_LIVE_MODE: "only",
190+});
191+add(
192+"ACP bind unit tests",
193+["test", "src/gateway/live-agent-probes.test.ts", "src/agents/acp-spawn.test.ts"],
194+createChangedCheckVitestEnv(baseEnv),
195+);
196+add("ACPX extension tests", ["test:extension", "acpx"], createChangedCheckVitestEnv(baseEnv));
197+}
198+160199const testPlan = resolveChangedTestTargetPlan(result.paths);
161200const runExtensionTests = result.extensionImpactFromCore;
162201const testTargets = runExtensionTests
@@ -197,7 +236,7 @@ export async function runChangedCheck(result, options = {}) {
197236198237const timings = [];
199238for (const command of plan.commands) {
200-const status = await runPnpm(command, timings);
239+const status = await runPlanCommand(command, timings);
201240if (status !== 0) {
202241printSummary(timings, options);
203242return status;
@@ -291,6 +330,13 @@ async function runPnpm(command, timings) {
291330return await runCommand({ ...command, bin: "pnpm" }, timings);
292331}
293332333+async function runPlanCommand(command, timings) {
334+if (command.bin) {
335+return await runCommand(command, timings);
336+}
337+return await runPnpm(command, timings);
338+}
339+294340async function runCommand(command, timings) {
295341const startedAt = performance.now();
296342console.error(`\n[check:changed] ${command.name}`);
@@ -338,6 +384,9 @@ function parseArgs(argv) {
338384],
339385{
340386onUnhandledArg(arg, target) {
387+if (arg === "--") {
388+return "handled";
389+}
341390target.paths.push(normalizeChangedPath(arg));
342391return "handled";
343392},
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。