# TODO(ritave): Add support for environments (/development/build/constants.js:@ENVIRONMENT) # TODO(ritave): Add support for build targets (/development/build/constants.js:@BUILD_TARGETS) # TODO(ritave): Warn if not all of declared variables have been defined / used # The priority order of variable definitions (most important to least important): # ; ; .metamaskprodrc; .metamaskrc; builds.yml:.buildTypes..env; builds.yml:.features..env; builds.yml:.env # The build type to use when no build type provided in the cli default: &default main # Declaration of build types # Each build type is composed of features, env variables and assets. # Also known as productFlavors in Android lingo # Note: These build types should be kept in sync with the list in `.github/workflows/update-lavamoat-policies.yml` buildTypes: main: features: - build-main # Additional env variables that are specific to this build env: - INFURA_PROD_PROJECT_ID - SEGMENT_PROD_WRITE_KEY - INFURA_ENV_KEY_REF: INFURA_PROD_PROJECT_ID - SEGMENT_WRITE_KEY_REF: SEGMENT_PROD_WRITE_KEY # Main build uses the default browser manifest manifestOverrides: false beta: features: - build-beta env: - INFURA_BETA_PROJECT_ID - SEGMENT_BETA_WRITE_KEY - INFURA_ENV_KEY_REF: INFURA_BETA_PROJECT_ID - SEGMENT_WRITE_KEY_REF: SEGMENT_BETA_WRITE_KEY # Modifies how the version is displayed. # eg. instead of 10.25.0 -> 10.25.0-beta.2 isPrerelease: true # Folder which contains overrides to browser manifests manifestOverrides: ./app/build-types/beta/manifest/ flask: # Code surrounded using code fences for that feature # will not be removed features: - snaps - desktop - build-flask - keyring-snaps # - blockaid env: - INFURA_FLASK_PROJECT_ID - SEGMENT_FLASK_WRITE_KEY - ALLOW_LOCAL_SNAPS: true - REQUIRE_SNAPS_ALLOWLIST: false - IFRAME_EXECUTION_ENVIRONMENT_URL: https://execution.metamask.io/0.38.0-flask.1/index.html - SUPPORT_LINK: https://metamask-flask.zendesk.com/hc - SUPPORT_REQUEST_LINK: https://metamask-flask.zendesk.com/hc/en-us/requests/new - INFURA_ENV_KEY_REF: INFURA_FLASK_PROJECT_ID - SEGMENT_WRITE_KEY_REF: SEGMENT_FLASK_WRITE_KEY isPrerelease: true manifestOverrides: ./app/build-types/flask/manifest/ desktop: features: - snaps - desktop - build-flask - keyring-snaps env: - INFURA_FLASK_PROJECT_ID - SEGMENT_FLASK_WRITE_KEY - ALLOW_LOCAL_SNAPS: true - REQUIRE_SNAPS_ALLOWLIST: false - IFRAME_EXECUTION_ENVIRONMENT_URL: https://execution.metamask.io/0.38.0-flask.1/index.html - SUPPORT_LINK: https://metamask-flask.zendesk.com/hc - SUPPORT_REQUEST_LINK: https://metamask-flask.zendesk.com/hc/en-us/requests/new - INFURA_ENV_KEY_REF: INFURA_FLASK_PROJECT_ID - SEGMENT_WRITE_KEY_REF: SEGMENT_FLASK_WRITE_KEY isPrerelease: true manifestOverrides: ./app/build-types/desktop/manifest/ mmi: features: - build-mmi env: - INFURA_MMI_PROJECT_ID - SEGMENT_MMI_WRITE_KEY - INFURA_ENV_KEY_REF: INFURA_MMI_PROJECT_ID - SEGMENT_WRITE_KEY_REF: SEGMENT_MMI_WRITE_KEY - MMI_CONFIGURATION_SERVICE_URL: https://configuration.metamask-institutional.io/v1/configuration/default - SUPPORT_LINK: https://mmi-support.zendesk.com/hc/en-us - SUPPORT_REQUEST_LINK: https://mmi-support.zendesk.com/hc/en-us/requests/new # For some reason, MMI uses this type of versioning # Leaving it on for backwards compatibility isPrerelease: true manifestOverrides: ./app/build-types/mmi/manifest/ # Build types are composed of a set of features. # Each feature can have code fences that add new code # as well declaring, defining and overriding env variables features: snaps: # Each feature might have variables that only exist when built with that feature active env: # Whether to allow snaps from localhost - local://localhost:8080/snap.manifest.json # Enabled in Flask, will be disabled in Main - ALLOW_LOCAL_SNAPS # Whether to verify that a snap can be installed using an allow list - REQUIRE_SNAPS_ALLOWLIST - IFRAME_EXECUTION_ENVIRONMENT_URL assets: - ./{app,shared,ui}/**/snaps/** desktop: env: - COMPATIBILITY_VERSION_EXTENSION: 1 - DISABLE_WEB_SOCKET_ENCRYPTION: false - SKIP_OTP_PAIRING_FLOW: false - WEB_SOCKET_PORT: null blockaid: env: - BLOCKAID_FILE_CDN: null - BLOCKAID_PUBLIC_KEY: null ### # Build Type code extensions. Things like different support links, warning pages, banners ### build-main: build-beta: assets: # Assets that will be copied - src: ./app/build-types/beta/images/ dest: images # Assets that are exclusively included in this feature and ignored in others # Supports globs - ./{app,shared,ui}/**/beta/** build-mmi: assets: - src: ./app/build-types/mmi/images/ dest: images - ./{app,shared,ui}/**/institutional/** build-flask: assets: - src: ./app/build-types/flask/images/ dest: images - ./{app,shared,ui}/**/flask/** keyring-snaps: env: - KEYRING_SNAPS_REGISTRY_URL: https://metamask.github.io/keyring-snaps-registry/prod/registry.json assets: - ./{app,shared,ui}/**/keyring-snaps/** # Env variables that are required for all types of builds # # env object supports both declarations (- FOO), and definitions (- FOO: BAR). # Variables that were declared have to be defined somewhere in the load chain before usage env: - SWAPS_USE_DEV_APIS: false - PORTFOLIO_URL: https://portfolio.metamask.io - TOKEN_ALLOWANCE_IMPROVEMENTS: false - TRANSACTION_SECURITY_PROVIDER: false # The unlock password - PASSWORD: null # Also see METAMASK_DEBUG and NODE_DEBUG - DEBUG: null - SUPPORT_LINK: https://support.metamask.io - SUPPORT_REQUEST_LINK: https://metamask.zendesk.com/hc/en-us - SKIP_BACKGROUND_INITIALIZATION: false # TODO(ritave): Move ManifestV3 into a feature? - ENABLE_MV3: false - HARDWARE_WALLETS_MV3: false # These are exclusively used for MV3 - APPLY_LAVAMOAT - FILE_NAMES # This variable is read by Trezor's source and breaks build if not included - ASSET_PREFIX: null ### # API keys to 3rd party services ### - PUBNUB_PUB_KEY: null - PUBNUB_SUB_KEY: null - SEGMENT_HOST: null - SENTRY_DSN: null - SENTRY_DSN_DEV: null - OPENSEA_KEY: null - ETHERSCAN_KEY: null # also INFURA_PROJECT_ID below ### # Build system backwards compatibility ### - INFURA_ENV_KEY_REF - SEGMENT_WRITE_KEY_REF ### # Variables that are modified with hardcoded code ### # Used for debugging changes to the phishing warning page. # Modified in /development/build/scripts.js:@getPhishingWarningPageUrl - PHISHING_WARNING_PAGE_URL: null # Modified in /development/build/scripts.js:@getInfuraProjectId - INFURA_PROJECT_ID # Modified in /development/build/scripts.js:@getSegmentWriteKey - SEGMENT_WRITE_KEY: '' # Modified in /development/build/scripts.js:@setEnvironmentVariables # Also see DEBUG and NODE_DEBUG - METAMASK_DEBUG: false # Modified in /development/build/scripts.js:@setEnvironmentVariables - IN_TEST # Modified in /development/build/scripts.js:@setEnvironmentVariables - METAMASK_ENVIRONMENT # Modified in /development/build/scripts.js:@setEnvironmentVariables - METAMASK_VERSION # Modified in /development/build/scripts.js:@setEnvironmentVariables - METAMASK_BUILD_TYPE # Modified in /development/build/scripts.js:@setEnvironmentVariables - NODE_ENV # Defined by node itself # For the purposes of the build system we define it as empty below # if it's not inside process.env # Also see DEBUG and METAMASK_DEBUG - NODE_DEBUG: '' # Used by react-devtools-core - EDITOR_URL: '' # CDN for blockaid files - BLOCKAID_FILE_CDN # Blockaid public key for verifying signatures of data files downloaded from CDN - BLOCKAID_PUBLIC_KEY ### # Meta variables ### # Uses yaml anchors to DRY - https://juju.is/docs/sdk/yaml-anchors-and-aliases - METAMASK_BUILD_TYPE_DEFAULT: *default