| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364 |
- const spawn = require('cross-spawn')
- const TOTAL_SPAWN_STEPS = 8
- const main = async () => {
- let currentSpawnStep = 0
- const logProgress = (message) => {
- currentSpawnStep += 1
- console.log(`\n\x1b[36m${currentSpawnStep}/${TOTAL_SPAWN_STEPS} ${message}...\x1b[0m\n`)
- }
- const spawnPromise = (command, args, message) => new Promise((resolve, reject) => {
- logProgress(message)
- const childProcess = spawn(command, args, { stdio: 'inherit' })
- childProcess.on('close', (code) => {
- if (code === 0) {
- resolve()
- } else {
- reject(new Error(`${command} ${args.join(' ')} exited with code ${code}`))
- }
- })
- })
- const spawnYarnStart = async (message) => new Promise((resolve, reject) => {
- logProgress(message)
- process.env.FORCE_COLOR = true
- const childProcess = spawn('yarn', ['start'], { env: process.env })
- childProcess.stdout.on('data', data => {
- process.stdout.write(data)
- if (data.toString().includes('server is up')) {
- console.log('\nContinue to next step? (Y/n)...')
- }
- })
- childProcess.stderr.on('data', data => { process.stderr.write(data) })
- process.stdin.setRawMode(true)
- process.stdin.once('data', data => {
- childProcess.kill()
- process.stdin.setRawMode(false)
- if (data.toString() === 'n') {
- reject(new Error('Aborted'))
- } else {
- resolve()
- }
- })
- })
- try {
- await spawnPromise('yarn', ['install'], 'Preparing install for TSC and ESLint checks')
- await spawnPromise('yarn', ['tsc'], 'Typescript checks')
- await spawnPromise('yarn', ['eslint'], 'ESLint checks')
- await spawnPromise('yarn', ['test'], 'Run unit tests')
- await spawnPromise('yarn', ['install', '--production'], 'Preparing install for production launch')
- await spawnPromise('yarn', ['build'], 'Production build')
- await spawnYarnStart('Production start')
- await spawnPromise('yarn', ['install'], 'Testing successful! Reverting to development install')
- } catch (e) {
- console.error(e)
- } finally {
- process.exit(0)
- }
- }
- main()
|