1
0
mirror of https://github.com/kremalicious/metamask-extension.git synced 2024-10-22 19:26:13 +02:00
metamask-extension/development/build/manifest.js
Mark Stacey 345ed9f6f2
Add build type to Sentry environment (#12441)
The build type (i.e. the distribution) is now included in the Sentry
environment during setup, for all builds except the "main" build. This
will allow us to track Flask and beta errors separately from other
errors.

A constant was created for the build types. The equivalent constant in
our build scripts was updated to match it more closely, for
consistency. We can't use the same constant in both places because our
shared constants are in modules that use ES6 exports, and our build
script does not yet support ES6 exports.

The singular `BuildType` was used rather than `BuildTypes` to match our
naming conventions elsewhere for enums. We name them like classes or
types, rather than like a collection.

Relates to #11896
2021-10-25 14:27:30 -02:30

122 lines
3.3 KiB
JavaScript

const { promises: fs } = require('fs');
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 { createTask, composeSeries } = require('./task');
const { BuildType } = require('./utils');
module.exports = createManifestTasks;
function createManifestTasks({
browserPlatforms,
browserVersionMap,
buildType,
}) {
// merge base manifest with per-platform manifests
const prepPlatforms = async () => {
return Promise.all(
browserPlatforms.map(async (platform) => {
const platformModifications = await readJson(
path.join(
__dirname,
'..',
'..',
'app',
'manifest',
`${platform}.json`,
),
);
const result = merge(
cloneDeep(baseManifest),
platformModifications,
browserVersionMap[platform],
getBuildModifications(buildType),
);
const dir = path.join('.', 'dist', platform);
await fs.mkdir(dir, { recursive: true });
await writeJson(result, path.join(dir, 'manifest.json'));
}),
);
};
// dev: add perms
const envDev = createTaskForModifyManifestForEnvironment((manifest) => {
manifest.permissions = [...manifest.permissions, 'webRequestBlocking'];
});
// testDev: add perms
const envTestDev = createTaskForModifyManifestForEnvironment((manifest) => {
manifest.permissions = [
...manifest.permissions,
'webRequestBlocking',
'http://localhost/*',
];
});
// test: add permissions
const envTest = createTaskForModifyManifestForEnvironment((manifest) => {
manifest.permissions = [
...manifest.permissions,
'webRequestBlocking',
'http://localhost/*',
];
});
// high level manifest tasks
const dev = createTask('manifest:dev', composeSeries(prepPlatforms, envDev));
const testDev = createTask(
'manifest:testDev',
composeSeries(prepPlatforms, envTestDev),
);
const test = createTask(
'manifest:test',
composeSeries(prepPlatforms, envTest),
);
const prod = createTask('manifest:prod', prepPlatforms);
return { prod, dev, testDev, test };
// helper for modifying each platform's manifest.json in place
function createTaskForModifyManifestForEnvironment(transformFn) {
return () => {
return Promise.all(
browserPlatforms.map(async (platform) => {
const manifestPath = path.join(
'.',
'dist',
platform,
'manifest.json',
);
const manifest = await readJson(manifestPath);
transformFn(manifest);
await writeJson(manifest, manifestPath);
}),
);
};
}
}
// helper for reading and deserializing json from fs
async function readJson(file) {
return JSON.parse(await fs.readFile(file, 'utf8'));
}
// helper for serializing and writing json to fs
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);
}
return buildModifications;
}