UNPKG

@mountainpass/hooked-cli

Version:
47 lines (46 loc) 2.4 kB
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 };