|
const { spawn } = require('child_process'); |
|
const path = require('path'); |
|
|
|
const exocoreWebDir = path.join(__dirname, 'exocore-web'); |
|
|
|
function runProcess(command, args, options = {}) { |
|
const mergedOptions = { |
|
stdio: 'inherit', |
|
shell: true, |
|
...options |
|
}; |
|
|
|
const child = spawn(command, args, mergedOptions); |
|
|
|
child.on('error', (err) => { |
|
console.error(`Error starting process "${command} ${args.join(' ')}":`, err); |
|
}); |
|
|
|
child.on('exit', (code, signal) => { |
|
if (code !== null && code !== 0) { |
|
console.error(`Process "${command} ${args.join(' ')}" exited with code ${code} and signal ${signal}`); |
|
} |
|
}); |
|
|
|
return child; |
|
} |
|
|
|
async function startServices() { |
|
try { |
|
console.log('Running update check...'); |
|
const updateProcess = runProcess('node', ['updates']); |
|
await new Promise(resolve => updateProcess.on('exit', resolve)); |
|
|
|
const buildProcess = runProcess('node', [ |
|
'--trace-warnings', |
|
'--async-stack-traces', |
|
'build.js' |
|
], { cwd: exocoreWebDir }); |
|
|
|
const serverProcess = runProcess('node', [ |
|
'--trace-warnings', |
|
'--async-stack-traces', |
|
'-r', 'ts-node/register', |
|
'index.js' |
|
], { cwd: exocoreWebDir }); |
|
|
|
process.on('SIGINT', () => { |
|
console.log('\nShutting down Exocore Web services...'); |
|
buildProcess.kill('SIGINT'); |
|
serverProcess.kill('SIGINT'); |
|
process.exit(0); |
|
}); |
|
process.on('SIGTERM', () => { |
|
console.log('\nShutting down Exocore Web services...'); |
|
buildProcess.kill('SIGTERM'); |
|
serverProcess.kill('SIGTERM'); |
|
process.exit(0); |
|
}); |
|
|
|
} catch (error) { |
|
console.error('An error occurred during service startup:', error); |
|
process.exit(1); |
|
} |
|
} |
|
|
|
startServices(); |
|
|