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-rpc: 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-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-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!'