feat: improve report and comment workflows
This commit is contained in:
@@ -0,0 +1,88 @@
|
||||
import { spawn } from 'node:child_process'
|
||||
import { watch } from 'node:fs'
|
||||
import { createRequire } from 'node:module'
|
||||
import { resolve } from 'node:path'
|
||||
|
||||
const require = createRequire(import.meta.url)
|
||||
const electronPath = require('electron')
|
||||
|
||||
let child = null
|
||||
let stopping = false
|
||||
let restartTimer = null
|
||||
|
||||
function start() {
|
||||
child = spawn(electronPath, ['--import', 'tsx', 'src/server/index.ts'], {
|
||||
env: {
|
||||
...process.env,
|
||||
ELECTRON_RUN_AS_NODE: '1',
|
||||
GROWTH_REPORT_USER_DATA: process.env.GROWTH_REPORT_USER_DATA || '.electron-dev-data'
|
||||
},
|
||||
stdio: 'inherit',
|
||||
windowsHide: true
|
||||
})
|
||||
|
||||
child.once('exit', (code, signal) => {
|
||||
child = null
|
||||
|
||||
if (stopping) {
|
||||
process.exit(0)
|
||||
}
|
||||
|
||||
if (signal) {
|
||||
process.kill(process.pid, signal)
|
||||
return
|
||||
}
|
||||
|
||||
process.exit(code ?? 0)
|
||||
})
|
||||
}
|
||||
|
||||
function stop(signal = 'SIGTERM') {
|
||||
if (child && !child.killed) {
|
||||
child.kill(signal)
|
||||
}
|
||||
}
|
||||
|
||||
function scheduleRestart() {
|
||||
if (stopping) {
|
||||
return
|
||||
}
|
||||
|
||||
clearTimeout(restartTimer)
|
||||
restartTimer = setTimeout(() => {
|
||||
if (!child) {
|
||||
start()
|
||||
return
|
||||
}
|
||||
|
||||
const currentChild = child
|
||||
currentChild.once('exit', () => {
|
||||
if (!stopping) {
|
||||
start()
|
||||
}
|
||||
})
|
||||
currentChild.kill('SIGTERM')
|
||||
}, 150)
|
||||
}
|
||||
|
||||
function shutdown(signal = 'SIGTERM') {
|
||||
if (stopping) {
|
||||
return
|
||||
}
|
||||
|
||||
stopping = true
|
||||
clearTimeout(restartTimer)
|
||||
stop(signal)
|
||||
}
|
||||
|
||||
start()
|
||||
|
||||
const watchedRoots = ['src/server', 'src/main/services', 'src/main/entities', 'src/main/types']
|
||||
|
||||
for (const root of watchedRoots) {
|
||||
watch(resolve(root), { recursive: true }, scheduleRestart)
|
||||
}
|
||||
|
||||
process.once('SIGINT', () => shutdown('SIGINT'))
|
||||
process.once('SIGTERM', () => shutdown('SIGTERM'))
|
||||
process.once('exit', () => stop())
|
||||
Reference in New Issue
Block a user