#!/usr/bin/env node /** * Windows 산출물 정리 * - Setup.exe (NSIS 설치형) * - portable.exe (포터블) */ import fs from "node:fs"; import path from "node:path"; import { fileURLToPath } from "node:url"; import { DOWNLOAD_ARTIFACTS } from "./download-artifacts.mjs"; const root = path.resolve(path.dirname(fileURLToPath(import.meta.url)), ".."); const distDir = path.join(root, "dist"); const MAP = [ { patterns: [/^raw-win-x64-Setup\.exe$/i], out: DOWNLOAD_ARTIFACTS.win64Installer, }, { patterns: [/^raw-win-x64-portable\.exe$/i], out: DOWNLOAD_ARTIFACTS.win64Portable, }, { patterns: [/^raw-win-ia32-Setup\.exe$/i, /^raw-win-i386-Setup\.exe$/i], out: DOWNLOAD_ARTIFACTS.win32Installer, }, { patterns: [/^raw-win-ia32-portable\.exe$/i, /^raw-win-i386-portable\.exe$/i], out: DOWNLOAD_ARTIFACTS.win32Portable, }, ]; if (!fs.existsSync(distDir)) { console.error("[finalize-win] dist 없음"); process.exit(1); } const files = fs.readdirSync(distDir); let done = 0; for (const rule of MAP) { const srcName = files.find((f) => rule.patterns.some((re) => re.test(f))); if (!srcName) { console.warn(`[finalize-win] skip (원본 없음): ${rule.out}`); continue; } const src = path.join(distDir, srcName); const dest = path.join(distDir, rule.out); if (src !== dest) { if (fs.existsSync(dest)) fs.unlinkSync(dest); fs.renameSync(src, dest); } const size = fs.statSync(dest).size; console.log(`[finalize-win] ✅ ${rule.out} (${Math.round(size / 1024 / 1024)} MB) ← ${srcName}`); done += 1; } for (const f of fs.readdirSync(distDir)) { if (/^raw-win-/.test(f)) { fs.unlinkSync(path.join(distDir, f)); console.log(`[finalize-win] removed ${f}`); } } if (done === 0) { console.error("[finalize-win] Windows 설치/포터블 산출물을 찾지 못했습니다."); process.exit(1); }