






















@@ -1,24 +1,33 @@
11import { spawn, spawnSync } from "node:child_process";
22import path from "node:path";
3+import {
4+acquireLocalHeavyCheckLockSync,
5+resolveLocalHeavyCheckEnv,
6+shouldAcquireLocalHeavyCheckLockForOxlint,
7+} from "./lib/local-heavy-check-runtime.mjs";
3849const extraArgs = process.argv.slice(2);
510const runner = path.resolve("scripts", "run-oxlint.mjs");
6-7-const prepareResult = spawnSync(
8-process.execPath,
9-[path.resolve("scripts", "prepare-extension-package-boundary-artifacts.mjs")],
10-{
11-stdio: "inherit",
12-env: process.env,
13-},
11+const env = resolveLocalHeavyCheckEnv(process.env);
12+const hasMetadataOnlyFlag = extraArgs.some((arg) =>
13+["--help", "-h", "--version", "-V", "--rules", "--print-config", "--init"].includes(arg),
1414);
15-16-if (prepareResult.error) {
17-throw prepareResult.error;
18-}
19-if ((prepareResult.status ?? 1) !== 0) {
20-process.exit(prepareResult.status ?? 1);
21-}
15+const shouldAcquireParentLock =
16+!hasMetadataOnlyFlag ||
17+shouldAcquireLocalHeavyCheckLockForOxlint(extraArgs, {
18+cwd: process.cwd(),
19+ env,
20+});
21+const releaseLock =
22+env.OPENCLAW_OXLINT_SKIP_LOCK === "1"
23+ ? () => {}
24+ : shouldAcquireParentLock
25+ ? acquireLocalHeavyCheckLockSync({
26+cwd: process.cwd(),
27+ env,
28+toolName: "oxlint shards",
29+})
30+ : () => {};
22312332const shards = [
2433{
@@ -35,11 +44,31 @@ const shards = [
3544},
3645];
374638-const runSerial = process.env.OPENCLAW_OXLINT_SHARDS_SERIAL === "1";
39-const results = runSerial
40- ? await runShardsSerial(shards)
41- : await Promise.all(shards.map((shard) => runShard(shard)));
42-process.exitCode = results.find((status) => status !== 0) ?? 0;
47+try {
48+const prepareResult = spawnSync(
49+process.execPath,
50+[path.resolve("scripts", "prepare-extension-package-boundary-artifacts.mjs")],
51+{
52+stdio: "inherit",
53+ env,
54+},
55+);
56+57+if (prepareResult.error) {
58+throw prepareResult.error;
59+}
60+if ((prepareResult.status ?? 1) !== 0) {
61+process.exitCode = prepareResult.status ?? 1;
62+} else {
63+const runSerial = env.OPENCLAW_OXLINT_SHARDS_SERIAL === "1";
64+const results = runSerial
65+ ? await runShardsSerial(shards)
66+ : await Promise.all(shards.map((shard) => runShard(shard)));
67+process.exitCode = results.find((status) => status !== 0) ?? 0;
68+}
69+} finally {
70+releaseLock();
71+}
43724473async function runShardsSerial(entries) {
4574const results = [];
@@ -54,7 +83,7 @@ async function runShard(shard) {
5483const child = spawn(process.execPath, [runner, ...shard.args, ...extraArgs], {
5584stdio: "inherit",
5685env: {
57- ...process.env,
86+ ...env,
5887OPENCLAW_OXLINT_SKIP_LOCK: "1",
5988OPENCLAW_OXLINT_SKIP_PREPARE: "1",
6089},
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。