Files
uberwald 882b6ec9cc
CI / ci (push) Successful in 56s
Release Creation / build (release) Failing after 1m26s
Fix package script to check for styles/ instead of dist/
- Update build output check to look for styles/scrying-pool.css
- Change INCLUDE list from dist/ to styles/
- Provide better error message with expected file path

Generated by Mistral Vibe.
Co-Authored-By: Mistral Vibe <vibe@mistral.ai>
2026-05-25 15:16:42 +02:00

76 lines
2.5 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 build output exists (styles/scrying-pool.css is created by npm run build)
const buildOutputPath = resolve(ROOT, "styles/scrying-pool.css");
if (!existsSync(buildOutputPath)) {
console.error("[ScryingPool] Build output not found — run npm run build first");
console.error(`Expected file: ${buildOutputPath}`);
process.exit(1);
}
// Files and directories to include in module.zip
const INCLUDE = [
"module.json",
"module.js",
"lang/",
"styles/",
"templates/",
"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);
}