• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1import assert from "assert";
2import cp from "child_process";
3
4/**
5 * @param {[string, string[]][]} tasks
6 * @param {cp.SpawnSyncOptions} opts
7 * @returns {string}
8 */
9export function runSequence(tasks, opts = { timeout: 100000, shell: true }) {
10    let lastResult;
11    for (const task of tasks) {
12        console.log(`${task[0]} ${task[1].join(" ")}`);
13        const result = cp.spawnSync(task[0], task[1], opts);
14        if (result.status !== 0) throw new Error(`${task[0]} ${task[1].join(" ")} failed: ${result.stderr && "stderr: " + result.stderr.toString()}${result.stdout && "\nstdout: " + result.stdout.toString()}`);
15        console.log(result.stdout && result.stdout.toString());
16        lastResult = result;
17    }
18    const out = lastResult?.stdout?.toString();
19    assert(out !== undefined);
20    return out;
21}
22