Drop one-shot tmp/axe scripts and agent i18n scratch so the Gitea tree is deployable.
67 lines
1.8 KiB
JavaScript
67 lines
1.8 KiB
JavaScript
#!/usr/bin/env node
|
|
/**
|
|
* Cross-platform: run a command with cwd set to a repo-relative directory.
|
|
* Loads monorepo-root `.env` into the child env (does not override existing vars).
|
|
* Usage: node scripts/run-in-dir.mjs <relDir> <command> [args...]
|
|
*/
|
|
import { spawn } from "node:child_process";
|
|
import fs from "node:fs";
|
|
import path from "node:path";
|
|
import { fileURLToPath } from "node:url";
|
|
|
|
const root = path.resolve(path.dirname(fileURLToPath(import.meta.url)), "..");
|
|
const [relDir, ...cmd] = process.argv.slice(2);
|
|
|
|
if (!relDir || cmd.length === 0) {
|
|
console.error("Usage: node scripts/run-in-dir.mjs <relDir> <command> [args...]");
|
|
process.exit(1);
|
|
}
|
|
|
|
function loadRootEnv(env) {
|
|
const dotenvPath = process.env.DOTENV_PATH
|
|
? path.resolve(process.env.DOTENV_PATH)
|
|
: path.join(root, ".env");
|
|
let text;
|
|
try {
|
|
text = fs.readFileSync(dotenvPath, "utf8");
|
|
} catch {
|
|
return env;
|
|
}
|
|
const out = { ...env };
|
|
for (const raw of text.split(/\r?\n/)) {
|
|
let line = raw.trim();
|
|
if (!line || line.startsWith("#")) continue;
|
|
if (line.startsWith("export ")) line = line.slice(7).trim();
|
|
const eq = line.indexOf("=");
|
|
if (eq <= 0) continue;
|
|
const key = line.slice(0, eq).trim();
|
|
if (!key || Object.prototype.hasOwnProperty.call(out, key)) continue;
|
|
let val = line.slice(eq + 1).trim();
|
|
if (
|
|
(val.startsWith('"') && val.endsWith('"')) ||
|
|
(val.startsWith("'") && val.endsWith("'"))
|
|
) {
|
|
val = val.slice(1, -1);
|
|
}
|
|
out[key] = val;
|
|
}
|
|
return out;
|
|
}
|
|
|
|
const cwd = path.join(root, relDir);
|
|
const [command, ...args] = cmd;
|
|
const child = spawn(command, args, {
|
|
cwd,
|
|
stdio: "inherit",
|
|
shell: process.platform === "win32",
|
|
env: loadRootEnv(process.env),
|
|
});
|
|
|
|
child.on("exit", (code, signal) => {
|
|
if (signal) {
|
|
process.kill(process.pid, signal);
|
|
return;
|
|
}
|
|
process.exit(code ?? 1);
|
|
});
|