Files
exAichatbot_agent/chatbotDesktopApp-chatbot2.0/scripts/finalize-win.mjs
T
2026-08-03 13:59:26 +09:00

70 lines
1.9 KiB
JavaScript

#!/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);
}