amo-upload.mjs 1.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253
  1. import { rename, writeFile } from 'fs/promises';
  2. import { join } from 'path';
  3. import { signAddon } from 'amo-upload';
  4. import { readManifest, buildUpdatesList } from './manifest-helper.js';
  5. import { getVersion, isBeta } from './version-helper.js';
  6. import { hasAsset } from './release-helper.js';
  7. async function main() {
  8. const manifest = await readManifest();
  9. const rawVersion = process.env.VERSION;
  10. // version may be suffixed for unlisted version
  11. const version = getVersion();
  12. const beta = isBeta();
  13. const fileName = `violentmonkey-${version}-an+fx.xpi`;
  14. const url = `https://github.com/violentmonkey/violentmonkey/releases/download/v${rawVersion}/${fileName}`;
  15. if (await hasAsset(fileName)) {
  16. console.info('File already downloaded, skipping');
  17. return;
  18. }
  19. const pollOptions = !beta && {
  20. // disable status checking for listed versions since
  21. // we don't need to download the signed version
  22. pollRetry: 0,
  23. };
  24. const tempFile = join(process.env.TEMP_DIR, Math.random().toString(36).slice(2, 8).toString());
  25. await signAddon({
  26. apiKey: process.env.AMO_KEY,
  27. apiSecret: process.env.AMO_SECRET,
  28. addonId: manifest.browser_specific_settings.gecko.id,
  29. addonVersion: version,
  30. channel: beta ? 'unlisted' : 'listed',
  31. distFile: beta
  32. ? join(process.env.TEMP_DIR, process.env.ASSET_SELF_HOSTED_ZIP)
  33. : join(process.env.ASSETS_DIR, process.env.ASSETS_ZIP),
  34. sourceFile: join(process.env.TEMP_DIR, process.env.SOURCE_ZIP),
  35. output: tempFile,
  36. ...pollOptions,
  37. });
  38. const xpiFile = join(process.env.ASSETS_DIR, fileName);
  39. await rename(tempFile, xpiFile);
  40. const updates = await buildUpdatesList(version, url);
  41. await writeFile(join(process.env.TEMP_DIR, 'updates/updates.json'), JSON.stringify(updates, null, 2), 'utf8');
  42. }
  43. main().catch(err => {
  44. console.error(err);
  45. process.exitCode = 1;
  46. });