1
0
mirror of https://github.com/kremalicious/metamask-extension.git synced 2024-10-22 11:22:43 +02:00
metamask-extension/.circleci/config.yml
Mark Stacey 550fba2466
Add benchmark to CI (#7871)
* Add benchmark to CI

The page load benchmark for Chrome is now run during CI, and the
results are collected and summarized in the `metamaskbot` comment.

Closes #6881

* Double default number of samples

The number of default samples was changed from 10 to 20. The results
from 10 samples would show statistically significant changes in page
load times between builds, so weren't a sufficiently useful metric.
2020-01-23 16:55:17 -04:00

434 lines
11 KiB
YAML

version: 2.1
workflows:
test_and_release:
jobs:
- create_release_pull_request:
filters:
branches:
only:
- /^Version-v(\d+)[.](\d+)[.](\d+)/
- prep-deps
- test-deps
- prep-build:
requires:
- prep-deps
- prep-build-test:
requires:
- prep-deps
# - prep-docs:
# requires:
# - prep-deps
- prep-scss:
requires:
- prep-deps
- test-lint:
requires:
- prep-deps
- test-lint-shellcheck
- test-lint-lockfile:
requires:
- prep-deps
- test-e2e-chrome:
requires:
- prep-build-test
- test-e2e-firefox:
requires:
- prep-build-test
- test-unit:
requires:
- prep-deps
- test-unit-global:
requires:
- prep-deps
- test-mozilla-lint:
requires:
- prep-deps
- prep-build
- test-integration-flat-chrome:
requires:
- prep-deps
- prep-scss
- test-integration-flat-firefox:
requires:
- prep-deps
- prep-scss
- all-tests-pass:
requires:
- test-lint
- test-lint-shellcheck
- test-lint-lockfile
- test-unit
- test-unit-global
- test-mozilla-lint
- test-e2e-chrome
- test-e2e-firefox
- test-integration-flat-chrome
- test-integration-flat-firefox
- benchmark:
requires:
- prep-build-test
- job-publish-prerelease:
requires:
- prep-deps
- prep-build
- benchmark
- all-tests-pass
- job-publish-release:
filters:
branches:
only: master
requires:
- prep-deps
- prep-build
# - prep-docs
- all-tests-pass
- coveralls-upload:
requires:
- test-unit
jobs:
create_release_pull_request:
docker:
- image: circleci/node:10.17-browsers
steps:
- checkout
- run:
name: Create GitHub Pull Request for version
command: |
.circleci/scripts/release-bump-changelog-version
.circleci/scripts/release-bump-manifest-version
.circleci/scripts/release-create-release-pr
prep-deps:
docker:
- image: circleci/node:10.17-browsers
steps:
- checkout
- run:
name: Install deps
command: |
.circleci/scripts/deps-install.sh
- run:
name: Collect yarn install HAR logs
command: |
.circleci/scripts/collect-har-artifact.sh
- persist_to_workspace:
root: .
paths:
- node_modules
- build-artifacts
prep-build:
docker:
- image: circleci/node:10.17-browsers
steps:
- checkout
- attach_workspace:
at: .
- run:
name: build:dist
command: yarn dist
- run:
name: build:debug
command: find dist/ -type f -exec md5sum {} \; | sort -k 2
- persist_to_workspace:
root: .
paths:
- dist
- builds
prep-build-test:
docker:
- image: circleci/node:10.16-browsers
steps:
- checkout
- 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
- persist_to_workspace:
root: .
paths:
- dist-test
prep-docs:
docker:
- image: circleci/node:10.17-browsers
steps:
- checkout
- attach_workspace:
at: .
- run:
name: build:dist
command: yarn doc
- persist_to_workspace:
root: .
paths:
- docs/jsdocs
prep-scss:
docker:
- image: circleci/node:10.17-browsers
steps:
- checkout
- attach_workspace:
at: .
- run:
name: Get Scss Cache key
# this allows us to checksum against a whole directory
command: find ui/app/css -type f -exec md5sum {} \; | sort -k 2 > scss_checksum
- run:
name: Build for integration tests
command: yarn test:integration:build
- persist_to_workspace:
root: .
paths:
- ui/app/css/output
test-lint:
docker:
- image: circleci/node:10.17-browsers
steps:
- checkout
- attach_workspace:
at: .
- run:
name: Lint
command: yarn lint
- run:
name: Verify locales
command: yarn verify-locales --quiet
test-lint-shellcheck:
docker:
- image: circleci/node:10.17-browsers
steps:
- checkout
- run: sudo apt-get install shellcheck
- run:
name: Shellcheck Lint
command: yarn lint:shellcheck
test-lint-lockfile:
docker:
- image: circleci/node:10.17-browsers
steps:
- checkout
- attach_workspace:
at: .
- run:
name: lockfile-lint
command: yarn lint:lockfile
test-deps:
docker:
- image: circleci/node:10.17-browsers
steps:
- checkout
- attach_workspace:
at: .
- run:
name: yarn audit
command: .circleci/scripts/yarn-audit
test-e2e-chrome:
docker:
- image: circleci/node:10.17-browsers
steps:
- checkout
- attach_workspace:
at: .
- run:
name: Move test build to dist
command: mv ./dist-test ./dist
- run:
name: test:e2e:chrome
command: yarn test:e2e:chrome
no_output_timeout: 20m
- store_artifacts:
path: test-artifacts
destination: test-artifacts
test-e2e-firefox:
docker:
- image: circleci/node:10.17-browsers
steps:
- checkout
- run:
name: Install Firefox
command: ./.circleci/scripts/firefox-install
- attach_workspace:
at: .
- run:
name: Move test build to dist
command: mv ./dist-test ./dist
- run:
name: test:e2e:firefox
command: yarn test:e2e:firefox
no_output_timeout: 20m
- store_artifacts:
path: test-artifacts
destination: test-artifacts
benchmark:
docker:
- image: circleci/node:10.17-browsers
steps:
- checkout
- attach_workspace:
at: .
- run:
name: Move test build to dist
command: mv ./dist-test ./dist
- run:
name: Run page load benchmark
command: yarn benchmark:chrome --out test-artifacts/chrome/benchmark/pageload.json
- store_artifacts:
path: test-artifacts
destination: test-artifacts
- persist_to_workspace:
root: .
paths:
- test-artifacts
job-publish-prerelease:
docker:
- image: circleci/node:10.17-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: builds
destination: builds
- store_artifacts:
path: test-artifacts
destination: test-artifacts
# important: generate sesify viz AFTER uploading builds as artifacts
- run:
name: build:sesify-viz
command: ./.circleci/scripts/create-sesify-viz
- store_artifacts:
path: build-artifacts
destination: build-artifacts
- run:
name: build:announce
command: ./development/metamaskbot-build-announce.js
job-publish-release:
docker:
- image: circleci/node:10.17-browsers
steps:
- checkout
- attach_workspace:
at: .
- run:
name: sentry sourcemaps upload
command: yarn sentry:publish
- run:
name: Create GitHub release
command: |
.circleci/scripts/release-create-gh-release
- run:
name: Create GitHub Pull Request to sync master with develop
command: .circleci/scripts/release-create-master-pr
# - run:
# name: github gh-pages docs publish
# command: >
# git config --global user.name "metamaskbot" &&
# git config --global user.email "admin@metamask.io" &&
# yarn publish-docs
test-unit:
docker:
- image: circleci/node:10.17-browsers
steps:
- checkout
- attach_workspace:
at: .
- run:
name: test:coverage
command: yarn test:coverage
- persist_to_workspace:
root: .
paths:
- .nyc_output
- coverage
test-unit-global:
docker:
- image: circleci/node:10.17-browsers
steps:
- checkout
- attach_workspace:
at: .
- run:
name: test:unit:global
command: yarn test:unit:global
test-mozilla-lint:
docker:
- image: circleci/node:10.17-browsers
steps:
- checkout
- attach_workspace:
at: .
- run:
name: test:mozilla-lint
command: NODE_OPTIONS=--max_old_space_size=3072 yarn mozilla-lint
test-integration-flat-firefox:
docker:
- image: circleci/node:10.17-browsers
steps:
- checkout
- attach_workspace:
at: .
- run:
name: Install Firefox
command: ./.circleci/scripts/firefox-install
- run:
name: test:integration:flat
command: yarn test:flat
test-integration-flat-chrome:
environment:
browsers: '["Chrome"]'
docker:
- image: circleci/node:10.17-browsers
steps:
- checkout
- attach_workspace:
at: .
- run:
name: test:integration:flat
command: yarn test:flat
all-tests-pass:
docker:
- image: circleci/node:10.17-browsers
steps:
- run:
name: All Tests Passed
command: echo 'weew - everything passed!'
coveralls-upload:
docker:
- image: circleci/node:10.17-browsers
steps:
- checkout
- attach_workspace:
at: .
- run:
name: Coveralls upload
command: yarn test:coveralls-upload