Files
scrying-pool/scripts/package.mjs
T
2026-05-21 23:08:34 +02:00

74 lines
2.4 KiB
JavaScript

/**
* Release script — produces module.zip.
*
* Single version source of truth: reads version from package.json,
* writes it into module.json, then zips all release artefacts.
*
* Usage: node scripts/package.mjs
*/
import { createWriteStream, existsSync, mkdirSync, readFileSync, writeFileSync } from "fs";
import { resolve, dirname } from "path";
import { fileURLToPath } from "url";
import { createGzip } from "zlib";
import { exec } from "child_process";
import { promisify } from "util";
const execAsync = promisify(exec);
const __dirname = dirname(fileURLToPath(import.meta.url));
const ROOT = resolve(__dirname, "..");
// Read version from package.json (single source of truth)
let pkg;
try {
pkg = JSON.parse(readFileSync(resolve(ROOT, "package.json"), "utf8"));
} catch (err) {
console.error("[ScryingPool] Failed to read package.json:", err instanceof Error ? err.message : String(err));
process.exit(1);
}
const { version } = pkg;
// Write version into module.json
const moduleJsonPath = resolve(ROOT, "module.json");
let moduleJson;
try {
moduleJson = JSON.parse(readFileSync(moduleJsonPath, "utf8"));
} catch (err) {
console.error("[ScryingPool] Failed to read module.json:", err instanceof Error ? err.message : String(err));
process.exit(1);
}
moduleJson.version = version;
writeFileSync(moduleJsonPath, JSON.stringify(moduleJson, null, 2) + "\n", "utf8");
console.log(`[ScryingPool] module.json version set to ${version}`);
// Ensure dist/ exists (build should have run first)
if (!existsSync(resolve(ROOT, "dist"))) {
console.error("[ScryingPool] dist/ not found — run npm run build first");
process.exit(1);
}
// Files and directories to include in module.zip
const INCLUDE = [
"module.json",
"module.js",
"lang/",
"templates/",
"dist/",
"src/",
];
// Build zip using system zip command
const targets = INCLUDE.filter((f) => existsSync(resolve(ROOT, f)));
// Escape each target path properly for shell execution
const zipArgs = targets.map((t) => t.replace(/'/g, "'\\''")).map((t) => `"${t}"`).join(" ");
const zipCmd = `cd "${ROOT.replace(/'/g, "'\\''")}" && zip -r module.zip ${zipArgs}`;
console.log("[ScryingPool] Creating module.zip...");
try {
await execAsync(zipCmd);
console.log(`[ScryingPool] module.zip created (v${version})`);
} catch (err) {
console.error("[ScryingPool] zip failed:", err instanceof Error ? err.message : String(err));
process.exit(1);
}