semantic-release-stack-upload
Version:
A semantic-release plugin to upload Haskell packages to Hackage with stack
62 lines • 1.93 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.exec = void 0;
const tslib_1 = require("tslib");
const os_1 = tslib_1.__importDefault(require("os"));
const child_process_1 = require("child_process");
const exec = (cmd, args, logger) => {
return new Promise((resolve, reject) => {
// All of the below is basically taken from @actions/exec
const cp = (0, child_process_1.spawn)(cmd, args);
let stdbuffer = "";
if (cp.stdout) {
cp.stdout.on("data", (data) => {
stdbuffer = _processLineBuffer(data, stdbuffer, (line) => {
logger.log(line);
});
});
}
let errbuffer = "";
if (cp.stderr) {
cp.stderr.on("data", (data) => {
errbuffer = _processLineBuffer(data, errbuffer, (line) => {
logger.log(line);
});
});
}
cp.on("error", (err) => {
logger.error(err.message);
reject(err);
});
const finish = (code) => {
if (stdbuffer.length > 0) {
logger.log(stdbuffer);
}
if (errbuffer.length > 0) {
logger.log(errbuffer);
}
resolve(code);
};
cp.on("exit", finish);
cp.on("close", finish);
});
};
exports.exec = exec;
function _processLineBuffer(data, strBuffer, onLine) {
try {
let s = strBuffer + data.toString();
let n = s.indexOf(os_1.default.EOL);
while (n > -1) {
const line = s.substring(0, n);
onLine(line);
// the rest of the string ...
s = s.substring(n + os_1.default.EOL.length);
n = s.indexOf(os_1.default.EOL);
}
return s;
}
catch (err) {
return "";
}
}
//# sourceMappingURL=exec.js.map