@mountainpass/hooked-cli
Version:
A tool for runnable scripts
47 lines (46 loc) • 2.4 kB
JavaScript
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
return new (P || (P = Promise))(function (resolve, reject) {
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
};
import nodeCleanup from 'node-cleanup';
import logger from './utils/logger.js';
import { childProcesses, dockerNames } from './scriptExecutors/$cmd.js';
import verifyLocalRequiredTools from './scriptExecutors/verifyLocalRequiredTools.js';
import { cleanupOldTmpFiles } from './utils/fileUtils.js';
const onExit = (options) => {
nodeCleanup((exitCode, signal) => {
logger.debug(`Received exit code [${exitCode}] and signal [${signal}]`);
const newExitCode = exitCode !== null ? exitCode : typeof signal === 'string' ? 1 : 0;
// delete tmp files...
if (options.skipCleanup !== true) {
logger.debug('Cleaning up .tmp and .env files...');
cleanupOldTmpFiles();
}
// kill child processes
logger.debug(`Cleaning up child processes... [${childProcesses.length}]`);
for (const child of childProcesses) {
child.kill('SIGKILL'); // SIGKILL 9 / SIGTERM 15
}
// kill docker containers
logger.debug(`Cleaning up docker containers... [${dockerNames.length}]`);
Promise.all(dockerNames.map((dockerName) => __awaiter(void 0, void 0, void 0, function* () {
return yield verifyLocalRequiredTools.verifyDockerKilled(dockerName);
})))
.then(() => {
logger.debug(`Shutting down hooked with exit code [${newExitCode}]`);
process.kill(process.pid, newExitCode);
})
.catch((err) => {
logger.error(err);
process.kill(process.pid, newExitCode);
});
nodeCleanup.uninstall(); // don't call cleanup handler again, allow promises to cleanup!
return false;
});
};
export default { onExit };