diff --git a/.github/matic-cli-config.yml b/.github/matic-cli-config.yml new file mode 100644 index 0000000000..f643f4b192 --- /dev/null +++ b/.github/matic-cli-config.yml @@ -0,0 +1,11 @@ +defaultStake: 10000 +defaultFee: 2000 +borChainId: "15001" +heimdallChainId: heimdall-15001 +contractsBranch: jc/v0.3.1-backport +numOfValidators: 3 +numOfNonValidators: 0 +ethURL: http://ganache:9545 +devnetType: docker +borDockerBuildContext: "../../bor" +heimdallDockerBuildContext: "https://github.com/maticnetwork/heimdall.git#v0.3.0-dev" \ No newline at end of file diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 72647b56eb..65a88ec3c3 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -3,6 +3,8 @@ on: push: branches: - "master" + - "qa" + - "develop" pull_request: branches: - "**" @@ -77,4 +79,106 @@ jobs: - name: Upload coverage to Codecov uses: codecov/codecov-action@v1 with: - file: ./cover.out \ No newline at end of file + file: ./cover.out + + integration-tests: + if: (github.event.action != 'closed' || github.event.pull_request.merged == true) + strategy: + matrix: + os: [ ubuntu-20.04 ] # list of os: https://github.com/actions/virtual-environments + runs-on: ${{ matrix.os }} + steps: + - uses: actions/checkout@v3 + with: + path: bor + - name: Checkout submodules + run: | + cd bor + git submodule update --init --recursive --force + git fetch --no-tags --prune --depth=1 origin +refs/heads/master:refs/remotes/origin/master + + - uses: actions/setup-go@v3 + with: + go-version: 1.18.x + + - name: Checkout matic-cli + uses: actions/checkout@v3 + with: + repository: maticnetwork/matic-cli + ref: v0.3.0-dev + path: matic-cli + + - name: Install dependencies on Linux + if: runner.os == 'Linux' + run: | + sudo apt update + sudo apt install build-essential + curl https://raw.githubusercontent.com/creationix/nvm/master/install.sh | bash + sudo snap install solc + sudo apt install python2 jq curl + sudo ln -sf /usr/bin/python2 /usr/bin/python + + - uses: actions/setup-node@v3 + with: + node-version: '10.17.0' + cache: 'npm' + cache-dependency-path: | + matic-cli/package-lock.json + matic-cli/devnet/code/contracts/package-lock.json + matic-cli/devnet/code/genesis-contracts/package-lock.json + matic-cli/devnet/code/genesis-contracts/matic-contracts/package-lock.json + + - name: Bootstrap devnet + run: | + cd matic-cli + npm install --prefer-offline --no-audit --progress=false + mkdir devnet + cd devnet + ../bin/matic-cli setup devnet -c ../../bor/.github/matic-cli-config.yml + + - name: Launch devnet + run: | + cd matic-cli/devnet + bash docker-ganache-start.sh + bash docker-heimdall-start-all.sh + bash docker-bor-setup.sh + bash docker-bor-start-all.sh + sleep 120 && bash ganache-deployment-bor.sh + sleep 120 && bash ganache-deployment-sync.sh + sleep 120 + docker exec bor0 bash -c "bor attach /root/.bor/data/bor.ipc -exec 'admin.peers'" + docker exec bor0 bash -c "bor attach /root/.bor/data/bor.ipc -exec 'eth.blockNumber'" + + - name: Run smoke tests + run: | + echo "Deposit 100 matic for each account to bor network" + cd matic-cli/devnet/code/contracts + npm run truffle exec scripts/deposit.js -- --network development $(jq -r .root.tokens.MaticToken contractAddresses.json) 100000000000000000000 + cd - + bash bor/integration-tests/smoke_test.sh + + - name: Upload logs + if: always() + uses: actions/upload-artifact@v3 + with: + name: logs_${{ github.run_id }} + path: | + matic-cli/devnet/logs + + - name: Package code and chain data + if: always() + run: | + cd matic-cli/devnet + docker compose down + cd - + mkdir -p ${{ github.run_id }}/matic-cli + sudo mv bor ${{ github.run_id }} + sudo mv matic-cli/devnet ${{ github.run_id }}/matic-cli + sudo tar czf code.tar.gz ${{ github.run_id }} + + - name: Upload code and chain data + if: always() + uses: actions/upload-artifact@v3 + with: + name: code_${{ github.run_id }} + path: code.tar.gz diff --git a/integration-tests/smoke_test.sh b/integration-tests/smoke_test.sh new file mode 100644 index 0000000000..6f41aa5c16 --- /dev/null +++ b/integration-tests/smoke_test.sh @@ -0,0 +1,33 @@ +#!/bin/bash +set -e + +delay=600 + +echo "Wait ${delay} seconds for state-sync..." +sleep $delay + + +balance=$(docker exec bor0 bash -c "bor attach /root/.bor/data/bor.ipc -exec 'Math.round(web3.fromWei(eth.getBalance(eth.accounts[0])))'") + +if ! [[ "$balance" =~ ^[0-9]+$ ]]; then + echo "Something is wrong! Can't find the balance of first account in bor network." + exit 1 +fi + +echo "Found matic balance on account[0]: " $balance + +if (( $balance <= 1001 )); then + echo "Balance in bor network has not increased. This indicates that something is wrong with state sync." + exit 1 +fi + +checkpointID=$(curl -sL http://localhost:1317/checkpoints/latest | jq .result.id) + +if [ $checkpointID == "null" ]; then + echo "Something is wrong! Could not find any checkpoint." + exit 1 +else + echo "Found checkpoint ID:" $checkpointID +fi + +echo "All tests have passed!" \ No newline at end of file