mirror of
https://github.com/kremalicious/metamask-extension.git
synced 2024-11-22 01:47:00 +01:00
7e824fdc5e
Certain draft PRs that add new dependencies have been failing because CI will try to use the GitHub npm registry, which we use for preview builds. This registry does not have non-preview package versions, so the installation will fail if new non-preview dependencies are needed. CI has been updated to only use the GitHub npm registry when preview builds are detected in the manifest.
1305 lines
38 KiB
YAML
1305 lines
38 KiB
YAML
version: 2.1
|
|
|
|
executors:
|
|
node-browsers:
|
|
docker:
|
|
- image: cimg/node:16.20-browsers
|
|
node-browsers-medium-plus:
|
|
docker:
|
|
- image: cimg/node:16.20-browsers
|
|
resource_class: medium+
|
|
environment:
|
|
NODE_OPTIONS: --max_old_space_size=2048
|
|
node-browsers-large:
|
|
docker:
|
|
- image: cimg/node:16.20-browsers
|
|
resource_class: large
|
|
environment:
|
|
NODE_OPTIONS: --max_old_space_size=2048
|
|
shellcheck:
|
|
docker:
|
|
- image: koalaman/shellcheck-alpine@sha256:dfaf08fab58c158549d3be64fb101c626abc5f16f341b569092577ae207db199
|
|
|
|
orbs:
|
|
gh: circleci/github-cli@2.0
|
|
codecov: codecov/codecov@3.2.2
|
|
|
|
rc_branch_only: &rc_branch_only
|
|
filters:
|
|
branches:
|
|
only:
|
|
- /^Version-v(\d+)[.](\d+)[.](\d+)/
|
|
|
|
aliases:
|
|
# Shallow Git Clone
|
|
- &shallow-git-clone
|
|
name: Shallow Git Clone
|
|
command: |
|
|
#!/bin/bash
|
|
set -e
|
|
set -u
|
|
set -o pipefail
|
|
|
|
# This Shallow Git Clone code is adapted from what the standard CircleCI `checkout` command does for the case of an external PR (link to example below):
|
|
# https://app.circleci.com/pipelines/github/MetaMask/metamask-extension/49817/workflows/dc195ea6-ac06-4de1-9edf-4c949427b5fb/jobs/1430976/parallel-runs/0/steps/0-101
|
|
### git clone --no-checkout "$CIRCLE_REPOSITORY_URL" .
|
|
### git fetch --force origin +refs/pull/18748/head:refs/remotes/origin/pull/18748
|
|
### git checkout --force -B "$CIRCLE_BRANCH" "$CIRCLE_SHA1"
|
|
### git --no-pager log --no-color -n 1 --format='HEAD is now at %h %s'
|
|
|
|
# Set up SSH access
|
|
# This SSH key is the current github.com SSH key as of June 2023, but it will need to be changed whenever github changes their key (probably every few years)
|
|
GITHUB_SSH_KEY="AAAAC3NzaC1lZDI1NTE5AAAAIOMqqnkVzrm0SdG6UOoqKLsabgH5C9okWi0dh2l9GKJl"
|
|
mkdir -p ~/.ssh
|
|
echo github.com ssh-ed25519 $GITHUB_SSH_KEY >> ~/.ssh/known_hosts
|
|
|
|
# Take a different clone path depending on if it's a tag, a PR from an external repo, or the normal case
|
|
if [ -n "${CIRCLE_TAG-}" ]; then
|
|
# tag
|
|
git clone --depth 1 --no-checkout "$CIRCLE_REPOSITORY_URL" .
|
|
git fetch --depth 1 --force origin "+refs/tags/${CIRCLE_TAG}:refs/tags/${CIRCLE_TAG}"
|
|
git checkout --force -q "$CIRCLE_TAG" "$CIRCLE_SHA1"
|
|
elif [[ "$CIRCLE_BRANCH" =~ ^pull\/* ]]; then
|
|
# pull request
|
|
git clone --depth 1 --no-checkout "$CIRCLE_REPOSITORY_URL" .
|
|
git fetch --depth 1 --force origin "${CIRCLE_BRANCH}/head:remotes/origin/${CIRCLE_BRANCH}"
|
|
git checkout --force -B "$CIRCLE_BRANCH" "$CIRCLE_SHA1"
|
|
else
|
|
# normal case
|
|
git clone --depth 1 "$CIRCLE_REPOSITORY_URL" --branch "$CIRCLE_BRANCH" .
|
|
fi
|
|
|
|
workflows:
|
|
test_and_release:
|
|
jobs:
|
|
- create_release_pull_request:
|
|
<<: *rc_branch_only
|
|
requires:
|
|
- prep-deps
|
|
- trigger-beta-build:
|
|
requires:
|
|
- prep-deps
|
|
- prep-deps
|
|
- test-deps-audit:
|
|
requires:
|
|
- prep-deps
|
|
- test-deps-depcheck:
|
|
requires:
|
|
- prep-deps
|
|
- test-yarn-dedupe:
|
|
requires:
|
|
- prep-deps
|
|
- validate-lavamoat-allow-scripts:
|
|
requires:
|
|
- prep-deps
|
|
- validate-lavamoat-policy-build:
|
|
requires:
|
|
- prep-deps
|
|
- validate-lavamoat-policy-webapp:
|
|
matrix:
|
|
parameters:
|
|
build-type: [main, beta, flask, mmi, desktop]
|
|
requires:
|
|
- prep-deps
|
|
- prep-build-mmi:
|
|
requires:
|
|
- prep-deps
|
|
- prep-build:
|
|
requires:
|
|
- prep-deps
|
|
- prep-build-desktop:
|
|
filters:
|
|
branches:
|
|
ignore: master
|
|
requires:
|
|
- prep-deps
|
|
- prep-build-flask:
|
|
requires:
|
|
- prep-deps
|
|
- prep-build-test:
|
|
requires:
|
|
- prep-deps
|
|
- prep-build-test-mv3:
|
|
requires:
|
|
- prep-deps
|
|
- prep-build-test-flask:
|
|
requires:
|
|
- prep-deps
|
|
- prep-build-storybook:
|
|
requires:
|
|
- prep-deps
|
|
- prep-build-ts-migration-dashboard:
|
|
requires:
|
|
- prep-deps
|
|
- test-lint:
|
|
requires:
|
|
- prep-deps
|
|
- test-lint-shellcheck
|
|
- test-lint-lockfile:
|
|
requires:
|
|
- prep-deps
|
|
- test-lint-changelog:
|
|
requires:
|
|
- prep-deps
|
|
- test-e2e-chrome:
|
|
requires:
|
|
- prep-build-test
|
|
- test-e2e-firefox:
|
|
requires:
|
|
- prep-build-test
|
|
- test-e2e-chrome-snaps:
|
|
requires:
|
|
- prep-build-test-flask
|
|
- test-e2e-firefox-snaps:
|
|
requires:
|
|
- prep-build-test-flask
|
|
- test-e2e-chrome-mv3:
|
|
requires:
|
|
- prep-build-test-mv3
|
|
- test-unit-mocha:
|
|
requires:
|
|
- prep-deps
|
|
- test-unit-jest-main:
|
|
requires:
|
|
- prep-deps
|
|
- test-unit-jest-development:
|
|
requires:
|
|
- prep-deps
|
|
- upload-and-validate-coverage:
|
|
requires:
|
|
- test-unit-jest-main
|
|
- test-unit-jest-development
|
|
- test-unit-mocha
|
|
- test-unit-global:
|
|
requires:
|
|
- prep-deps
|
|
- test-storybook:
|
|
requires:
|
|
- prep-deps
|
|
- prep-build-storybook
|
|
- validate-source-maps:
|
|
requires:
|
|
- prep-build
|
|
- validate-source-maps-beta:
|
|
requires:
|
|
- trigger-beta-build
|
|
- validate-source-maps-desktop:
|
|
filters:
|
|
branches:
|
|
ignore: master
|
|
requires:
|
|
- prep-build-desktop
|
|
- validate-source-maps-mmi:
|
|
requires:
|
|
- prep-build-mmi
|
|
- validate-source-maps-flask:
|
|
requires:
|
|
- prep-build-flask
|
|
- test-mozilla-lint:
|
|
requires:
|
|
- prep-deps
|
|
- prep-build
|
|
- test-mozilla-lint-desktop:
|
|
filters:
|
|
branches:
|
|
ignore: master
|
|
requires:
|
|
- prep-deps
|
|
- prep-build-desktop
|
|
- test-mozilla-lint-flask:
|
|
requires:
|
|
- prep-deps
|
|
- prep-build-flask
|
|
- all-tests-pass:
|
|
requires:
|
|
- validate-lavamoat-allow-scripts
|
|
- validate-lavamoat-policy-build
|
|
- validate-lavamoat-policy-webapp
|
|
- test-lint
|
|
- test-lint-shellcheck
|
|
- test-lint-lockfile
|
|
- test-lint-changelog
|
|
- test-unit-jest-main
|
|
- test-unit-jest-development
|
|
- test-unit-global
|
|
- test-unit-mocha
|
|
- upload-and-validate-coverage
|
|
- validate-source-maps
|
|
- validate-source-maps-beta
|
|
- validate-source-maps-desktop
|
|
- validate-source-maps-flask
|
|
- validate-source-maps-mmi
|
|
- test-mozilla-lint
|
|
- test-mozilla-lint-desktop
|
|
- test-mozilla-lint-flask
|
|
- test-e2e-chrome
|
|
- test-e2e-firefox
|
|
- test-e2e-chrome-snaps
|
|
- test-e2e-firefox-snaps
|
|
- test-storybook
|
|
- benchmark:
|
|
requires:
|
|
- prep-build-test
|
|
- user-actions-benchmark:
|
|
requires:
|
|
- prep-build-test
|
|
- stats-module-load-init:
|
|
requires:
|
|
- prep-build-test-mv3
|
|
- job-publish-prerelease:
|
|
requires:
|
|
- prep-deps
|
|
- prep-build
|
|
- trigger-beta-build
|
|
- prep-build-desktop
|
|
- prep-build-mmi
|
|
- prep-build-flask
|
|
- prep-build-storybook
|
|
- prep-build-ts-migration-dashboard
|
|
- prep-build-test-mv3
|
|
- benchmark
|
|
- user-actions-benchmark
|
|
- stats-module-load-init
|
|
- all-tests-pass
|
|
- job-publish-release:
|
|
filters:
|
|
branches:
|
|
only: master
|
|
requires:
|
|
- prep-deps
|
|
- prep-build
|
|
- prep-build-desktop
|
|
- prep-build-mmi
|
|
- prep-build-flask
|
|
- all-tests-pass
|
|
- job-publish-storybook:
|
|
filters:
|
|
branches:
|
|
only: develop
|
|
requires:
|
|
- prep-build-storybook
|
|
- job-publish-ts-migration-dashboard:
|
|
filters:
|
|
branches:
|
|
only: develop
|
|
requires:
|
|
- prep-build-ts-migration-dashboard
|
|
|
|
jobs:
|
|
trigger-beta-build:
|
|
executor: node-browsers-medium-plus
|
|
steps:
|
|
- run: *shallow-git-clone
|
|
- attach_workspace:
|
|
at: .
|
|
- when:
|
|
condition:
|
|
not:
|
|
matches:
|
|
pattern: /^master$/
|
|
value: << pipeline.git.branch >>
|
|
steps:
|
|
- run:
|
|
name: Build beta prod
|
|
command: |
|
|
.circleci/scripts/trigger-beta-build.sh
|
|
- run:
|
|
name: Move beta build to 'dist-beta' to avoid conflict with production build
|
|
command: mv ./dist ./dist-beta
|
|
- run:
|
|
name: Move beta zips to 'builds-beta' to avoid conflict with production build
|
|
command: mv ./builds ./builds-beta
|
|
- persist_to_workspace:
|
|
root: .
|
|
paths:
|
|
- dist-beta
|
|
- builds-beta
|
|
|
|
create_release_pull_request:
|
|
executor: node-browsers
|
|
steps:
|
|
- run: *shallow-git-clone
|
|
- attach_workspace:
|
|
at: .
|
|
- run:
|
|
name: Bump manifest version
|
|
command: .circleci/scripts/release-bump-manifest-version.sh
|
|
- run:
|
|
name: Update changelog
|
|
command: yarn update-changelog --rc
|
|
- run:
|
|
name: Commit changes
|
|
command: .circleci/scripts/release-commit-version-bump.sh
|
|
- run:
|
|
name: Create GitHub Pull Request for version
|
|
command: .circleci/scripts/release-create-release-pr.sh
|
|
|
|
prep-deps:
|
|
executor: node-browsers
|
|
steps:
|
|
- run: *shallow-git-clone
|
|
- restore_cache:
|
|
keys:
|
|
# First try to get the specific cache for the checksum of the yarn.lock file.
|
|
# This cache key lookup will fail if the lock file is modified and a cache
|
|
# has not yet been persisted for the new checksum.
|
|
- dependency-cache-v1-{{ checksum "yarn.lock" }}
|
|
# To prevent having to do a full install of every node_module when
|
|
# dependencies change, restore from the last known cache of any
|
|
# branch/checksum, the install step will remove cached items that are no longer
|
|
# required and add the new dependencies, and the cache will be persisted.
|
|
- dependency-cache-v1-
|
|
- gh/install
|
|
- run:
|
|
name: Install dependencies
|
|
command: .circleci/scripts/install-dependencies.sh
|
|
- save_cache:
|
|
key: dependency-cache-v1-{{ checksum "yarn.lock" }}
|
|
paths:
|
|
- .yarn/cache
|
|
- persist_to_workspace:
|
|
root: .
|
|
paths:
|
|
- node_modules
|
|
- build-artifacts
|
|
|
|
validate-lavamoat-allow-scripts:
|
|
executor: node-browsers-medium-plus
|
|
steps:
|
|
- run: *shallow-git-clone
|
|
- attach_workspace:
|
|
at: .
|
|
- run:
|
|
name: Validate allow-scripts config
|
|
command: yarn allow-scripts auto
|
|
- run:
|
|
name: Check working tree
|
|
command: .circleci/scripts/check-working-tree.sh
|
|
|
|
validate-lavamoat-policy-build:
|
|
executor: node-browsers-medium-plus
|
|
steps:
|
|
- run: *shallow-git-clone
|
|
- attach_workspace:
|
|
at: .
|
|
- run:
|
|
name: Validate LavaMoat build policy
|
|
command: yarn lavamoat:build:auto
|
|
- run:
|
|
name: Check working tree
|
|
command: .circleci/scripts/check-working-tree.sh
|
|
|
|
validate-lavamoat-policy-webapp:
|
|
executor: node-browsers-medium-plus
|
|
parameters:
|
|
build-type:
|
|
type: string
|
|
steps:
|
|
- run: *shallow-git-clone
|
|
- attach_workspace:
|
|
at: .
|
|
- run:
|
|
name: Validate LavaMoat << parameters.build-type >> policy
|
|
command: yarn lavamoat:webapp:auto:ci '--build-types=<< parameters.build-type >>'
|
|
- run:
|
|
name: Check working tree
|
|
command: .circleci/scripts/check-working-tree.sh
|
|
|
|
prep-build:
|
|
executor: node-browsers-medium-plus
|
|
steps:
|
|
- run: *shallow-git-clone
|
|
- attach_workspace:
|
|
at: .
|
|
- when:
|
|
condition:
|
|
not:
|
|
matches:
|
|
pattern: /^master$/
|
|
value: << pipeline.git.branch >>
|
|
steps:
|
|
- run:
|
|
name: build:dist
|
|
command: yarn build dist
|
|
- when:
|
|
condition:
|
|
matches:
|
|
pattern: /^master$/
|
|
value: << pipeline.git.branch >>
|
|
steps:
|
|
- run:
|
|
name: build:prod
|
|
command: yarn build prod
|
|
- run:
|
|
name: build:debug
|
|
command: find dist/ -type f -exec md5sum {} \; | sort -k 2
|
|
- persist_to_workspace:
|
|
root: .
|
|
paths:
|
|
- dist
|
|
- builds
|
|
|
|
prep-build-desktop:
|
|
executor: node-browsers-medium-plus
|
|
steps:
|
|
- run: *shallow-git-clone
|
|
- attach_workspace:
|
|
at: .
|
|
- run:
|
|
name: build:dist
|
|
command: yarn build --build-type desktop dist
|
|
- run:
|
|
name: build:debug
|
|
command: find dist/ -type f -exec md5sum {} \; | sort -k 2
|
|
- run:
|
|
name: Move desktop build to 'dist-desktop' to avoid conflict with production build
|
|
command: mv ./dist ./dist-desktop
|
|
- run:
|
|
name: Move desktop zips to 'builds-desktop' to avoid conflict with production build
|
|
command: mv ./builds ./builds-desktop
|
|
- persist_to_workspace:
|
|
root: .
|
|
paths:
|
|
- dist-desktop
|
|
- builds-desktop
|
|
|
|
prep-build-mmi:
|
|
executor: node-browsers-medium-plus
|
|
steps:
|
|
- run: *shallow-git-clone
|
|
- attach_workspace:
|
|
at: .
|
|
- when:
|
|
condition:
|
|
not:
|
|
matches:
|
|
pattern: /^master$/
|
|
value: << pipeline.git.branch >>
|
|
steps:
|
|
- run:
|
|
name: build:dist
|
|
command: yarn build --build-type mmi dist
|
|
- when:
|
|
condition:
|
|
matches:
|
|
pattern: /^master$/
|
|
value: << pipeline.git.branch >>
|
|
steps:
|
|
- run:
|
|
name: build:prod
|
|
command: yarn build --build-type mmi prod
|
|
- run:
|
|
name: build:debug
|
|
command: find dist/ -type f -exec md5sum {} \; | sort -k 2
|
|
- run:
|
|
name: Move mmi build to 'dist-mmi' to avoid conflict with production build
|
|
command: mv ./dist ./dist-mmi
|
|
- run:
|
|
name: Move mmi zips to 'builds-mmi' to avoid conflict with production build
|
|
command: mv ./builds ./builds-mmi
|
|
- persist_to_workspace:
|
|
root: .
|
|
paths:
|
|
- dist-mmi
|
|
- builds-mmi
|
|
- store_artifacts:
|
|
path: builds-mmi
|
|
destination: builds-mmi
|
|
|
|
prep-build-flask:
|
|
executor: node-browsers-medium-plus
|
|
steps:
|
|
- run: *shallow-git-clone
|
|
- attach_workspace:
|
|
at: .
|
|
- when:
|
|
condition:
|
|
not:
|
|
matches:
|
|
pattern: /^master$/
|
|
value: << pipeline.git.branch >>
|
|
steps:
|
|
- run:
|
|
name: build:dist
|
|
command: yarn build --build-type flask dist
|
|
- when:
|
|
condition:
|
|
matches:
|
|
pattern: /^master$/
|
|
value: << pipeline.git.branch >>
|
|
steps:
|
|
- run:
|
|
name: build:prod
|
|
command: yarn build --build-type flask prod
|
|
- run:
|
|
name: build:debug
|
|
command: find dist/ -type f -exec md5sum {} \; | sort -k 2
|
|
- run:
|
|
name: Move flask build to 'dist-flask' to avoid conflict with production build
|
|
command: mv ./dist ./dist-flask
|
|
- run:
|
|
name: Move flask zips to 'builds-flask' to avoid conflict with production build
|
|
command: mv ./builds ./builds-flask
|
|
- persist_to_workspace:
|
|
root: .
|
|
paths:
|
|
- dist-flask
|
|
- builds-flask
|
|
|
|
prep-build-test-flask:
|
|
executor: node-browsers-medium-plus
|
|
steps:
|
|
- run: *shallow-git-clone
|
|
- attach_workspace:
|
|
at: .
|
|
- run:
|
|
name: Build extension for testing
|
|
command: yarn build:test:flask
|
|
- run:
|
|
name: Move test build to 'dist-test' to avoid conflict with production build
|
|
command: mv ./dist ./dist-test-flask
|
|
- run:
|
|
name: Move test zips to 'builds-test' to avoid conflict with production build
|
|
command: mv ./builds ./builds-test-flask
|
|
- persist_to_workspace:
|
|
root: .
|
|
paths:
|
|
- dist-test-flask
|
|
- builds-test-flask
|
|
|
|
prep-build-test-mv3:
|
|
executor: node-browsers-medium-plus
|
|
steps:
|
|
- run: *shallow-git-clone
|
|
- attach_workspace:
|
|
at: .
|
|
- run:
|
|
name: Build extension in mv3 for testing
|
|
command: yarn build:test:mv3
|
|
- run:
|
|
name: Move test build to 'dist-test' to avoid conflict with production build
|
|
command: mv ./dist ./dist-test-mv3
|
|
- run:
|
|
name: Move test zips to 'builds-test' to avoid conflict with production build
|
|
command: mv ./builds ./builds-test-mv3
|
|
- persist_to_workspace:
|
|
root: .
|
|
paths:
|
|
- dist-test-mv3
|
|
- builds-test-mv3
|
|
|
|
prep-build-test:
|
|
executor: node-browsers-medium-plus
|
|
steps:
|
|
- run: *shallow-git-clone
|
|
- attach_workspace:
|
|
at: .
|
|
- run:
|
|
name: Build extension for testing
|
|
command: yarn build:test
|
|
- run:
|
|
name: Move test build to 'dist-test' to avoid conflict with production build
|
|
command: mv ./dist ./dist-test
|
|
- run:
|
|
name: Move test zips to 'builds-test' to avoid conflict with production build
|
|
command: mv ./builds ./builds-test
|
|
- persist_to_workspace:
|
|
root: .
|
|
paths:
|
|
- dist-test
|
|
- builds-test
|
|
|
|
prep-build-storybook:
|
|
executor: node-browsers-large
|
|
steps:
|
|
- run: *shallow-git-clone
|
|
- attach_workspace:
|
|
at: .
|
|
- run:
|
|
name: Build Storybook
|
|
command: yarn storybook:build
|
|
- persist_to_workspace:
|
|
root: .
|
|
paths:
|
|
- storybook-build
|
|
|
|
prep-build-ts-migration-dashboard:
|
|
executor: node-browsers
|
|
steps:
|
|
- run: *shallow-git-clone
|
|
- attach_workspace:
|
|
at: .
|
|
- run:
|
|
name: Build TypeScript migration dashboard
|
|
command: yarn ts-migration:dashboard:build
|
|
- persist_to_workspace:
|
|
root: .
|
|
paths:
|
|
- development/ts-migration-dashboard/build/final
|
|
|
|
test-yarn-dedupe:
|
|
executor: node-browsers
|
|
steps:
|
|
- run: *shallow-git-clone
|
|
- attach_workspace:
|
|
at: .
|
|
- run:
|
|
name: Detect yarn lock deduplications
|
|
command: yarn dedupe --check
|
|
|
|
test-lint:
|
|
executor: node-browsers
|
|
steps:
|
|
- run: *shallow-git-clone
|
|
- attach_workspace:
|
|
at: .
|
|
- run:
|
|
name: Lint
|
|
command: yarn lint
|
|
- run:
|
|
name: Verify locales
|
|
command: yarn verify-locales --quiet
|
|
|
|
test-storybook:
|
|
executor: node-browsers-large
|
|
steps:
|
|
- run: *shallow-git-clone
|
|
- attach_workspace:
|
|
at: .
|
|
- run:
|
|
name: Install Playwright browsers
|
|
command: yarn exec playwright install
|
|
- run:
|
|
name: Test Storybook
|
|
command: yarn test-storybook:ci
|
|
|
|
test-lint-shellcheck:
|
|
executor: shellcheck
|
|
steps:
|
|
- checkout
|
|
- run: apk add --no-cache bash jq yarn
|
|
- run:
|
|
name: ShellCheck Lint
|
|
command: ./development/shellcheck.sh
|
|
|
|
test-lint-lockfile:
|
|
executor: node-browsers
|
|
steps:
|
|
- run: *shallow-git-clone
|
|
- attach_workspace:
|
|
at: .
|
|
- run:
|
|
name: lockfile-lint
|
|
command: yarn lint:lockfile
|
|
|
|
test-lint-changelog:
|
|
executor: node-browsers
|
|
steps:
|
|
- run: *shallow-git-clone
|
|
- attach_workspace:
|
|
at: .
|
|
- when:
|
|
condition:
|
|
not:
|
|
matches:
|
|
pattern: /^Version-v(\d+)[.](\d+)[.](\d+)$/
|
|
value: << pipeline.git.branch >>
|
|
steps:
|
|
- run:
|
|
name: Validate changelog
|
|
command: yarn lint:changelog
|
|
- when:
|
|
condition:
|
|
matches:
|
|
pattern: /^Version-v(\d+)[.](\d+)[.](\d+)$/
|
|
value: << pipeline.git.branch >>
|
|
steps:
|
|
- run:
|
|
name: Validate release candidate changelog
|
|
command: .circleci/scripts/validate-changelog-in-rc.sh
|
|
|
|
test-deps-audit:
|
|
executor: node-browsers
|
|
steps:
|
|
- run: *shallow-git-clone
|
|
- attach_workspace:
|
|
at: .
|
|
- run:
|
|
name: yarn audit
|
|
command: .circleci/scripts/yarn-audit.sh
|
|
|
|
test-deps-depcheck:
|
|
executor: node-browsers
|
|
steps:
|
|
- run: *shallow-git-clone
|
|
- attach_workspace:
|
|
at: .
|
|
- run:
|
|
name: depcheck
|
|
command: yarn depcheck
|
|
|
|
test-e2e-chrome:
|
|
executor: node-browsers
|
|
parallelism: 8
|
|
steps:
|
|
- run: *shallow-git-clone
|
|
- run:
|
|
name: Re-Install Chrome
|
|
command: ./.circleci/scripts/chrome-install.sh
|
|
- attach_workspace:
|
|
at: .
|
|
- run:
|
|
name: Move test build to dist
|
|
command: mv ./dist-test ./dist
|
|
- run:
|
|
name: Move test zips to builds
|
|
command: mv ./builds-test ./builds
|
|
- run:
|
|
name: test:e2e:chrome
|
|
command: |
|
|
if .circleci/scripts/test-run-e2e.sh
|
|
then
|
|
yarn test:e2e:chrome --retries 2 --debug
|
|
fi
|
|
no_output_timeout: 20m
|
|
- run:
|
|
name: Merge JUnit report
|
|
command: |
|
|
if [ "$(ls -A test/test-results/e2e)" ]; then
|
|
yarn test:e2e:report
|
|
fi
|
|
when: always
|
|
- store_artifacts:
|
|
path: test-artifacts
|
|
destination: test-artifacts
|
|
- store_test_results:
|
|
path: test/test-results/e2e.xml
|
|
|
|
test-e2e-chrome-mv3:
|
|
executor: node-browsers
|
|
parallelism: 8
|
|
steps:
|
|
- run: *shallow-git-clone
|
|
- run:
|
|
name: Re-Install Chrome
|
|
command: ./.circleci/scripts/chrome-install.sh
|
|
- attach_workspace:
|
|
at: .
|
|
- run:
|
|
name: Move test build to dist
|
|
command: mv ./dist-test-mv3 ./dist
|
|
- run:
|
|
name: Move test zips to builds
|
|
command: mv ./builds-test-mv3 ./builds
|
|
- run:
|
|
name: test:e2e:chrome
|
|
command: |
|
|
if .circleci/scripts/test-run-e2e.sh
|
|
then
|
|
yarn test:e2e:chrome --retries 2 --debug --mv3 || echo "Temporarily suppressing MV3 e2e test failures"
|
|
fi
|
|
no_output_timeout: 20m
|
|
- store_artifacts:
|
|
path: test-artifacts
|
|
destination: test-artifacts
|
|
|
|
test-e2e-firefox-snaps:
|
|
executor: node-browsers
|
|
parallelism: 4
|
|
steps:
|
|
- run: *shallow-git-clone
|
|
- run:
|
|
name: Install Firefox
|
|
command: ./.circleci/scripts/firefox-install.sh
|
|
- attach_workspace:
|
|
at: .
|
|
- run:
|
|
name: Move test build to dist
|
|
command: mv ./dist-test-flask ./dist
|
|
- run:
|
|
name: Move test zips to builds
|
|
command: mv ./builds-test-flask ./builds
|
|
- run:
|
|
name: test:e2e:firefox:snaps
|
|
command: |
|
|
if .circleci/scripts/test-run-e2e.sh
|
|
then
|
|
yarn test:e2e:firefox:snaps --retries 2 --debug
|
|
fi
|
|
no_output_timeout: 20m
|
|
- run:
|
|
name: Merge JUnit report
|
|
command: |
|
|
if [ "$(ls -A test/test-results/e2e)" ]; then
|
|
yarn test:e2e:report
|
|
fi
|
|
when: always
|
|
- store_artifacts:
|
|
path: test-artifacts
|
|
destination: test-artifacts
|
|
- store_test_results:
|
|
path: test/test-results/e2e.xml
|
|
|
|
test-e2e-chrome-snaps:
|
|
executor: node-browsers
|
|
parallelism: 4
|
|
steps:
|
|
- run: *shallow-git-clone
|
|
- run:
|
|
name: Re-Install Chrome
|
|
command: ./.circleci/scripts/chrome-install.sh
|
|
- attach_workspace:
|
|
at: .
|
|
- run:
|
|
name: Move test build to dist
|
|
command: mv ./dist-test-flask ./dist
|
|
- run:
|
|
name: Move test zips to builds
|
|
command: mv ./builds-test-flask ./builds
|
|
- run:
|
|
name: test:e2e:chrome:snaps
|
|
command: |
|
|
if .circleci/scripts/test-run-e2e.sh
|
|
then
|
|
yarn test:e2e:chrome:snaps --retries 2 --debug
|
|
fi
|
|
no_output_timeout: 20m
|
|
- run:
|
|
name: Merge JUnit report
|
|
command: |
|
|
if [ "$(ls -A test/test-results/e2e)" ]; then
|
|
yarn test:e2e:report
|
|
fi
|
|
when: always
|
|
- store_artifacts:
|
|
path: test-artifacts
|
|
destination: test-artifacts
|
|
- store_test_results:
|
|
path: test/test-results/e2e.xml
|
|
|
|
test-e2e-firefox:
|
|
executor: node-browsers-medium-plus
|
|
parallelism: 8
|
|
steps:
|
|
- run: *shallow-git-clone
|
|
- run:
|
|
name: Install Firefox
|
|
command: ./.circleci/scripts/firefox-install.sh
|
|
- attach_workspace:
|
|
at: .
|
|
- run:
|
|
name: Move test build to dist
|
|
command: mv ./dist-test ./dist
|
|
- run:
|
|
name: Move test zips to builds
|
|
command: mv ./builds-test ./builds
|
|
- run:
|
|
name: test:e2e:firefox
|
|
command: |
|
|
if .circleci/scripts/test-run-e2e.sh
|
|
then
|
|
yarn test:e2e:firefox --retries 2 --debug
|
|
fi
|
|
no_output_timeout: 20m
|
|
- run:
|
|
name: Merge JUnit report
|
|
command: |
|
|
if [ "$(ls -A test/test-results/e2e)" ]; then
|
|
yarn test:e2e:report
|
|
fi
|
|
when: always
|
|
- store_artifacts:
|
|
path: test-artifacts
|
|
destination: test-artifacts
|
|
- store_test_results:
|
|
path: test/test-results/e2e.xml
|
|
|
|
benchmark:
|
|
executor: node-browsers-medium-plus
|
|
steps:
|
|
- run: *shallow-git-clone
|
|
- run:
|
|
name: Re-Install Chrome
|
|
command: ./.circleci/scripts/chrome-install.sh
|
|
- attach_workspace:
|
|
at: .
|
|
- run:
|
|
name: Move test build to dist
|
|
command: mv ./dist-test ./dist
|
|
- run:
|
|
name: Move test zips to builds
|
|
command: mv ./builds-test ./builds
|
|
- run:
|
|
name: Run page load benchmark
|
|
command: yarn benchmark:chrome --out test-artifacts/chrome/benchmark/pageload.json --retries 2
|
|
- store_artifacts:
|
|
path: test-artifacts
|
|
destination: test-artifacts
|
|
- persist_to_workspace:
|
|
root: .
|
|
paths:
|
|
- test-artifacts
|
|
|
|
user-actions-benchmark:
|
|
executor: node-browsers-medium-plus
|
|
steps:
|
|
- run: *shallow-git-clone
|
|
- run:
|
|
name: Re-Install Chrome
|
|
command: ./.circleci/scripts/chrome-install.sh
|
|
- attach_workspace:
|
|
at: .
|
|
- run:
|
|
name: Move test build to dist
|
|
command: mv ./dist-test ./dist
|
|
- run:
|
|
name: Move test zips to builds
|
|
command: mv ./builds-test ./builds
|
|
- run:
|
|
name: Run page load benchmark
|
|
command: yarn user-actions-benchmark:chrome --out test-artifacts/chrome/benchmark/user_actions.json --retries 2
|
|
- store_artifacts:
|
|
path: test-artifacts
|
|
destination: test-artifacts
|
|
- persist_to_workspace:
|
|
root: .
|
|
paths:
|
|
- test-artifacts
|
|
|
|
stats-module-load-init:
|
|
executor: node-browsers-medium-plus
|
|
steps:
|
|
- run: *shallow-git-clone
|
|
- run:
|
|
name: Re-Install Chrome
|
|
command: ./.circleci/scripts/chrome-install.sh
|
|
- attach_workspace:
|
|
at: .
|
|
- run:
|
|
name: Move test build to dist
|
|
command: mv ./dist-test-mv3 ./dist
|
|
- run:
|
|
name: Move test zips to builds
|
|
command: mv ./builds-test-mv3 ./builds
|
|
- run:
|
|
name: Run page load benchmark
|
|
command: |
|
|
mkdir -p test-artifacts/chrome/mv3
|
|
cp -R development/charts/flamegraph test-artifacts/chrome/mv3/initialisation
|
|
cp -R development/charts/flamegraph/chart test-artifacts/chrome/mv3/initialisation/background
|
|
cp -R development/charts/flamegraph/chart test-artifacts/chrome/mv3/initialisation/ui
|
|
cp -R development/charts/table test-artifacts/chrome/mv3/load_time
|
|
- run:
|
|
name: Run page load benchmark
|
|
command: yarn mv3:stats:chrome --out test-artifacts/chrome/mv3
|
|
- run:
|
|
name: Install jq
|
|
command: sudo apt install jq -y
|
|
- run:
|
|
name: Record bundle size at commit
|
|
command: ./.circleci/scripts/bundle-stats-commit.sh
|
|
- store_artifacts:
|
|
path: test-artifacts
|
|
destination: test-artifacts
|
|
- persist_to_workspace:
|
|
root: .
|
|
paths:
|
|
- test-artifacts
|
|
|
|
job-publish-prerelease:
|
|
executor: node-browsers
|
|
steps:
|
|
- checkout
|
|
- attach_workspace:
|
|
at: .
|
|
- run:
|
|
name: build:source-map-explorer
|
|
command: ./development/source-map-explorer.sh
|
|
- store_artifacts:
|
|
path: dist/sourcemaps
|
|
destination: builds/sourcemaps
|
|
- store_artifacts:
|
|
path: dist-beta/sourcemaps
|
|
destination: builds-beta/sourcemaps
|
|
- store_artifacts:
|
|
path: dist-flask/sourcemaps
|
|
destination: builds-flask/sourcemaps
|
|
- store_artifacts:
|
|
path: builds
|
|
destination: builds
|
|
- store_artifacts:
|
|
path: builds-beta
|
|
destination: builds-beta
|
|
- store_artifacts:
|
|
path: builds-flask
|
|
destination: builds-flask
|
|
- store_artifacts:
|
|
path: coverage
|
|
destination: coverage
|
|
- store_artifacts:
|
|
path: test-artifacts
|
|
destination: test-artifacts
|
|
# important: generate lavamoat viz AFTER uploading builds as artifacts
|
|
# Temporarily disabled until we can update to a version of `sesify` with
|
|
# this fix included: https://github.com/LavaMoat/LavaMoat/pull/121
|
|
- run:
|
|
name: build:lavamoat-viz
|
|
command: ./.circleci/scripts/create-lavamoat-viz.sh
|
|
- store_artifacts:
|
|
path: build-artifacts
|
|
destination: build-artifacts
|
|
- store_artifacts:
|
|
path: storybook-build
|
|
destination: storybook
|
|
- store_artifacts:
|
|
path: development/ts-migration-dashboard/build/final
|
|
destination: ts-migration-dashboard
|
|
- run:
|
|
name: Set branch parent commit env var
|
|
command: |
|
|
echo "export PARENT_COMMIT=$(git merge-base origin/HEAD HEAD)" >> $BASH_ENV
|
|
source $BASH_ENV
|
|
- run:
|
|
name: build:announce
|
|
command: ./development/metamaskbot-build-announce.js
|
|
|
|
job-publish-release:
|
|
executor: node-browsers
|
|
steps:
|
|
- run: *shallow-git-clone
|
|
- attach_workspace:
|
|
at: .
|
|
- run:
|
|
name: Publish main release to Sentry
|
|
command: yarn sentry:publish
|
|
- run:
|
|
name: Publish Flask release to Sentry
|
|
command: yarn sentry:publish --build-type flask
|
|
- run:
|
|
name: Create GitHub release
|
|
command: |
|
|
.circleci/scripts/release-create-gh-release.sh
|
|
|
|
job-publish-storybook:
|
|
executor: node-browsers
|
|
steps:
|
|
- add_ssh_keys:
|
|
fingerprints:
|
|
- '3d:49:29:f4:b2:e8:ea:af:d1:32:eb:2a:fc:15:85:d8'
|
|
- run: *shallow-git-clone
|
|
- attach_workspace:
|
|
at: .
|
|
- run:
|
|
name: storybook:deploy
|
|
command: |
|
|
git remote add storybook git@github.com:MetaMask/metamask-storybook.git
|
|
yarn storybook:deploy
|
|
|
|
job-publish-ts-migration-dashboard:
|
|
executor: node-browsers
|
|
steps:
|
|
- add_ssh_keys:
|
|
fingerprints:
|
|
- '8b:21:e3:20:7c:c9:db:82:74:2d:86:d6:11:a7:2f:49'
|
|
- run: *shallow-git-clone
|
|
- attach_workspace:
|
|
at: .
|
|
- run:
|
|
name: ts-migration-dashboard:deploy
|
|
command: |
|
|
git remote add ts-migration-dashboard git@github.com:MetaMask/metamask-extension-ts-migration-dashboard.git
|
|
git config user.name "MetaMask Bot"
|
|
git config user.email metamaskbot@users.noreply.github.com
|
|
yarn ts-migration:dashboard:deploy
|
|
|
|
test-unit-mocha:
|
|
executor: node-browsers-medium-plus
|
|
steps:
|
|
- run: *shallow-git-clone
|
|
- attach_workspace:
|
|
at: .
|
|
- run:
|
|
name: test:coverage:mocha
|
|
command: yarn test:coverage:mocha
|
|
- persist_to_workspace:
|
|
root: .
|
|
paths:
|
|
- .nyc_output
|
|
- coverage
|
|
|
|
test-unit-jest-development:
|
|
executor: node-browsers
|
|
steps:
|
|
- run: *shallow-git-clone
|
|
- attach_workspace:
|
|
at: .
|
|
- run:
|
|
name: jest development unit tests
|
|
command: yarn test:coverage:jest:dev
|
|
- persist_to_workspace:
|
|
root: .
|
|
paths:
|
|
- coverage
|
|
- store_test_results:
|
|
path: test/test-results/junit.xml
|
|
|
|
test-unit-jest-main:
|
|
executor: node-browsers-medium-plus
|
|
parallelism: 12
|
|
steps:
|
|
- run: *shallow-git-clone
|
|
- attach_workspace:
|
|
at: .
|
|
- run:
|
|
name: test:coverage:jest
|
|
command: yarn test:coverage:jest
|
|
- persist_to_workspace:
|
|
root: .
|
|
paths:
|
|
- coverage
|
|
- store_test_results:
|
|
path: test/test-results/junit.xml
|
|
|
|
upload-and-validate-coverage:
|
|
executor: node-browsers
|
|
steps:
|
|
- run: *shallow-git-clone
|
|
- attach_workspace:
|
|
at: .
|
|
- codecov/upload
|
|
- run:
|
|
name: test:coverage:validate
|
|
command: yarn test:coverage:validate
|
|
- persist_to_workspace:
|
|
root: .
|
|
paths:
|
|
- coverage
|
|
|
|
test-unit-global:
|
|
executor: node-browsers
|
|
steps:
|
|
- run: *shallow-git-clone
|
|
- attach_workspace:
|
|
at: .
|
|
- run:
|
|
name: test:unit:global
|
|
command: yarn test:unit:global
|
|
|
|
validate-source-maps:
|
|
executor: node-browsers
|
|
steps:
|
|
- run: *shallow-git-clone
|
|
- attach_workspace:
|
|
at: .
|
|
- run:
|
|
name: Validate source maps
|
|
command: yarn validate-source-maps
|
|
|
|
validate-source-maps-beta:
|
|
executor: node-browsers
|
|
steps:
|
|
- run: *shallow-git-clone
|
|
- attach_workspace:
|
|
at: .
|
|
- run:
|
|
name: Validate source maps
|
|
command: |
|
|
.circleci/scripts/validate-source-maps-beta.sh
|
|
|
|
validate-source-maps-desktop:
|
|
executor: node-browsers
|
|
steps:
|
|
- run: *shallow-git-clone
|
|
- attach_workspace:
|
|
at: .
|
|
- run:
|
|
name: Move desktop build to dist
|
|
command: mv ./dist-desktop ./dist
|
|
- run:
|
|
name: Move desktop zips to builds
|
|
command: mv ./builds-desktop ./builds
|
|
- run:
|
|
name: Validate source maps
|
|
command: yarn validate-source-maps
|
|
|
|
validate-source-maps-mmi:
|
|
executor: node-browsers
|
|
steps:
|
|
- run: *shallow-git-clone
|
|
- attach_workspace:
|
|
at: .
|
|
- run:
|
|
name: Move mmi build to dist
|
|
command: mv ./dist-mmi ./dist
|
|
- run:
|
|
name: Move mmi zips to builds
|
|
command: mv ./builds-mmi ./builds
|
|
- run:
|
|
name: Validate source maps
|
|
command: yarn validate-source-maps
|
|
|
|
validate-source-maps-flask:
|
|
executor: node-browsers
|
|
steps:
|
|
- run: *shallow-git-clone
|
|
- attach_workspace:
|
|
at: .
|
|
- run:
|
|
name: Move flask build to dist
|
|
command: mv ./dist-flask ./dist
|
|
- run:
|
|
name: Move flask zips to builds
|
|
command: mv ./builds-flask ./builds
|
|
- run:
|
|
name: Validate source maps
|
|
command: yarn validate-source-maps
|
|
|
|
test-mozilla-lint:
|
|
executor: node-browsers
|
|
steps:
|
|
- run: *shallow-git-clone
|
|
- attach_workspace:
|
|
at: .
|
|
- run:
|
|
name: test:mozilla-lint
|
|
command: NODE_OPTIONS=--max_old_space_size=3072 yarn mozilla-lint
|
|
|
|
test-mozilla-lint-desktop:
|
|
executor: node-browsers
|
|
steps:
|
|
- run: *shallow-git-clone
|
|
- attach_workspace:
|
|
at: .
|
|
- run:
|
|
name: Move desktop build to dist
|
|
command: mv ./dist-desktop ./dist
|
|
- run:
|
|
name: Move desktop zips to builds
|
|
command: mv ./builds-desktop ./builds
|
|
- run:
|
|
name: test:mozilla-lint
|
|
command: NODE_OPTIONS=--max_old_space_size=3072 yarn mozilla-lint
|
|
|
|
test-mozilla-lint-flask:
|
|
executor: node-browsers
|
|
steps:
|
|
- run: *shallow-git-clone
|
|
- attach_workspace:
|
|
at: .
|
|
- run:
|
|
name: Move flask build to dist
|
|
command: mv ./dist-flask ./dist
|
|
- run:
|
|
name: Move flask zips to builds
|
|
command: mv ./builds-flask ./builds
|
|
- run:
|
|
name: test:mozilla-lint
|
|
command: NODE_OPTIONS=--max_old_space_size=3072 yarn mozilla-lint
|
|
|
|
all-tests-pass:
|
|
executor: node-browsers
|
|
steps:
|
|
- run:
|
|
name: All Tests Passed
|
|
command: echo 'weew - everything passed!'
|