

















@@ -3,21 +3,41 @@ import { mkdirSync, writeFileSync } from "node:fs";
33import path from "node:path";
44import { afterEach, describe, expect, it } from "vitest";
55import { detectChangedLanes } from "../../scripts/changed-lanes.mjs";
6-import { createChangedCheckPlan } from "../../scripts/check-changed.mjs";
6+import {
7+CHANGED_CHECK_VITEST_NO_OUTPUT_TIMEOUT_MS,
8+createChangedCheckPlan,
9+createChangedCheckVitestEnv,
10+} from "../../scripts/check-changed.mjs";
711import { cleanupTempDirs, makeTempRepoRoot } from "../helpers/temp-repo.js";
812913const tempDirs: string[] = [];
1014const repoRoot = process.cwd();
15+const nestedGitEnvKeys = [
16+"GIT_ALTERNATE_OBJECT_DIRECTORIES",
17+"GIT_DIR",
18+"GIT_INDEX_FILE",
19+"GIT_OBJECT_DIRECTORY",
20+"GIT_QUARANTINE_PATH",
21+"GIT_WORK_TREE",
22+] as const;
23+24+function createNestedGitEnv(): NodeJS.ProcessEnv {
25+const env = {
26+ ...process.env,
27+GIT_CONFIG_NOSYSTEM: "1",
28+GIT_TERMINAL_PROMPT: "0",
29+};
30+for (const key of nestedGitEnvKeys) {
31+delete env[key];
32+}
33+return env;
34+}
11351236const git = (cwd: string, args: string[]) =>
1337execFileSync("git", args, {
1438 cwd,
1539encoding: "utf8",
16-env: {
17- ...process.env,
18-GIT_CONFIG_NOSYSTEM: "1",
19-GIT_TERMINAL_PROMPT: "0",
20-},
40+env: createNestedGitEnv(),
2141}).trim();
22422343afterEach(() => {
@@ -50,11 +70,7 @@ describe("scripts/changed-lanes", () => {
5070{
5171cwd: dir,
5272encoding: "utf8",
53-env: {
54- ...process.env,
55-GIT_CONFIG_NOSYSTEM: "1",
56-GIT_TERMINAL_PROMPT: "0",
57-},
73+env: createNestedGitEnv(),
5874},
5975);
6076@@ -238,6 +254,7 @@ describe("scripts/changed-lanes", () => {
238254[path.join(repoRoot, "scripts", "check-release-metadata-only.mjs"), "--staged"],
239255{
240256cwd: dir,
257+env: createNestedGitEnv(),
241258stdio: "pipe",
242259},
243260),
@@ -255,6 +272,7 @@ describe("scripts/changed-lanes", () => {
255272[path.join(repoRoot, "scripts", "check-release-metadata-only.mjs"), "--staged"],
256273{
257274cwd: dir,
275+env: createNestedGitEnv(),
258276stdio: "pipe",
259277},
260278),
@@ -344,4 +362,22 @@ describe("scripts/changed-lanes", () => {
344362expect(plan.runChangedTestsBroad).toBe(false);
345363expect(plan.runFullTests).toBe(false);
346364});
365+366+it("sets a fail-fast Vitest watchdog for changed checks", () => {
367+expect(createChangedCheckVitestEnv({ PATH: "/usr/bin" })).toMatchObject({
368+PATH: "/usr/bin",
369+OPENCLAW_VITEST_NO_OUTPUT_TIMEOUT_MS: CHANGED_CHECK_VITEST_NO_OUTPUT_TIMEOUT_MS,
370+OPENCLAW_VITEST_NO_OUTPUT_RETRY: "0",
371+});
372+373+expect(
374+createChangedCheckVitestEnv({
375+OPENCLAW_VITEST_NO_OUTPUT_TIMEOUT_MS: "45000",
376+OPENCLAW_VITEST_NO_OUTPUT_RETRY: "1",
377+}),
378+).toMatchObject({
379+OPENCLAW_VITEST_NO_OUTPUT_TIMEOUT_MS: "45000",
380+OPENCLAW_VITEST_NO_OUTPUT_RETRY: "1",
381+});
382+});
347383});
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。