



























@@ -37,6 +37,17 @@ function runHelper(script: string) {
3737});
3838}
393940+function getPackageManagerHelperBlock(): string {
41+const script = readFileSync(scriptPath, "utf8");
42+const start = script.indexOf("DIST_PNPM_CMD=()");
43+const end = script.indexOf("ensure_sparkle_build_deps()");
44+45+expect(start).toBeGreaterThanOrEqual(0);
46+expect(end).toBeGreaterThan(start);
47+48+return script.slice(start, end);
49+}
50+4051afterEach(() => {
4152for (const dir of tempDirs.splice(0)) {
4253rmSync(dir, { recursive: true, force: true });
@@ -102,6 +113,68 @@ describe("package-mac-dist plist validation", () => {
102113expect(script).not.toContain('canonical_sparkle_build "$VERSION" 2>/dev/null || true');
103114});
104115116+it("prefers repo Corepack pnpm over a global pnpm shim", () => {
117+const helperBlock = getPackageManagerHelperBlock();
118+const tempRoot = mkdtempSync(path.join(tmpdir(), "openclaw-dist-pnpm-root-"));
119+const outerRoot = mkdtempSync(path.join(tmpdir(), "openclaw-dist-pnpm-outer-"));
120+const toolsDir = mkdtempSync(path.join(tmpdir(), "openclaw-dist-pnpm-tools-"));
121+const logPath = path.join(tempRoot, "pnpm.log");
122+tempDirs.push(tempRoot, outerRoot, toolsDir);
123+124+writeFileSync(
125+path.join(tempRoot, "package.json"),
126+'{\n "packageManager": "pnpm@11.2.2+sha512.test"\n}\n',
127+);
128+writeFileSync(
129+path.join(outerRoot, "package.json"),
130+'{\n "packageManager": "pnpm@11.8.0+sha512.test"\n}\n',
131+);
132+writeFileSync(
133+path.join(toolsDir, "pnpm"),
134+[
135+"#!/usr/bin/env bash",
136+"set -euo pipefail",
137+'printf "global|%s|%s\\n" "$PWD" "$*" >> "$OPENCLAW_TEST_LOG"',
138+'if [[ "${1:-}" == "--version" ]]; then echo "11.8.0"; fi',
139+"",
140+].join("\n"),
141+"utf8",
142+);
143+writeFileSync(
144+path.join(toolsDir, "corepack"),
145+[
146+"#!/usr/bin/env bash",
147+"set -euo pipefail",
148+'printf "corepack|%s|%s\\n" "$PWD" "$*" >> "$OPENCLAW_TEST_LOG"',
149+'if [[ "${1:-}" == "pnpm" && "${2:-}" == "--version" ]]; then',
150+' if grep -q "pnpm@11.2.2" package.json 2>/dev/null; then echo "11.2.2"; else echo "11.8.0"; fi',
151+"fi",
152+"",
153+].join("\n"),
154+"utf8",
155+);
156+chmodSync(path.join(toolsDir, "pnpm"), 0o755);
157+chmodSync(path.join(toolsDir, "corepack"), 0o755);
158+159+const result = runHelper(`
160+ set -euo pipefail
161+ ROOT_DIR=${JSON.stringify(tempRoot)}
162+ OPENCLAW_TEST_LOG=${JSON.stringify(logPath)}
163+ export OPENCLAW_TEST_LOG
164+ PATH=${JSON.stringify(`${toolsDir}:/usr/bin:/bin`)}
165+ cd ${JSON.stringify(outerRoot)}
166+ ${helperBlock}
167+ run_dist_pnpm --version
168+ `);
169+170+expect(result.status).toBe(0);
171+expect(result.stdout).toBe("11.2.2\n");
172+expect(readFileSync(logPath, "utf8").trim().split("\n")).toEqual([
173+`corepack|${tempRoot}|pnpm --version`,
174+`corepack|${tempRoot}|pnpm --version`,
175+]);
176+});
177+105178it("keeps dependency bootstrap output out of captured Sparkle build values", () => {
106179const script = readFileSync(scriptPath, "utf8");
107180const helpers = script.slice(
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。