123456import { execSync } from "child_process";7import { readFileSync, existsSync, mkdirSync } from "fs";8import { join } from "path";910const ROOT = process.cwd();1112function run(cmd: string, label?: string, env?: Record<string, string>) {13 const display = label ?? cmd;14 console.log(`\n▶ ${display}`);15 execSync(cmd, { stdio: "inherit", cwd: ROOT, env: { ...process.env, ...env } });16}1718function fail(msg: string): never {19 console.error(`\n✗ ${msg}`);20 process.exit(1);21}22232425if (!process.env.AMO_JWT_ISSUER) {26 fail("AMO_JWT_ISSUER not set. Add it to your shell profile and reload.");27}28if (!process.env.AMO_JWT_SECRET) {29 fail("AMO_JWT_SECRET not set. Add it to your shell profile and reload.");30}31323334const manifest = JSON.parse(35 readFileSync(join(ROOT, "manifest.firefox.json"), "utf8")36);37const version = manifest.version;38if (!version) fail("Could not read version from manifest.firefox.json");39console.log(`\n🍑 Peach Firefox — releasing v${version}`);40414243run("npm run ci", "Running CI gate");44454647run("npm run build:firefox", `Building Firefox extension v${version}`);484950515253const sourceZip = `peach-source-${version}.zip`;54run(55 [56 "zip -r",57 sourceZip,58 "src",59 "scripts",60 "public",61 62 63 64 "crypto-core",65 "manifest.json",66 "manifest.firefox.json",67 "package.json",68 "bun.lock",69 "tsconfig.json",70 "vite.config.ts",71 "--exclude 'node_modules/*'",72 "--exclude 'dist-*/*'",73 "--exclude 'crypto-core/target/*'",74 "--exclude 'crypto-core/generated/*'",75 "--exclude '*.zip'",76 "--exclude '.DS_Store'",77 "--exclude '__MACOSX/*'",78 ].join(" "),79 "Packaging source archive for AMO"80);81828384if (!existsSync(join(ROOT, "artifacts"))) {85 mkdirSync(join(ROOT, "artifacts"));86}87888990run(91 [92 "npx web-ext sign",93 "--source-dir dist-firefox",94 "--artifacts-dir artifacts",95 "--channel=listed",96 ].join(" "),97 "Signing and submitting to AMO",98 99 100 {101 WEB_EXT_API_KEY: process.env.AMO_JWT_ISSUER!,102 WEB_EXT_API_SECRET: process.env.AMO_JWT_SECRET!,103 }104);105106107108run(`trash ${sourceZip}`, "Cleaning up source zip");109110111112console.log(`\n✓ Peach Firefox v${version} submitted to AMO.`);113console.log(" Existing users will receive the update automatically.");114console.log(" Check AMO developer hub for review status.");115console.log("");