singularity-forge/scripts/with-env.mjs
2026-05-05 14:31:16 +02:00

50 lines
1.1 KiB
JavaScript

#!/usr/bin/env node
import { spawn } from "node:child_process";
const args = process.argv.slice(2);
const env = { ...process.env };
let separatorIndex = args.indexOf("--");
let commandStart = separatorIndex >= 0 ? separatorIndex + 1 : 0;
for (let i = 0; i < (separatorIndex >= 0 ? separatorIndex : args.length); i++) {
const arg = args[i];
const eq = arg.indexOf("=");
if (eq <= 0) {
commandStart = i;
separatorIndex = -1;
break;
}
env[arg.slice(0, eq)] = arg.slice(eq + 1);
}
const commandArgs = args.slice(commandStart);
if (commandArgs.length === 0) {
process.stderr.write(
"with-env: expected a command after environment assignments\n",
);
process.exit(1);
}
const [command, ...childArgs] = commandArgs;
const child = spawn(command, childArgs, {
stdio: "inherit",
env,
shell: process.platform === "win32",
});
child.on("exit", (code, signal) => {
if (signal) {
process.kill(process.pid, signal);
return;
}
process.exit(code ?? 0);
});
child.on("error", (error) => {
process.stderr.write(
`with-env: failed to run ${command}: ${error.message}\n`,
);
process.exit(1);
});