mirror of
https://github.com/TheNetsky/Microsoft-Rewards-Script.git
synced 2026-01-18 22:13:58 +00:00
68 lines
1.9 KiB
JavaScript
68 lines
1.9 KiB
JavaScript
/* eslint-disable linebreak-style */
|
|
/**
|
|
* Post-run auto-update script
|
|
* - If invoked with --git, runs: git fetch --all --prune; git pull --ff-only; npm ci; npm run build
|
|
* - If invoked with --docker, runs: docker compose pull; docker compose up -d
|
|
*
|
|
* Usage:
|
|
* node setup/update/update.mjs --git
|
|
* node setup/update/update.mjs --docker
|
|
*
|
|
* Notes:
|
|
* - Commands are safe-by-default: use --ff-only for pull to avoid merge commits.
|
|
* - Script is no-op if the relevant tool is not available or commands fail.
|
|
*/
|
|
|
|
import { spawn } from 'node:child_process'
|
|
|
|
function run(cmd, args, opts = {}) {
|
|
return new Promise((resolve) => {
|
|
const child = spawn(cmd, args, { stdio: 'inherit', shell: process.platform === 'win32', ...opts })
|
|
child.on('close', (code) => resolve(code ?? 0))
|
|
child.on('error', () => resolve(1))
|
|
})
|
|
}
|
|
|
|
async function which(cmd) {
|
|
const probe = process.platform === 'win32' ? 'where' : 'which'
|
|
const code = await run(probe, [cmd])
|
|
return code === 0
|
|
}
|
|
|
|
async function updateGit() {
|
|
const hasGit = await which('git')
|
|
if (!hasGit) return 1
|
|
await run('git', ['fetch', '--all', '--prune'])
|
|
const pullCode = await run('git', ['pull', '--ff-only'])
|
|
if (pullCode !== 0) return pullCode
|
|
const hasNpm = await which('npm')
|
|
if (!hasNpm) return 0
|
|
await run('npm', ['ci'])
|
|
return run('npm', ['run', 'build'])
|
|
}
|
|
|
|
async function updateDocker() {
|
|
const hasDocker = await which('docker')
|
|
if (!hasDocker) return 1
|
|
// Prefer compose v2 (docker compose)
|
|
await run('docker', ['compose', 'pull'])
|
|
return run('docker', ['compose', 'up', '-d'])
|
|
}
|
|
|
|
async function main() {
|
|
const args = new Set(process.argv.slice(2))
|
|
const doGit = args.has('--git')
|
|
const doDocker = args.has('--docker')
|
|
|
|
let code = 0
|
|
if (doGit) {
|
|
code = await updateGit()
|
|
}
|
|
if (doDocker && code === 0) {
|
|
code = await updateDocker()
|
|
}
|
|
process.exit(code)
|
|
}
|
|
|
|
main().catch(() => process.exit(1))
|