ruffle/web/packages/extension/tools/build_firefox.js

91 lines
2.3 KiB
JavaScript

const { build, zip } = require("./utils");
const path = require("path");
const signAddon = require("sign-addon").default;
const fs = require("fs");
async function sign(
api_key,
api_secret,
extension_id,
unsigned_path,
manifest,
destination
) {
const tempDir = require("temp-dir");
let result = await signAddon({
xpiPath: unsigned_path,
version: manifest.version,
apiKey: api_key,
apiSecret: api_secret,
id: extension_id,
downloadDir: tempDir,
});
if (result.success) {
if (result.downloadedFiles.length === 1) {
fs.renameSync(result.downloadedFiles[0], destination);
} else {
console.warn(
"Unexpected downloads for signed firefox extension, expected 1."
);
console.warn(result);
}
}
}
function createManifest(overrides) {
const manifest = require("../manifest.json");
return { ...manifest, ...overrides };
}
async function run() {
console.log("Creating firefox extension...");
const dist = path.resolve(__dirname, "../dist");
if (!fs.existsSync(dist)) {
fs.mkdirSync(dist);
}
const version = require("../package.json").version;
let id;
if (process.env.FIREFOX_EXTENSION_ID) {
id = process.env.FIREFOX_EXTENSION_ID;
} else {
id = "ruffle-player-extension@ruffle.rs";
}
const manifest = createManifest({
version,
browser_specific_settings: { gecko: { id } },
});
await build();
await zip(`${dist}/firefox_unsigned.xpi`, manifest);
if (
process.env.MOZILLA_API_KEY &&
process.env.MOZILLA_API_SECRET &&
process.env.FIREFOX_EXTENSION_ID
) {
await sign(
process.env.MOZILLA_API_KEY,
process.env.MOZILLA_API_SECRET,
process.env.FIREFOX_EXTENSION_ID,
`${dist}/firefox_unsigned.xpi`,
manifest,
`${dist}/firefox.xpi`
);
} else {
console.log(
"Skipping signing of firefox extension. To enable this, please provide MOZILLA_API_KEY, MOZILLA_API_SECRET and FIREFOX_EXTENSION_ID environment variables"
);
}
console.log("Firefox extension has been built!");
}
module.exports = run;
if (!module.parent) {
run().catch((error) => console.error(error));
}