74 lines
2.4 KiB
JavaScript
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);
|
|
}
|