mirror of
https://github.com/kremalicious/metamask-extension.git
synced 2024-11-22 09:57:02 +01:00
Convert LavaMoat policy generation script to Yargs application (#15626)
This PR converts `generate-lavamoat-policies.sh` to `.js` using Yargs. This makes it easier to only generate policy files for a specific build type (using the `-t` flag), which is often useful during Flask development. In addition, the `lavamoat:background:auto` scripts are renamed, and the main readme is updated with some useful tips. Note that `lavamoat:background:auto:dev` is removed and `lavamoat:background:auto` should be used during local development.
This commit is contained in:
parent
ba376c07c1
commit
8210e3a812
@ -4,7 +4,7 @@ set -e
|
|||||||
set -u
|
set -u
|
||||||
set -o pipefail
|
set -o pipefail
|
||||||
|
|
||||||
yarn lavamoat:auto
|
yarn lavamoat:auto:ci
|
||||||
|
|
||||||
if git diff --exit-code
|
if git diff --exit-code
|
||||||
then
|
then
|
||||||
|
@ -91,15 +91,17 @@ Whenever you change dependencies (adding, removing, or updating, either in `pack
|
|||||||
* The `allow-scripts` configuration in `package.json`
|
* The `allow-scripts` configuration in `package.json`
|
||||||
* Run `yarn allow-scripts auto` to update the `allow-scripts` configuration automatically. This config determines whether the package's install/postinstall scripts are allowed to run. Review each new package to determine whether the install script needs to run or not, testing if necessary.
|
* Run `yarn allow-scripts auto` to update the `allow-scripts` configuration automatically. This config determines whether the package's install/postinstall scripts are allowed to run. Review each new package to determine whether the install script needs to run or not, testing if necessary.
|
||||||
* Unfortunately, `yarn allow-scripts auto` will behave inconsistently on different platforms. macOS and Windows users may see extraneous changes relating to optional dependencies.
|
* Unfortunately, `yarn allow-scripts auto` will behave inconsistently on different platforms. macOS and Windows users may see extraneous changes relating to optional dependencies.
|
||||||
* The LavaMoat policy files. The _tl;dr_ is to run `yarn lavamoat:auto` to update these files, but there can be devils in the details. Continue reading for more information.
|
* The LavaMoat policy files. The _tl;dr_ is to run `yarn lavamoat:auto` to update these files, but there can be devils in the details:
|
||||||
* There are two sets of LavaMoat policy files:
|
* There are two sets of LavaMoat policy files:
|
||||||
* The production LavaMoat policy files (`lavamoat/browserify/*/policy.json`), which are re-generated using `yarn lavamoat:background:auto`.
|
* The production LavaMoat policy files (`lavamoat/browserify/*/policy.json`), which are re-generated using `yarn lavamoat:background:auto`. Add `--help` for usage.
|
||||||
* These should be regenerated whenever the production dependencies for the background change.
|
* These should be regenerated whenever the production dependencies for the background change.
|
||||||
* The build system LavaMoat policy file (`lavamoat/build-system/policy.json`), which is re-generated using `yarn lavamoat:build:auto`.
|
* The build system LavaMoat policy file (`lavamoat/build-system/policy.json`), which is re-generated using `yarn lavamoat:build:auto`.
|
||||||
* This should be regenerated whenever the dependencies used by the build system itself change.
|
* This should be regenerated whenever the dependencies used by the build system itself change.
|
||||||
* Whenever you regenerate a policy file, review the changes to determine whether the access granted to each package seems appropriate.
|
* Whenever you regenerate a policy file, review the changes to determine whether the access granted to each package seems appropriate.
|
||||||
* Unfortunately, `yarn lavamoat:auto` will behave inconsistently on different platforms.
|
* Unfortunately, `yarn lavamoat:auto` will behave inconsistently on different platforms.
|
||||||
macOS and Windows users may see extraneous changes relating to optional dependencies.
|
macOS and Windows users may see extraneous changes relating to optional dependencies.
|
||||||
|
* If you keep getting policy failures even after regenerating the policy files, try regenerating the policies after a clean install by doing:
|
||||||
|
* `rm -rf node_modules/ && yarn setup && yarn lavamoat:auto`
|
||||||
* Keep in mind that any kind of dynamic import or dynamic use of globals may elude LavaMoat's static analysis.
|
* Keep in mind that any kind of dynamic import or dynamic use of globals may elude LavaMoat's static analysis.
|
||||||
Refer to the LavaMoat documentation or ask for help if you run into any issues.
|
Refer to the LavaMoat documentation or ask for help if you run into any issues.
|
||||||
|
|
||||||
|
53
development/generate-lavamoat-policies.js
Normal file
53
development/generate-lavamoat-policies.js
Normal file
@ -0,0 +1,53 @@
|
|||||||
|
const concurrently = require('concurrently');
|
||||||
|
const yargs = require('yargs/yargs');
|
||||||
|
const { hideBin } = require('yargs/helpers');
|
||||||
|
const { BuildType } = require('./lib/build-type');
|
||||||
|
|
||||||
|
start().catch((error) => {
|
||||||
|
console.error('Policy generation failed.', error);
|
||||||
|
process.exitCode = 1;
|
||||||
|
});
|
||||||
|
|
||||||
|
async function start() {
|
||||||
|
const {
|
||||||
|
argv: { buildTypes, parallel },
|
||||||
|
} = yargs(hideBin(process.argv)).usage(
|
||||||
|
'$0 [options]',
|
||||||
|
'Generate the LavaMoat policy file for one more more build types.',
|
||||||
|
(yargsInstance) =>
|
||||||
|
yargsInstance
|
||||||
|
.option('build-types', {
|
||||||
|
alias: ['t'],
|
||||||
|
choices: Object.values(BuildType),
|
||||||
|
default: Object.values(BuildType),
|
||||||
|
demandOption: true,
|
||||||
|
description: 'The build type(s) to generate policy files for.',
|
||||||
|
})
|
||||||
|
.option('parallel', {
|
||||||
|
alias: ['p'],
|
||||||
|
default: true,
|
||||||
|
demandOption: true,
|
||||||
|
description: 'Whether to generate policies in parallel.',
|
||||||
|
type: 'boolean',
|
||||||
|
})
|
||||||
|
.strict(),
|
||||||
|
);
|
||||||
|
|
||||||
|
await concurrently(
|
||||||
|
(Array.isArray(buildTypes) ? buildTypes : [buildTypes]).map(
|
||||||
|
(buildType) => ({
|
||||||
|
command: `yarn build scripts:prod --policy-only --build-type=${buildType}`,
|
||||||
|
env: {
|
||||||
|
WRITE_AUTO_POLICY: 1,
|
||||||
|
},
|
||||||
|
name: buildType,
|
||||||
|
}),
|
||||||
|
),
|
||||||
|
{
|
||||||
|
killOthers: true,
|
||||||
|
maxProcesses: parallel ? buildTypes.length : 1,
|
||||||
|
},
|
||||||
|
);
|
||||||
|
|
||||||
|
console.log('Policy file(s) successfully generated!');
|
||||||
|
}
|
@ -1,19 +0,0 @@
|
|||||||
#!/usr/bin/env bash
|
|
||||||
|
|
||||||
set -e
|
|
||||||
set -u
|
|
||||||
set -o pipefail
|
|
||||||
|
|
||||||
extraArgs=()
|
|
||||||
if [[ $# -lt 1 ]]; then
|
|
||||||
extraArgs+=(-m 1)
|
|
||||||
fi
|
|
||||||
|
|
||||||
# Generate LavaMoat policies for the extension background script for each build
|
|
||||||
# type.
|
|
||||||
# ATTN: This may tax your device when running it locally.
|
|
||||||
concurrently --kill-others-on-fail -n main,beta,flask \
|
|
||||||
"${extraArgs[@]}" \
|
|
||||||
"WRITE_AUTO_POLICY=1 yarn build scripts:prod --policy-only" \
|
|
||||||
"WRITE_AUTO_POLICY=1 yarn build scripts:prod --policy-only --build-type beta" \
|
|
||||||
"WRITE_AUTO_POLICY=1 yarn build scripts:prod --policy-only --build-type flask"
|
|
@ -73,9 +73,10 @@
|
|||||||
"lavamoat:build": "lavamoat development/build/index.js --policy lavamoat/build-system/policy.json --policyOverride lavamoat/build-system/policy-override.json",
|
"lavamoat:build": "lavamoat development/build/index.js --policy lavamoat/build-system/policy.json --policyOverride lavamoat/build-system/policy-override.json",
|
||||||
"lavamoat:build:auto": "yarn lavamoat:build --writeAutoPolicy",
|
"lavamoat:build:auto": "yarn lavamoat:build --writeAutoPolicy",
|
||||||
"lavamoat:debug:build": "yarn lavamoat:build --writeAutoPolicyDebug --policydebug lavamoat/build-system/policy-debug.json",
|
"lavamoat:debug:build": "yarn lavamoat:build --writeAutoPolicyDebug --policydebug lavamoat/build-system/policy-debug.json",
|
||||||
"lavamoat:background:auto": "./development/generate-lavamoat-policies.sh",
|
"lavamoat:background:auto": "node ./development/generate-lavamoat-policies.js",
|
||||||
"lavamoat:background:auto:dev": "./development/generate-lavamoat-policies.sh --dev",
|
"lavamoat:background:auto:ci": "node ./development/generate-lavamoat-policies.js --parallel=false",
|
||||||
"lavamoat:auto": "yarn lavamoat:build:auto && yarn lavamoat:background:auto",
|
"lavamoat:auto": "yarn lavamoat:build:auto && yarn lavamoat:background:auto",
|
||||||
|
"lavamoat:auto:ci": "yarn lavamoat:build:auto && yarn lavamoat:background:auto:ci",
|
||||||
"ts-migration:enumerate": "ts-node development/ts-migration-dashboard/scripts/write-list-of-files-to-convert.ts",
|
"ts-migration:enumerate": "ts-node development/ts-migration-dashboard/scripts/write-list-of-files-to-convert.ts",
|
||||||
"ts-migration:dashboard:watch": "ts-node development/ts-migration-dashboard/scripts/build.ts --watch",
|
"ts-migration:dashboard:watch": "ts-node development/ts-migration-dashboard/scripts/build.ts --watch",
|
||||||
"ts-migration:dashboard:build": "ts-node development/ts-migration-dashboard/scripts/build.ts",
|
"ts-migration:dashboard:build": "ts-node development/ts-migration-dashboard/scripts/build.ts",
|
||||||
|
Loading…
Reference in New Issue
Block a user