34 lines
976 B
TypeScript
34 lines
976 B
TypeScript
|
|
import Router from '@koa/router'
|
||
|
|
|
||
|
|
export const updateRoutes = new Router()
|
||
|
|
|
||
|
|
updateRoutes.post('/api/hermes/update', async (ctx) => {
|
||
|
|
const isWin = process.platform === 'win32'
|
||
|
|
const cmd = isWin
|
||
|
|
? 'cmd /c npm install -g hermes-web-ui@latest'
|
||
|
|
: 'npm install -g hermes-web-ui@latest'
|
||
|
|
|
||
|
|
try {
|
||
|
|
const { execSync } = await import('child_process')
|
||
|
|
const output = execSync(cmd, {
|
||
|
|
encoding: 'utf-8',
|
||
|
|
timeout: 120000,
|
||
|
|
stdio: ['pipe', 'pipe', 'pipe'],
|
||
|
|
})
|
||
|
|
ctx.body = { success: true, message: output.trim() }
|
||
|
|
|
||
|
|
setTimeout(() => {
|
||
|
|
const { spawn } = require('child_process')
|
||
|
|
spawn(isWin ? 'cmd' : 'sh', isWin ? ['/c', 'hermes-web-ui restart'] : ['-c', 'hermes-web-ui restart'], {
|
||
|
|
detached: true,
|
||
|
|
stdio: 'ignore',
|
||
|
|
windowsHide: true,
|
||
|
|
}).unref()
|
||
|
|
process.exit(0)
|
||
|
|
}, 2000)
|
||
|
|
} catch (err: any) {
|
||
|
|
ctx.status = 500
|
||
|
|
ctx.body = { success: false, message: err.stderr || err.message }
|
||
|
|
}
|
||
|
|
})
|