2020-05-27 22:37:51 +00:00
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" ) ;
2020-05-28 18:28:54 +00:00
if ( ! fs . existsSync ( dist ) ) {
fs . mkdirSync ( dist ) ;
}
2020-05-27 22:37:51 +00:00
const version = require ( "../package.json" ) . version ;
2020-05-28 21:35:38 +00:00
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 } } ,
} ) ;
2020-05-27 22:37:51 +00:00
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 ) ) ;
}