42 lines
1.2 KiB
JavaScript
42 lines
1.2 KiB
JavaScript
const { exec } = require('node:child_process');
|
|
const ecosystem = require('../../ecosystem.config.js');
|
|
const logger = require('../logger.js');
|
|
|
|
const EXEC_TIMEOUT = 60000;
|
|
|
|
const executeCmd = cmd => new Promise((resolve, reject) => {
|
|
exec(cmd, { timeout: EXEC_TIMEOUT }, (err, stdout, stderr) => {
|
|
if (err) return reject(err);
|
|
if (stderr) logger.warn(`Warning while executing: ${cmd}\n${stderr}`);
|
|
|
|
resolve(stdout.trim());
|
|
});
|
|
});
|
|
|
|
const CMD_1 = 'npm install --omit=dev';
|
|
const APP_NAME = (() => {
|
|
if (!ecosystem.apps?.[0]?.name) throw new Error('Missing app name in ecosystem config');
|
|
return ecosystem.apps[0].name;
|
|
})();
|
|
const CMD_2 = `pm2 restart ${APP_NAME}`;
|
|
|
|
module.exports = async () => {
|
|
try {
|
|
// 1 - npm dependencies
|
|
logger.info(`Running npm '${CMD_1}'...`);
|
|
const result1 = await executeCmd(CMD_1);
|
|
logger.info(result1, { discord: true });
|
|
|
|
// 2 - restart
|
|
if (process.env.pm_id !== undefined) {
|
|
logger.info(`Running '${CMD_2}'...`);
|
|
await executeCmd(CMD_2);
|
|
} else {
|
|
logger.info('Process is not managed by PM2! Exiting to apply updates. To start again, run: node . (one-time), pm2 start (24/7 with auto-restart).', { discord: true });
|
|
process.exit(0);
|
|
}
|
|
} catch (err) {
|
|
logger.error(err.stack);
|
|
}
|
|
};
|