mirror of
https://github.com/kremalicious/metamask-extension.git
synced 2024-11-22 18:00:18 +01:00
88212a7c82
The CI job `test-deps-depcheck` was optional, allowing PRs to be merged that included dependency errors. It is now a required job, ensuring that no such errors are introduced in the future.
1429 lines
41 KiB
YAML
1429 lines
41 KiB
YAML
version: 2.1
|
|
|
|
executors:
|
|
node-browsers:
|
|
docker:
|
|
- image: cimg/node:18.17-browsers
|
|
node-browsers-medium-plus:
|
|
docker:
|
|
- image: cimg/node:18.17-browsers
|
|
resource_class: medium+
|
|
environment:
|
|
NODE_OPTIONS: --max_old_space_size=2048
|
|
node-browsers-large:
|
|
docker:
|
|
- image: cimg/node:18.17-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-rpc:
|
|
requires:
|
|
- prep-build-test
|
|
- test-e2e-chrome-snaps:
|
|
requires:
|
|
- prep-build-test
|
|
- test-e2e-firefox-snaps:
|
|
requires:
|
|
- prep-build-test
|
|
- test-e2e-chrome-snaps-flask:
|
|
requires:
|
|
- prep-build-test-flask
|
|
- test-e2e-firefox-snaps-flask:
|
|
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:
|
|
- test-deps-depcheck
|
|
- 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
|
|
- run:
|
|
name: check yarn resolutions
|
|
command: yarn --check-resolutions
|
|
|
|
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: yarn audit
|
|
|
|
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-chrome-rpc:
|
|
executor: node-browsers
|
|
parallelism: 1
|
|
steps:
|
|
- checkout
|
|
- 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:rpc
|
|
command: |
|
|
if .circleci/scripts/test-run-e2e.sh
|
|
then
|
|
yarn test:e2e:chrome:rpc --retries 2
|
|
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-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 ./dist
|
|
- run:
|
|
name: Move test zips to builds
|
|
command: mv ./builds-test ./builds
|
|
- run:
|
|
name: test:e2e:firefox:snaps
|
|
command: |
|
|
if .circleci/scripts/test-run-e2e.sh
|
|
then
|
|
yarn test:e2e:firefox:snaps --retries 2 --debug --build-type=main
|
|
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 ./dist
|
|
- run:
|
|
name: Move test zips to builds
|
|
command: mv ./builds-test ./builds
|
|
- run:
|
|
name: test:e2e:chrome:snaps
|
|
command: |
|
|
if .circleci/scripts/test-run-e2e.sh
|
|
then
|
|
yarn test:e2e:chrome:snaps --retries 2 --debug --build-type=main
|
|
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-snaps-flask:
|
|
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-flask:
|
|
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!'
|