#!/usr/bin/env node // 发布验收哨兵:test → typecheck → build(可选 package 预览) import { spawnSync } from 'node:child_process' import { readFileSync } from 'node:fs' const pkg = JSON.parse(readFileSync(new URL('../package.json', import.meta.url), 'utf-8')) console.log(`╭──────────────────────────────────────┐`) console.log(`│ 仙途家族志 v${pkg.version} · 发布验收哨兵`) console.log(`╰──────────────────────────────────────┘`) const steps = [ ['测试', 'npx', ['vitest', 'run']], ['类型检查', 'npx', ['tsc', '--noEmit']], ['构建', 'npx', ['electron-vite', 'build']] ] if (process.argv.includes('--package')) { steps.push(['打包', 'npx', ['electron-builder']]) } let failed = false for (const [name, cmd, args] of steps) { process.stdout.write(`[${name}] …`) const r = spawnSync(cmd, args, { stdio: 'inherit', cwd: new URL('..', import.meta.url).pathname }) if (r.status !== 0) { console.log(` [${name}] ✗ 失败`) failed = true break } console.log(`[${name}] ✓`) } if (failed) { console.log('\n✗ 发布验收未通过——修复后再发布。') process.exit(1) } console.log('\n✓ 全部验收通过,可以打包。')