import { spawn } from "child_process";
import { log } from "./logger";

export function exec(jobId: number, command: string, args: string[] = []) {
  return new Promise<void>((resolve, reject) => {
    const child = spawn(command, args, { stdio: "pipe" });

    child.stdout.on("data", async data => {
      await log(jobId, "stdout", data.toString());
    });

    child.stderr.on("data", async data => {
      await log(jobId, "stderr", data.toString());
    });

    child.on("close", code => {
      if (code === 0) resolve();
      else reject(new Error("Command failed with code " + code));
    });
  });
}
