300 lines
9.7 KiB
YAML
300 lines
9.7 KiB
YAML
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"
|
|
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 >>
|
|
no_output_timeout: 50m
|
|
- tokenbridge-orb/wait-for-oracle:
|
|
redis-key: << parameters.redis-key >>
|
|
- run:
|
|
name: Run the ui-e2e tests
|
|
command: |
|
|
nvm use default;
|
|
node ./e2e-commons/scripts/blocks.js &
|
|
cd ui-e2e; yarn mocha -g "<< parameters.ui-e2e-grep >>" -b ./test.js
|
|
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"
|