

















@@ -43,6 +43,45 @@ afterEach(() => {
4343});
44444545describe("package-mac-app plist stamping", () => {
46+it("keeps dependency installation lockfile-safe", () => {
47+const script = readFileSync(scriptPath, "utf8");
48+const installBlock = script.slice(
49+script.indexOf('if [[ "${SKIP_PNPM_INSTALL:-0}" != "1" ]]'),
50+script.indexOf('if [[ -z "${APP_BUILD:-}" ]]'),
51+);
52+53+expect(installBlock).toContain("pnpm install --frozen-lockfile");
54+expect(installBlock).toContain("--config.node-linker=hoisted");
55+expect(installBlock).not.toContain("--no-frozen-lockfile");
56+});
57+58+it("does not kill unrelated OpenClaw processes during packaging", () => {
59+const script = readFileSync(scriptPath, "utf8");
60+const stopBlock = script.slice(
61+script.indexOf("running_packaged_app_pids()"),
62+script.indexOf('echo "🔏 Signing bundle'),
63+);
64+65+expect(script).not.toContain("killall -q OpenClaw");
66+expect(stopBlock).toContain('local app_binary="$APP_ROOT/Contents/MacOS/OpenClaw"');
67+expect(stopBlock).toContain('pgrep -x "$PRODUCT"');
68+expect(stopBlock).toContain('grep -Fx "$app_binary"');
69+expect(stopBlock).toContain(
70+'[[ "$command_line" == "$app_binary" || "$command_line" == "$app_binary "* ]]',
71+);
72+});
73+74+it("keeps mac packaging script checks in the macOS CI lane", () => {
75+const pkg = JSON.parse(readFileSync("package.json", "utf8")) as {
76+scripts?: Record<string, string>;
77+};
78+const macosCi = pkg.scripts?.["test:macos:ci"] ?? "";
79+80+expect(macosCi).toContain("test/scripts/package-mac-app.test.ts");
81+expect(macosCi).toContain("test/scripts/package-mac-dist.test.ts");
82+expect(macosCi).toContain("test/scripts/create-dmg.test.ts");
83+});
84+4685it("fails closed when required bundled resources are missing", () => {
4786const script = readFileSync(scriptPath, "utf8");
4887const modelCatalogBlock = script.slice(
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。