Files
core/scripts/deploy.js
Innei 18b395be66 chore: add gh mirror
Signed-off-by: Innei <i@innei.in>
2023-11-07 23:13:24 +08:00

102 lines
2.5 KiB
JavaScript

#!/usr/bin/env zx
// @ts-check
const {
cd,
$,
os,
fs,
path,
fetch,
nothrow,
sleep,
argv: Ar,
} = require('zx-cjs')
const { homedir } = os
const { repository } = require('../package.json')
const owner = 'mx-space'
const repo = 'core'
const argv = process.argv.slice(2)
const tag = Ar.tag || `4.5.3`
const ghMirror = `github.hscsec.cn`
const tagDownloadUrl = `https://${ghMirror}/${owner}/${repo}/releases/download/v${tag}/release-ubuntu-latest.zip`
function getOsBuildAssetName() {
const platform = process.platform
const kernelMap = {
darwin: 'macos',
linux: 'linux',
win32: 'windows',
}
const os = kernelMap[platform]
if (!os) {
throw new Error('No current platform build. Please build manually')
}
return `release-${os}-latest.zip`
}
const getProxyDownloadUrl = (downloadUrl) => {
const url = new URL(downloadUrl)
// url.host = ghMirror
// return url.toString()
return `https://ghproxy.com/${downloadUrl}`
}
async function main() {
cd(path.resolve(homedir(), 'mx'))
const res = await fetch(
`https://api.github.com/repos/${repository.directory}/releases/latest`,
)
const data = await res.json()
const downloadUrl = data.assets.find((asset) =>
[getOsBuildAssetName(), 'release.zip'].includes(asset.name),
)?.browser_download_url
if (!downloadUrl) {
throw new Error('no download url found')
}
const buffer = await fetch(getProxyDownloadUrl(downloadUrl)).then((res) =>
res.buffer(),
)
const tmpName = (Math.random() * 10).toString(16)
fs.writeFileSync(`/tmp/${tmpName}.zip`, buffer, { flag: 'w' })
await $`mv ./run ./run.bak`
await $`unzip /tmp/${tmpName}.zip -d ./run`
await $`rm /tmp/${tmpName}.zip`
await $`rm ./run/ecosystem.config.js`
await $`cp ./run.bak/ecosystem.config.js ./run/ecosystem.config.js`
cd('./run')
await nothrow($`pm2 reload ecosystem.config.js -- ${argv}`)
console.log('等待 8 秒')
await sleep(8000)
try {
await $`curl -f -m 3 localhost:2333/api/v2 -H 'user-agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.55 Safari/537.36'`
await $`pm2 save`
cd(path.resolve(homedir(), 'mx'))
await $`rm -rf ./run.bak`
} catch {
await $`pm2 stop ecosystem.config.js`
// throw new Error('server is not running')
console.error('server start error, now rollback...')
cd(path.resolve(homedir(), 'mx'))
await $`rm -rf ./run`
await $`mv ./run.bak ./run`
cd('./run')
await $`pm2 delete ecosystem.config.js`
await $`pm2 start ecosystem.config.js`
}
}
main()