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