version: 2.1 orbs: tokenbridge-orb: commands: install-chrome: steps: - run: name: Update dpkg command: | sudo apt-get clean sudo apt-get update sudo apt-get install dpkg - run: name: Install Chrome command: | wget -O chrome.deb https://dl.google.com/linux/chrome/deb/pool/main/g/google-chrome-stable/google-chrome-stable_77.0.3865.120-1_amd64.deb sudo dpkg -i chrome.deb install-node: steps: - run: name: Install Node command: | export NVM_DIR="/opt/circleci/.nvm" [ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh" nvm install 10.16.3 && nvm alias default 10.16.3 echo 'export NVM_DIR="/opt/circleci/.nvm"' >> $BASH_ENV echo ' [ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh"' >> $BASH_ENV install-yarn: steps: - run: name: Install Yarn command: | curl -sS https://dl.yarnpkg.com/debian/pubkey.gpg | sudo apt-key add - echo "deb https://dl.yarnpkg.com/debian/ stable main" | sudo tee /etc/apt/sources.list.d/yarn.list sudo apt-get update && sudo apt-get -y install yarn yarn-install-cached-on-machine: steps: - restore_cache: name: Restore Machine Yarn Package Cache keys: - yarn-machine-{{ checksum "package.json" }}-{{ checksum "yarn.lock" }} - run: name: Install npm dependencies using Yarn command: nvm use default; yarn install --frozen-lockfile - save_cache: name: Save Machine Yarn Package Cache key: yarn-machine-{{ checksum "package.json" }}-{{ checksum "yarn.lock" }} paths: - ~/.cache/yarn wait-for-oracle: parameters: redis-key: type: string steps: - run: name: Install redis tools command: sudo apt-get install -y redis-tools - run: name: Wait for the Oracle to start command: | set +e i=0 while [[ $(redis-cli GET << parameters.redis-key >> ) ]]; do ((i++)) if [ "$i" -gt 30 ] then exit -1 fi echo "Sleeping..." sleep 3 done executors: docker-node: docker: - image: circleci/node:10.15 machine-with-docker-caching: machine: image: circleci/classic:latest docker_layer_caching: true jobs: initialize: executor: tokenbridge-orb/docker-node steps: - checkout - run: git submodule update --init - restore_cache: name: Restore Yarn Package Cache keys: - yarn-{{ checksum "package.json" }}-{{ checksum "yarn.lock" }} - run: git submodule status > submodule.status - restore_cache: name: Restore contracts submodule with compiled contracts keys: - contracts-{{ checksum "submodule.status" }} - run: yarn install --frozen-lockfile - save_cache: name: Save Yarn Package Cache key: yarn-{{ checksum "package.json" }}-{{ checksum "yarn.lock" }} paths: - ~/.cache/yarn - run: touch install_deploy.log; test -d contracts/build/contracts || yarn install:deploy &> install_deploy.log - store_artifacts: path: install_deploy.log - run: test -d contracts/build/contracts || yarn compile:contracts - save_cache: name: Save contracts submodule with compiled contracts key: contracts-{{ checksum "submodule.status" }} paths: - contracts - save_cache: name: Save initialized project for subsequent jobs key: initialize-{{ .Environment.CIRCLE_SHA1 }} paths: - ~/project initialize-root: executor: tokenbridge-orb/docker-node steps: - checkout - run: sudo su - -c 'export CI=true && cd /home/circleci/project && yarn initialize && yarn test' build: executor: tokenbridge-orb/docker-node steps: - restore_cache: key: initialize-{{ .Environment.CIRCLE_SHA1 }} - run: yarn run build lint: executor: tokenbridge-orb/docker-node steps: - restore_cache: key: initialize-{{ .Environment.CIRCLE_SHA1 }} - run: yarn run lint test: executor: tokenbridge-orb/docker-node steps: - restore_cache: key: initialize-{{ .Environment.CIRCLE_SHA1 }} - run: yarn run test oracle-e2e: executor: tokenbridge-orb/docker-node steps: - checkout - run: git submodule update --init - setup_remote_docker: docker_layer_caching: true - run: yarn run oracle-e2e ui-e2e: executor: tokenbridge-orb/machine-with-docker-caching steps: - checkout - tokenbridge-orb/install-node - tokenbridge-orb/install-yarn - tokenbridge-orb/install-chrome - run: git submodule update --init - tokenbridge-orb/yarn-install-cached-on-machine - run: yarn run ui-e2e monitor-e2e: executor: tokenbridge-orb/machine-with-docker-caching steps: - checkout - run: git submodule update --init - run: ./monitor-e2e/run-tests.sh cover: executor: tokenbridge-orb/docker-node steps: - restore_cache: key: initialize-{{ .Environment.CIRCLE_SHA1 }} - run: yarn workspace ui run coverage - run: yarn workspace ui run coveralls deployment-oracle: executor: tokenbridge-orb/machine-with-docker-caching steps: - checkout - run: git submodule update --init - run: name: Run the scenario command: deployment-e2e/molecule.sh oracle no_output_timeout: 40m deployment-ui: executor: tokenbridge-orb/machine-with-docker-caching steps: - checkout - run: git submodule update --init - run: name: Run the scenario command: deployment-e2e/molecule.sh ui no_output_timeout: 40m deployment-monitor: executor: tokenbridge-orb/machine-with-docker-caching steps: - checkout - run: git submodule update --init - run: name: Run the scenario command: deployment-e2e/molecule.sh monitor no_output_timeout: 40m deployment-repo: executor: tokenbridge-orb/machine-with-docker-caching steps: - checkout - run: git submodule update --init - tokenbridge-orb/install-node - tokenbridge-orb/install-yarn - tokenbridge-orb/yarn-install-cached-on-machine - run: name: Run the scenario command: deployment-e2e/molecule.sh repo no_output_timeout: 40m deployment-multiple: executor: tokenbridge-orb/machine-with-docker-caching steps: - checkout - run: git submodule update --init - run: name: Run the scenario command: deployment-e2e/molecule.sh multiple no_output_timeout: 40m ultimate: executor: tokenbridge-orb/machine-with-docker-caching parameters: scenario-name: description: "Molecule scenario name used to create the infrastructure" type: string redis-key: description: "Redis key checked for non-emptiness to assert if Oracle is running" type: string ui-e2e-grep: description: "Mocha grep string used to run ui-e2e tests specific to given type of bridge" default: '' type: string oracle-e2e-script: description: "Yarn script string used to run oracle-e2e tests specific to given type of bridge" default: '' type: string steps: - checkout - run: git submodule update --init - tokenbridge-orb/install-node - tokenbridge-orb/install-chrome - tokenbridge-orb/install-yarn - tokenbridge-orb/yarn-install-cached-on-machine - run: name: Prepare the infrastructure command: e2e-commons/up.sh deploy << parameters.scenario-name >> blocks no_output_timeout: 50m - tokenbridge-orb/wait-for-oracle: redis-key: << parameters.redis-key >> - when: condition: << parameters.ui-e2e-grep >> steps: - run: name: Run the ui-e2e tests command: | nvm use default; cd ui-e2e; yarn mocha -g "<< parameters.ui-e2e-grep >>" -b ./test.js - when: condition: << parameters.oracle-e2e-script >> steps: - run: name: Run the oracle-e2e tests command: cd e2e-commons && docker-compose run e2e yarn workspace oracle-e2e run << parameters.oracle-e2e-script >> workflows: tokenbridge: jobs: - initialize - initialize-root: filters: branches: only: master - build: requires: - initialize - lint: requires: - initialize - test: requires: - initialize - cover: requires: - initialize filters: branches: only: master - oracle-e2e - ui-e2e - monitor-e2e - deployment-oracle - deployment-ui - deployment-monitor - deployment-repo - deployment-multiple - ultimate: name: "ultimate: native to erc" scenario-name: native-to-erc redis-key: native-erc-collected-signatures:lastProcessedBlock ui-e2e-grep: "NATIVE TO ERC" - ultimate: name: "ultimate: erc to native" scenario-name: erc-to-native redis-key: erc-native-collected-signatures:lastProcessedBlock ui-e2e-grep: "ERC TO NATIVE" - ultimate: name: "ultimate: erc to erc" scenario-name: erc-to-erc redis-key: erc-erc-collected-signatures:lastProcessedBlock ui-e2e-grep: "ERC TO ERC" - ultimate: name: "ultimate: amb" scenario-name: amb redis-key: amb-collected-signatures:lastProcessedBlock oracle-e2e-script: "amb" - ultimate: name: "ultimate: amb stake erc to erc" scenario-name: ultimate-amb-stake-erc-to-erc redis-key: amb-collected-signatures:lastProcessedBlock ui-e2e-grep: "AMB-STAKE-ERC-TO-ERC"