1
0
mirror of https://github.com/kremalicious/metamask-extension.git synced 2024-10-22 11:22:43 +02:00
metamask-extension/development/build
Mark Stacey 48c02ef641
Add validation to production build script (#15468)
Validation has been added to the build script when the "prod" target is
selected. We now ensure that all expected environment variables are
set, and that no extra environment variables are present (which might
indicate that the wrong configuration file is being used).

The `prod` target uses a new `.metamaskprodrc` configuration file. Each
required variable can be specified either via environment variable or
via this config file. CI will continue set these via environment
variable, but for local manual builds we can use the config file to
simplify the build process and ensure consistency.

A new "dist" target has been added to preserve the ability to build a
"production-like" build without this validation.

The config validation is invoked early in the script, in the CLI
argument parsing step, so that it would fail more quickly. Otherwise
we'd have to wait a few minutes longer for the validation to run.
This required some refactoring, moving functions to the utility module
and moving the config to a dedicated module.

Additionally, support has been added for all environment variables to
be set via the config file. Previously the values `PUBNUB_PUB_KEY`,
`PUBNUB_SUB_KEY`, `SENTRY_DSN`, and `SWAPS_USE_DEV_APIS` could only be
set via environment variable. Now, all of these variables can be set
either way.

Closes #15003
2022-08-19 15:46:18 -02:30
..
transforms update prettier (#15360) 2022-07-31 13:26:40 -05:00
config.js Add validation to production build script (#15468) 2022-08-19 15:46:18 -02:30
constants.js Add validation to production build script (#15468) 2022-08-19 15:46:18 -02:30
display.js Rationalize build system arguments (#12047) 2021-09-09 12:44:57 -07:00
etc.js Fix invalid build timestamp on certain timezones (#15245) 2022-07-18 15:03:58 -02:30
index.js Add validation to production build script (#15468) 2022-08-19 15:46:18 -02:30
manifest.js remove exclusions for mismatched object jsdoc type casing (#15351) 2022-07-27 08:28:05 -05:00
README.md Migrate the build script to yargs (#14836) 2022-06-21 17:37:05 -02:30
sass-compiler.js Add Lavamoat to build system (#9939) 2021-02-22 22:43:29 +08:00
scripts.js Add validation to production build script (#15468) 2022-08-19 15:46:18 -02:30
static.js Migrate the build script to yargs (#14836) 2022-06-21 17:37:05 -02:30
styles.js Remove unnecessary file extensions (#15352) 2022-07-27 14:32:17 -05:00
task.js Fix build script errors (#15493) 2022-08-06 03:33:35 -04:00
utils.js Add validation to production build script (#15468) 2022-08-19 15:46:18 -02:30

The MetaMask Build System

tl;dr yarn dist for prod, yarn start for local development. Add --build-type flask to build Flask, our canary distribution with more experimental features.

This directory contains the MetaMask build system, which is used to build the MetaMask Extension such that it can be used in a supported browser. From the repository root, the build system entry file is located at ./development/build/index.js.

Several package scripts invoke the build system. For example, yarn start creates a watched development build, and yarn dist creates a production build. Some of these scripts applies lavamoat to the build system, and some do not. For local development, building without lavamoat is faster and therefore preferable.

The build system is not a full-featured CLI, but rather a script that expects some command line arguments and environment variables. For instructions regarding environment variables, see the main repository readme.

Generally speaking, the build system consists of gulp tasks that either manipulate static assets or bundle source files using Browserify. Production-ready zip files are written to the ./builds directory, while "unpacked" extension builds are written to the ./dist directory.

Our JavaScript source files are transformed using Babel, specifically using the babelify Browserify transform. Source file bundling tasks are implemented in the ./development/build/scripts.js.

Locally implemented Browserify transforms, some of which affect how we write JavaScript, are listed and documented here.

Usage

See node ./development/build/index.js --help