





















@@ -6,7 +6,8 @@ import { fileURLToPath } from "node:url";
6677const ROOT_DIR = path.resolve(path.dirname(fileURLToPath(import.meta.url)), "..");
88const DEFAULT_E2E_IMAGE = "openclaw-docker-e2e:local";
9-const DEFAULT_PARALLELISM = 4;
9+const DEFAULT_PARALLELISM = 8;
10+const DEFAULT_TAIL_PARALLELISM = 8;
1011const DEFAULT_FAILURE_TAIL_LINES = 80;
1112const DEFAULT_LANE_TIMEOUT_MS = 120 * 60 * 1000;
1213@@ -54,6 +55,8 @@ const exclusiveLanes = [
5455["live-acp-bind", "OPENCLAW_SKIP_DOCKER_BUILD=1 pnpm test:docker:live-acp-bind"],
5556];
565758+const tailLanes = exclusiveLanes;
59+5760function parsePositiveInt(raw, fallback, label) {
5861if (!raw) {
5962return fallback;
@@ -228,20 +231,6 @@ async function runLanePool(poolLanes, baseEnv, logDir, parallelism, options) {
228231return failures;
229232}
230233231-async function runLanesSerial(serialLanes, baseEnv, logDir, options) {
232-const failures = [];
233-for (const lane of serialLanes) {
234-const result = await runLane(lane, baseEnv, logDir, options.timeoutMs);
235-if (result.status !== 0) {
236-failures.push(result);
237-if (options.failFast) {
238-break;
239-}
240-}
241-}
242-return failures;
243-}
244-245234async function tailFile(file, lines) {
246235const content = await readFile(file, "utf8").catch(() => "");
247236const tail = content.split(/\r?\n/).slice(-lines).join("\n");
@@ -281,6 +270,11 @@ async function main() {
281270DEFAULT_PARALLELISM,
282271"OPENCLAW_DOCKER_ALL_PARALLELISM",
283272);
273+const tailParallelism = parsePositiveInt(
274+process.env.OPENCLAW_DOCKER_ALL_TAIL_PARALLELISM,
275+Math.min(parallelism, DEFAULT_TAIL_PARALLELISM),
276+"OPENCLAW_DOCKER_ALL_TAIL_PARALLELISM",
277+);
284278const tailLines = parsePositiveInt(
285279process.env.OPENCLAW_DOCKER_ALL_FAILURE_TAIL_LINES,
286280DEFAULT_FAILURE_TAIL_LINES,
@@ -308,6 +302,7 @@ async function main() {
308302309303console.log(`==> Docker test logs: ${logDir}`);
310304console.log(`==> Parallelism: ${parallelism}`);
305+console.log(`==> Tail parallelism: ${tailParallelism}`);
311306console.log(`==> Lane timeout: ${laneTimeoutMs}ms`);
312307console.log(`==> Fail fast: ${failFast ? "yes" : "no"}`);
313308console.log(`==> Live-test bundled plugin deps: ${baseEnv.OPENCLAW_DOCKER_BUILD_EXTENSIONS}`);
@@ -321,13 +316,13 @@ async function main() {
321316322317const options = { failFast, timeoutMs: laneTimeoutMs };
323318const failures = await runLanePool(lanes, baseEnv, logDir, parallelism, options);
324-if (failures.length > 0) {
319+if (failFast && failures.length > 0) {
325320await printFailureSummary(failures, tailLines);
326321process.exit(1);
327322}
328323329-console.log("==> Running provider-sensitive Docker lanes exclusively");
330-failures.push(...(await runLanesSerial(exclusiveLanes, baseEnv, logDir, options)));
324+console.log("==> Running provider-sensitive Docker tail lanes");
325+failures.push(...(await runLanePool(tailLanes, baseEnv, logDir, tailParallelism, options)));
331326if (failures.length > 0) {
332327await printFailureSummary(failures, tailLines);
333328process.exit(1);
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。