69 lines
2.1 KiB
TypeScript
69 lines
2.1 KiB
TypeScript
/**
|
|
* Zip the built Chromium extension into `release/` so the user can
|
|
* share a single file. Matches the cross-platform pattern in
|
|
* `scripts/download-deps.ts` (PowerShell on Windows, `zip` on Unix).
|
|
*
|
|
* Run via:
|
|
* pnpm build:extension
|
|
* tsx scripts/pack-extension.ts
|
|
* (or `pnpm pack:extension` which chains both).
|
|
*/
|
|
|
|
import { execSync } from "node:child_process";
|
|
import { existsSync, mkdirSync, readFileSync, rmSync } from "node:fs";
|
|
import { dirname, join, resolve } from "node:path";
|
|
import { fileURLToPath } from "node:url";
|
|
|
|
const root = resolve(dirname(fileURLToPath(import.meta.url)), "..");
|
|
const extDir = join(root, "packages", "mediago-extension");
|
|
const distDir = join(extDir, "dist");
|
|
const releaseDir = join(root, "release");
|
|
|
|
interface PkgJson {
|
|
version?: string;
|
|
}
|
|
|
|
function readVersion(): string {
|
|
const pkg = JSON.parse(
|
|
readFileSync(join(extDir, "package.json"), "utf8"),
|
|
) as PkgJson;
|
|
return pkg.version ?? "0.0.0";
|
|
}
|
|
|
|
function zipDirectory(sourceDir: string, outputZip: string): void {
|
|
// Make sure any stale zip at the target path is gone — Windows'
|
|
// Compress-Archive refuses to overwrite silently.
|
|
if (existsSync(outputZip)) rmSync(outputZip);
|
|
|
|
if (process.platform === "win32") {
|
|
const ps = `Compress-Archive -Path '${sourceDir}\\*' -DestinationPath '${outputZip}' -Force`;
|
|
execSync(`powershell -NoProfile -Command "${ps}"`, { stdio: "inherit" });
|
|
} else {
|
|
// -r recursive, run inside sourceDir so paths are relative, use -q
|
|
// to silence per-file output.
|
|
execSync(`cd "${sourceDir}" && zip -r -q "${outputZip}" .`, {
|
|
stdio: "inherit",
|
|
});
|
|
}
|
|
}
|
|
|
|
function main(): void {
|
|
if (!existsSync(distDir)) {
|
|
console.error(
|
|
`[pack-extension] ${distDir} does not exist. Run \`pnpm build:extension\` first.`,
|
|
);
|
|
process.exit(1);
|
|
}
|
|
|
|
mkdirSync(releaseDir, { recursive: true });
|
|
|
|
const version = readVersion();
|
|
const outputZip = join(releaseDir, `mediago-extension-v${version}.zip`);
|
|
|
|
console.log(`[pack-extension] zipping ${distDir} → ${outputZip}`);
|
|
zipDirectory(distDir, outputZip);
|
|
console.log(`[pack-extension] ✓ created ${outputZip}`);
|
|
}
|
|
|
|
main();
|