67 lines
1.5 KiB
TypeScript
67 lines
1.5 KiB
TypeScript
import * as fs from 'fs-extra'
|
|
import * as path from 'path'
|
|
import { spawn, ChildProcess } from 'child_process'
|
|
import { chdir } from 'process'
|
|
|
|
async function exec(cmd: string, args: string[] = []) {
|
|
const child = spawn(cmd, args, { shell: true })
|
|
redirectOutputFor(child)
|
|
await waitFor(child)
|
|
}
|
|
|
|
function redirectOutputFor(child: ChildProcess) {
|
|
const printStdout = (data: Buffer) => {
|
|
process.stdout.write(data.toString())
|
|
}
|
|
const printStderr = (data: Buffer) => {
|
|
process.stderr.write(data.toString())
|
|
}
|
|
child.stdout.on('data', printStdout)
|
|
child.stderr.on('data', printStderr)
|
|
|
|
child.once('close', () => {
|
|
child.stdout.off('data', printStdout)
|
|
child.stderr.off('data', printStderr)
|
|
})
|
|
}
|
|
|
|
async function waitFor(child: ChildProcess) {
|
|
|
|
return new Promise((resolve) => {
|
|
child.once('close', () => resolve())
|
|
})
|
|
}
|
|
|
|
const targetDir = path.join('build', 'clean')
|
|
async function prepareRelease() {
|
|
const originalDir = __dirname
|
|
await fs.remove(targetDir)
|
|
await fs.mkdirp(targetDir)
|
|
|
|
// Create fresh clone of the local git repo
|
|
await exec('git', ['clone', '.git', targetDir])
|
|
|
|
// Enter git repo
|
|
chdir(targetDir)
|
|
|
|
// Install app dependencies
|
|
chdir('app')
|
|
await exec('yarn')
|
|
chdir('..')
|
|
|
|
// Install electron dependencies
|
|
await exec('yarn')
|
|
|
|
// Build App and Electron backend
|
|
await exec('yarn', ['build'])
|
|
|
|
// Clean up
|
|
await fs.remove('node_modules')
|
|
await exec('yarn', ['install', '--production'])
|
|
await fs.remove(path.join('app', 'node_modules'))
|
|
|
|
chdir(originalDir)
|
|
}
|
|
|
|
prepareRelease()
|