mirror of
https://github.com/openclaw/openclaw.git
synced 2026-05-19 04:44:46 +00:00
103 lines
2.7 KiB
JavaScript
103 lines
2.7 KiB
JavaScript
import { spawn, spawnSync } from "node:child_process";
|
|
import path from "node:path";
|
|
import {
|
|
acquireLocalHeavyCheckLockSync,
|
|
resolveLocalHeavyCheckEnv,
|
|
shouldAcquireLocalHeavyCheckLockForOxlint,
|
|
} from "./lib/local-heavy-check-runtime.mjs";
|
|
|
|
const extraArgs = process.argv.slice(2);
|
|
const runner = path.resolve("scripts", "run-oxlint.mjs");
|
|
const env = resolveLocalHeavyCheckEnv(process.env);
|
|
const hasMetadataOnlyFlag = extraArgs.some((arg) =>
|
|
["--help", "-h", "--version", "-V", "--rules", "--print-config", "--init"].includes(arg),
|
|
);
|
|
const shouldAcquireParentLock =
|
|
!hasMetadataOnlyFlag ||
|
|
shouldAcquireLocalHeavyCheckLockForOxlint(extraArgs, {
|
|
cwd: process.cwd(),
|
|
env,
|
|
});
|
|
const releaseLock =
|
|
env.OPENCLAW_OXLINT_SKIP_LOCK === "1"
|
|
? () => {}
|
|
: shouldAcquireParentLock
|
|
? acquireLocalHeavyCheckLockSync({
|
|
cwd: process.cwd(),
|
|
env,
|
|
toolName: "oxlint shards",
|
|
})
|
|
: () => {};
|
|
|
|
const shards = [
|
|
{
|
|
name: "core",
|
|
args: ["--tsconfig", "config/tsconfig/oxlint.core.json", "src", "ui", "packages"],
|
|
},
|
|
{
|
|
name: "extensions",
|
|
args: ["--tsconfig", "config/tsconfig/oxlint.extensions.json", "extensions"],
|
|
},
|
|
{
|
|
name: "scripts",
|
|
args: ["--tsconfig", "config/tsconfig/oxlint.scripts.json", "scripts"],
|
|
},
|
|
];
|
|
|
|
try {
|
|
const prepareResult = spawnSync(
|
|
process.execPath,
|
|
[path.resolve("scripts", "prepare-extension-package-boundary-artifacts.mjs")],
|
|
{
|
|
stdio: "inherit",
|
|
env,
|
|
},
|
|
);
|
|
|
|
if (prepareResult.error) {
|
|
throw prepareResult.error;
|
|
}
|
|
if ((prepareResult.status ?? 1) !== 0) {
|
|
process.exitCode = prepareResult.status ?? 1;
|
|
} else {
|
|
const runSerial = env.OPENCLAW_OXLINT_SHARDS_SERIAL === "1";
|
|
const results = runSerial
|
|
? await runShardsSerial(shards)
|
|
: await Promise.all(shards.map((shard) => runShard(shard)));
|
|
process.exitCode = results.find((status) => status !== 0) ?? 0;
|
|
}
|
|
} finally {
|
|
releaseLock();
|
|
}
|
|
|
|
async function runShardsSerial(entries) {
|
|
const results = [];
|
|
for (const shard of entries) {
|
|
results.push(await runShard(shard));
|
|
}
|
|
return results;
|
|
}
|
|
|
|
async function runShard(shard) {
|
|
console.error(`[oxlint:${shard.name}] starting`);
|
|
const child = spawn(process.execPath, [runner, ...shard.args, ...extraArgs], {
|
|
stdio: "inherit",
|
|
env: {
|
|
...env,
|
|
OPENCLAW_OXLINT_SKIP_LOCK: "1",
|
|
OPENCLAW_OXLINT_SKIP_PREPARE: "1",
|
|
},
|
|
});
|
|
|
|
return await new Promise((resolve) => {
|
|
child.once("error", (error) => {
|
|
console.error(error);
|
|
resolve(1);
|
|
});
|
|
child.once("close", (status) => {
|
|
console.error(`[oxlint:${shard.name}] finished`);
|
|
resolve(status ?? 1);
|
|
});
|
|
});
|
|
}
|