From faebdd0ccd299c5b12199be0d2279f9484228615 Mon Sep 17 00:00:00 2001 From: Mark Stacey Date: Wed, 10 Nov 2021 19:33:59 -0330 Subject: [PATCH] Add platform-specific build type manifest modifications (#12638) The build system now supports platform-specific modifications to the manifest for each build type. The need to customize the `id` on Firefox motivated this change. To support this, a new directory was made in each build type directory for manifest changes. The images currently in this directory were moved into an `images` subdirectory. This new `manifest` directory can include each manifest file currently in `app/manifest`. The `_base.json` file is assumed to exist, but the platform manifest modifications are optional. --- .../beta/{ => images}/beta-mascot.json | 0 .../beta/{ => images}/icon-128.png | Bin app/build-types/beta/{ => images}/icon-16.png | Bin app/build-types/beta/{ => images}/icon-19.png | Bin app/build-types/beta/{ => images}/icon-32.png | Bin app/build-types/beta/{ => images}/icon-38.png | Bin app/build-types/beta/{ => images}/icon-48.png | Bin .../beta/{ => images}/icon-512.png | Bin app/build-types/beta/{ => images}/icon-64.png | Bin .../beta/{ => images}/info-logo.png | Bin .../beta/{ => images}/logo/metamask-fox.svg | 0 .../logo/metamask-logo-horizontal-dark.svg | 0 .../logo/metamask-logo-horizontal.svg | 0 .../beta/manifest/_base.json} | 0 app/build-types/beta/manifest/firefox.json | 7 +++ .../flask/{ => images}/flask-mascot.json | 0 .../flask/{ => images}/icon-128.png | Bin .../flask/{ => images}/icon-16.png | Bin .../flask/{ => images}/icon-19.png | Bin .../flask/{ => images}/icon-32.png | Bin .../flask/{ => images}/icon-38.png | Bin .../flask/{ => images}/icon-48.png | Bin .../flask/{ => images}/icon-512.png | Bin .../flask/{ => images}/icon-64.png | Bin .../flask/{ => images}/logo/metamask-fox.svg | 0 .../logo/metamask-logo-horizontal-dark.svg | 0 .../logo/metamask-logo-horizontal.svg | 0 .../flask/manifest/_base.json} | 0 app/build-types/flask/manifest/firefox.json | 7 +++ development/build/manifest.js | 57 +++++++++++++++--- development/build/static.js | 4 +- ui/helpers/utils/build-types.js | 4 +- 32 files changed, 66 insertions(+), 13 deletions(-) rename app/build-types/beta/{ => images}/beta-mascot.json (100%) rename app/build-types/beta/{ => images}/icon-128.png (100%) rename app/build-types/beta/{ => images}/icon-16.png (100%) rename app/build-types/beta/{ => images}/icon-19.png (100%) rename app/build-types/beta/{ => images}/icon-32.png (100%) rename app/build-types/beta/{ => images}/icon-38.png (100%) rename app/build-types/beta/{ => images}/icon-48.png (100%) rename app/build-types/beta/{ => images}/icon-512.png (100%) rename app/build-types/beta/{ => images}/icon-64.png (100%) rename app/build-types/beta/{ => images}/info-logo.png (100%) rename app/build-types/beta/{ => images}/logo/metamask-fox.svg (100%) rename app/build-types/beta/{ => images}/logo/metamask-logo-horizontal-dark.svg (100%) rename app/build-types/beta/{ => images}/logo/metamask-logo-horizontal.svg (100%) rename app/{manifest/_beta_modifications.json => build-types/beta/manifest/_base.json} (100%) create mode 100644 app/build-types/beta/manifest/firefox.json rename app/build-types/flask/{ => images}/flask-mascot.json (100%) rename app/build-types/flask/{ => images}/icon-128.png (100%) rename app/build-types/flask/{ => images}/icon-16.png (100%) rename app/build-types/flask/{ => images}/icon-19.png (100%) rename app/build-types/flask/{ => images}/icon-32.png (100%) rename app/build-types/flask/{ => images}/icon-38.png (100%) rename app/build-types/flask/{ => images}/icon-48.png (100%) rename app/build-types/flask/{ => images}/icon-512.png (100%) rename app/build-types/flask/{ => images}/icon-64.png (100%) rename app/build-types/flask/{ => images}/logo/metamask-fox.svg (100%) rename app/build-types/flask/{ => images}/logo/metamask-logo-horizontal-dark.svg (100%) rename app/build-types/flask/{ => images}/logo/metamask-logo-horizontal.svg (100%) rename app/{manifest/_flask_modifications.json => build-types/flask/manifest/_base.json} (100%) create mode 100644 app/build-types/flask/manifest/firefox.json diff --git a/app/build-types/beta/beta-mascot.json b/app/build-types/beta/images/beta-mascot.json similarity index 100% rename from app/build-types/beta/beta-mascot.json rename to app/build-types/beta/images/beta-mascot.json diff --git a/app/build-types/beta/icon-128.png b/app/build-types/beta/images/icon-128.png similarity index 100% rename from app/build-types/beta/icon-128.png rename to app/build-types/beta/images/icon-128.png diff --git a/app/build-types/beta/icon-16.png b/app/build-types/beta/images/icon-16.png similarity index 100% rename from app/build-types/beta/icon-16.png rename to app/build-types/beta/images/icon-16.png diff --git a/app/build-types/beta/icon-19.png b/app/build-types/beta/images/icon-19.png similarity index 100% rename from app/build-types/beta/icon-19.png rename to app/build-types/beta/images/icon-19.png diff --git a/app/build-types/beta/icon-32.png b/app/build-types/beta/images/icon-32.png similarity index 100% rename from app/build-types/beta/icon-32.png rename to app/build-types/beta/images/icon-32.png diff --git a/app/build-types/beta/icon-38.png b/app/build-types/beta/images/icon-38.png similarity index 100% rename from app/build-types/beta/icon-38.png rename to app/build-types/beta/images/icon-38.png diff --git a/app/build-types/beta/icon-48.png b/app/build-types/beta/images/icon-48.png similarity index 100% rename from app/build-types/beta/icon-48.png rename to app/build-types/beta/images/icon-48.png diff --git a/app/build-types/beta/icon-512.png b/app/build-types/beta/images/icon-512.png similarity index 100% rename from app/build-types/beta/icon-512.png rename to app/build-types/beta/images/icon-512.png diff --git a/app/build-types/beta/icon-64.png b/app/build-types/beta/images/icon-64.png similarity index 100% rename from app/build-types/beta/icon-64.png rename to app/build-types/beta/images/icon-64.png diff --git a/app/build-types/beta/info-logo.png b/app/build-types/beta/images/info-logo.png similarity index 100% rename from app/build-types/beta/info-logo.png rename to app/build-types/beta/images/info-logo.png diff --git a/app/build-types/beta/logo/metamask-fox.svg b/app/build-types/beta/images/logo/metamask-fox.svg similarity index 100% rename from app/build-types/beta/logo/metamask-fox.svg rename to app/build-types/beta/images/logo/metamask-fox.svg diff --git a/app/build-types/beta/logo/metamask-logo-horizontal-dark.svg b/app/build-types/beta/images/logo/metamask-logo-horizontal-dark.svg similarity index 100% rename from app/build-types/beta/logo/metamask-logo-horizontal-dark.svg rename to app/build-types/beta/images/logo/metamask-logo-horizontal-dark.svg diff --git a/app/build-types/beta/logo/metamask-logo-horizontal.svg b/app/build-types/beta/images/logo/metamask-logo-horizontal.svg similarity index 100% rename from app/build-types/beta/logo/metamask-logo-horizontal.svg rename to app/build-types/beta/images/logo/metamask-logo-horizontal.svg diff --git a/app/manifest/_beta_modifications.json b/app/build-types/beta/manifest/_base.json similarity index 100% rename from app/manifest/_beta_modifications.json rename to app/build-types/beta/manifest/_base.json diff --git a/app/build-types/beta/manifest/firefox.json b/app/build-types/beta/manifest/firefox.json new file mode 100644 index 000000000..79e3cda65 --- /dev/null +++ b/app/build-types/beta/manifest/firefox.json @@ -0,0 +1,7 @@ +{ + "applications": { + "gecko": { + "id": "webextension-beta@metamask.io" + } + } +} diff --git a/app/build-types/flask/flask-mascot.json b/app/build-types/flask/images/flask-mascot.json similarity index 100% rename from app/build-types/flask/flask-mascot.json rename to app/build-types/flask/images/flask-mascot.json diff --git a/app/build-types/flask/icon-128.png b/app/build-types/flask/images/icon-128.png similarity index 100% rename from app/build-types/flask/icon-128.png rename to app/build-types/flask/images/icon-128.png diff --git a/app/build-types/flask/icon-16.png b/app/build-types/flask/images/icon-16.png similarity index 100% rename from app/build-types/flask/icon-16.png rename to app/build-types/flask/images/icon-16.png diff --git a/app/build-types/flask/icon-19.png b/app/build-types/flask/images/icon-19.png similarity index 100% rename from app/build-types/flask/icon-19.png rename to app/build-types/flask/images/icon-19.png diff --git a/app/build-types/flask/icon-32.png b/app/build-types/flask/images/icon-32.png similarity index 100% rename from app/build-types/flask/icon-32.png rename to app/build-types/flask/images/icon-32.png diff --git a/app/build-types/flask/icon-38.png b/app/build-types/flask/images/icon-38.png similarity index 100% rename from app/build-types/flask/icon-38.png rename to app/build-types/flask/images/icon-38.png diff --git a/app/build-types/flask/icon-48.png b/app/build-types/flask/images/icon-48.png similarity index 100% rename from app/build-types/flask/icon-48.png rename to app/build-types/flask/images/icon-48.png diff --git a/app/build-types/flask/icon-512.png b/app/build-types/flask/images/icon-512.png similarity index 100% rename from app/build-types/flask/icon-512.png rename to app/build-types/flask/images/icon-512.png diff --git a/app/build-types/flask/icon-64.png b/app/build-types/flask/images/icon-64.png similarity index 100% rename from app/build-types/flask/icon-64.png rename to app/build-types/flask/images/icon-64.png diff --git a/app/build-types/flask/logo/metamask-fox.svg b/app/build-types/flask/images/logo/metamask-fox.svg similarity index 100% rename from app/build-types/flask/logo/metamask-fox.svg rename to app/build-types/flask/images/logo/metamask-fox.svg diff --git a/app/build-types/flask/logo/metamask-logo-horizontal-dark.svg b/app/build-types/flask/images/logo/metamask-logo-horizontal-dark.svg similarity index 100% rename from app/build-types/flask/logo/metamask-logo-horizontal-dark.svg rename to app/build-types/flask/images/logo/metamask-logo-horizontal-dark.svg diff --git a/app/build-types/flask/logo/metamask-logo-horizontal.svg b/app/build-types/flask/images/logo/metamask-logo-horizontal.svg similarity index 100% rename from app/build-types/flask/logo/metamask-logo-horizontal.svg rename to app/build-types/flask/images/logo/metamask-logo-horizontal.svg diff --git a/app/manifest/_flask_modifications.json b/app/build-types/flask/manifest/_base.json similarity index 100% rename from app/manifest/_flask_modifications.json rename to app/build-types/flask/manifest/_base.json diff --git a/app/build-types/flask/manifest/firefox.json b/app/build-types/flask/manifest/firefox.json new file mode 100644 index 000000000..7c8fb8f13 --- /dev/null +++ b/app/build-types/flask/manifest/firefox.json @@ -0,0 +1,7 @@ +{ + "applications": { + "gecko": { + "id": "webextension-flask@metamask.io" + } + } +} diff --git a/development/build/manifest.js b/development/build/manifest.js index 5df1f2511..a87fd53de 100644 --- a/development/build/manifest.js +++ b/development/build/manifest.js @@ -3,8 +3,6 @@ const path = require('path'); const { merge, cloneDeep } = require('lodash'); const baseManifest = require('../../app/manifest/_base.json'); -const betaManifestModifications = require('../../app/manifest/_beta_modifications.json'); -const flaskManifestModifications = require('../../app/manifest/_flask_modifications.json'); const { createTask, composeSeries } = require('./task'); const { BuildType } = require('./utils'); @@ -34,7 +32,7 @@ function createManifestTasks({ cloneDeep(baseManifest), platformModifications, browserVersionMap[platform], - getBuildModifications(buildType), + await getBuildModifications(buildType, platform), ); const dir = path.join('.', 'dist', platform); await fs.mkdir(dir, { recursive: true }); @@ -113,12 +111,53 @@ async function writeJson(obj, file) { return fs.writeFile(file, JSON.stringify(obj, null, 2)); } -function getBuildModifications(buildType) { - const buildModifications = {}; - if (buildType === BuildType.beta) { - Object.assign(buildModifications, betaManifestModifications); - } else if (buildType === BuildType.flask) { - Object.assign(buildModifications, flaskManifestModifications); +/** + * Get manifest modifications for the given build type, including modifications specific to the + * given platform. + * + * @param {BuildType} buildType - The build type. + * @param {string} platform - The platform (i.e. the browser). + * @returns {Object} The build modificantions for the given build type and platform. + */ +async function getBuildModifications(buildType, platform) { + if (!Object.values(BuildType).includes(buildType)) { + throw new Error(`Invalid build type: ${buildType}`); + } else if (buildType === BuildType.main) { + return {}; } + + const builtTypeManifestDirectoryPath = path.resolve( + __dirname, + '..', + '..', + 'app', + 'build-types', + buildType, + 'manifest', + ); + + const baseBuildTypeModificationsPath = path.join( + builtTypeManifestDirectoryPath, + '_base.json', + ); + const buildModifications = await readJson(baseBuildTypeModificationsPath); + + const platformBuildTypeModificationsPath = path.join( + builtTypeManifestDirectoryPath, + `${platform}.json`, + ); + try { + const platformBuildTypeModifications = await readJson( + platformBuildTypeModificationsPath, + ); + Object.assign(buildModifications, platformBuildTypeModifications); + } catch (error) { + // Suppress 'ENOENT' error because it indicates there are no platform-specific manifest + // modifications for this build type. + if (error.code !== 'ENOENT') { + throw error; + } + } + return buildModifications; } diff --git a/development/build/static.js b/development/build/static.js index 568bda910..1ec935502 100644 --- a/development/build/static.js +++ b/development/build/static.js @@ -23,13 +23,13 @@ module.exports = function createStaticAssetTasks({ const additionalBuildTargets = { [BuildType.beta]: [ { - src: './app/build-types/beta/', + src: './app/build-types/beta/images/', dest: `images`, }, ], [BuildType.flask]: [ { - src: './app/build-types/flask/', + src: './app/build-types/flask/images/', dest: `images`, }, ], diff --git a/ui/helpers/utils/build-types.js b/ui/helpers/utils/build-types.js index 675e0222b..8577b3905 100644 --- a/ui/helpers/utils/build-types.js +++ b/ui/helpers/utils/build-types.js @@ -1,8 +1,8 @@ ///: BEGIN:ONLY_INCLUDE_IN(beta) -import betaJson from '../../../app/build-types/beta/beta-mascot.json'; +import betaJson from '../../../app/build-types/beta/images/beta-mascot.json'; ///: END:ONLY_INCLUDE_IN ///: BEGIN:ONLY_INCLUDE_IN(flask) -import flaskJson from '../../../app/build-types/flask/flask-mascot.json'; +import flaskJson from '../../../app/build-types/flask/images/flask-mascot.json'; ///: END:ONLY_INCLUDE_IN const assetList = {