UNPKG

@coveo/semantic-monorepo-tools

Version:

A library of helper functions to do SemVer2 compliant releases from Conventional Commits in monorepos

34 lines (33 loc) 1.23 kB
import { spawn } from "node:child_process"; import defaultLogger from "./logger.js"; export default function (command, args, logger = defaultLogger, options = {}) { const loggableArgs = args.join(" "); logger?.('executing "%s %s"', command, loggableArgs); let stdout = ""; let stderr = ""; const { encoding, ...spawnOptions } = { encoding: "utf-8", shell: process.platform === "win32" ? "powershell" : undefined, ...options, }; return new Promise((resolve, reject) => { const childProcess = spawn(command, args, spawnOptions); childProcess.stdout.on("data", (data) => { logger?.(`STDOUT: ${data}`); stdout += data.toString(encoding); }); childProcess.stderr.on("data", (data) => { logger?.(`STDERR: ${data}`); stderr += data.toString(encoding); }); childProcess.on("close", (code, signal) => { logger?.(`${command} ${loggableArgs} finished with code ${code} and signal '${signal}'`); if (code) { reject({ stdout, stderr }); } else { resolve({ stdout, stderr }); } }); }); }