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) {13 const display = label ?? cmd;14 console.log(`\n▶ ${display}`);15 execSync(cmd, { stdio: "inherit", cwd: ROOT });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 "manifest.json",62 "manifest.firefox.json",63 "package.json",64 "bun.lock",65 "tsconfig.json",66 "vite.config.ts",67 "vite.config.firefox.ts",68 "vite.config.chrome.ts",69 "vite.config.mobile.ts",70 "--exclude 'node_modules/*'",71 "--exclude 'dist-*/*'",72 "--exclude '*.zip'",73 "--exclude '.DS_Store'",74 "--exclude '__MACOSX/*'",75 ].join(" "),76 "Packaging source archive for AMO"77);78798081if (!existsSync(join(ROOT, "artifacts"))) {82 mkdirSync(join(ROOT, "artifacts"));83}84858687run(88 [89 "npx web-ext sign",90 "--source-dir dist-firefox",91 "--artifacts-dir artifacts",92 `--api-key=${process.env.AMO_JWT_ISSUER}`,93 `--api-secret=${process.env.AMO_JWT_SECRET}`,94 "--channel=listed",95 ].join(" "),96 "Signing and submitting to AMO"97);9899100101run(`rm -f ${sourceZip}`, "Cleaning up source zip");102103104105console.log(`\n✓ Peach Firefox v${version} submitted to AMO.`);106console.log(" Existing users will receive the update automatically.");107console.log(" Check AMO developer hub for review status.");108console.log("");