diff --git a/.circleci/config.yml b/.circleci/config.yml new file mode 100644 index 000000000..69084af79 --- /dev/null +++ b/.circleci/config.yml @@ -0,0 +1,82 @@ +version: 2 +# 2.1 does not yet support local run +# unless with workaround. For simplicity just use it. +# https://github.com/CircleCI-Public/circleci-cli/issues/79 + +aliases: + - &defaults + docker: + - image: circleci/node:8 + + - &npm_install_if_necessary + run: + name: Install npm dependencies + command: | + if [ ! -d node_modules ]; then + npm ci + fi + + - &cache_key_node_modules + key: v1-node_modules-{{ checksum "package-lock.json" }} + +jobs: + dependencies: + <<: *defaults + steps: + - checkout + - restore_cache: + <<: *cache_key_node_modules + - *npm_install_if_necessary + - save_cache: + paths: + - node_modules + <<: *cache_key_node_modules + + lint: + <<: *defaults + steps: + - checkout + - restore_cache: + <<: *cache_key_node_modules + - *npm_install_if_necessary + - run: + name: Linter + command: npm run lint + test: + <<: *defaults + steps: + - checkout + - restore_cache: + <<: *cache_key_node_modules + - *npm_install_if_necessary + - run: + name: Unit tests + command: npm run test + coverage: + docker: + - image: circleci/node:8 + steps: + - checkout + - restore_cache: + <<: *cache_key_node_modules + - *npm_install_if_necessary + - run: + name: Unit tests with coverage report + command: npm run coverage + + # TODO(xinbenlv, #1839): run SOLC_NIGHTLY to be run but allow it to fail. + +workflows: + version: 2 + everything: + jobs: + - dependencies + - lint: + requires: + - dependencies + - test: + requires: + - dependencies + - coverage: + requires: + - dependencies diff --git a/.travis.yml b/.travis.yml deleted file mode 100644 index fc6fc14cf..000000000 --- a/.travis.yml +++ /dev/null @@ -1,53 +0,0 @@ -dist: trusty -sudo: false -group: beta -language: node_js -node_js: - - "8" - -cache: - directories: - - node_modules - -jobs: - # XXX fast_finish doesn't work with stages yet. See - # https://github.com/travis-ci/travis-ci/issues/8425 - # --elopio - 20180531 - fast_finish: true - allow_failures: - - env: SOLC_NIGHTLY=true - include: - - stage: tests - name: "Linter" - script: npm run lint - - - stage: tests - name: "Unit tests" - script: npm run test - - - stage: tests - name: "Unit tests with coverage report" - script: npm run test - env: SOLIDITY_COVERAGE=true - - - stage: tests - name: "Unit tests using solc nightly" - script: npm run test - env: SOLC_NIGHTLY=true - - - stage: update docs - if: tag =~ ^v[0-9]+\.[0-9]+\.[0-9]+$ - addons: - apt: - packages: - - curl - script: - - ./scripts/ci/trigger_docs_update "${TRAVIS_TAG}" - -notifications: - slack: - rooms: - - secure: uEhwUkuwJp5pBNh+VTEytPHz3FDKsnPrKO+8MTAKv5hKi4PCRoVhLv6pklr82HUpL6pvSvJbUPA0HVebOXA+MMSxdny/BHZTh2mtw5Y78l2Ad0svDTWuV2Lus2pmhYigRhT0Wo00/SRX9+pxm0kg4EIFJSTS+uR9G76x0l9NljpEGXrqxlDxjxoHBgk8Ciru2LHaLzX/utE3jlABts4Sb1F3wc2BwFkjd6BDCRTGAPhVJwwFk41ZfnmLVbgSNUyk46Cb38oG5oXHb0FI3d3jV/k1OUhRyFfmA2fLXRk0wavibW8TG1gGJJWZ7xTCKzw/Cvup6mpehSAeQef8eekMdjpWEhF9hYRq1BvOs0384UU8NQ0O+BtdXU+X3Nyr84TMJN/iIfgN7gYX7AsvXH3jC0JfNUcIkWlJvyXdE6l2GV1hMmhL09GFEBbSpuSXRIWlOXTcYBlp5NbvE8xO8PUW+T6N5RG2XXjv1g8wCpr6Wwk1+LmRkX5trv8MFBZ2pM8p4H5da5++Ov8egLonNGK2jbx6aBLBX3tPf+g70LZEkiQ4eBfZw8VIgXIvKreisicppNuCD27gNmSEPNt0NkwiEBcTCJ9GSVAO0CU2g4ggvHDX2A+RW5XPET9bGkBXKLfFyV7Qe+MSQjXkCnW3bIRh7Wo1V31XiUiYOLuZPIiH3EQ= - on_success: change - on_failure: always - on_pull_requests: false diff --git a/scripts/coverage.sh b/scripts/coverage.sh index 8a50f77b4..8a8e68176 100755 --- a/scripts/coverage.sh +++ b/scripts/coverage.sh @@ -1,3 +1,9 @@ #!/usr/bin/env bash +set -o errexit + SOLIDITY_COVERAGE=true scripts/test.sh + +if [ "$CI" = true ]; then + curl -s https://codecov.io/bash | bash -s -- -C "$CIRCLE_SHA1" +fi diff --git a/scripts/test.sh b/scripts/test.sh index 1d81379f4..ad095426a 100755 --- a/scripts/test.sh +++ b/scripts/test.sh @@ -39,12 +39,20 @@ start_ganache() { ) if [ "$SOLIDITY_COVERAGE" = true ]; then - node_modules/.bin/testrpc-sc --gasLimit 0xfffffffffff --port "$ganache_port" "${accounts[@]}" > /dev/null & + npx ganache-cli-coverage --emitFreeLogs true --allowUnlimitedContractSize true --gasLimit 0xfffffffffff --port "$ganache_port" "${accounts[@]}" > /dev/null & else - node_modules/.bin/ganache-cli --gasLimit 0xfffffffffff "${accounts[@]}" > /dev/null & + npx ganache-cli --gasLimit 0xfffffffffff --port "$ganache_port" "${accounts[@]}" > /dev/null & fi ganache_pid=$! + + echo "Waiting for ganache to launch on port "$ganache_port"..." + + while ! ganache_running; do + sleep 0.1 # wait for 1/10 of the second before check again + done + + echo "Ganache launched!" } if ganache_running; then @@ -54,19 +62,10 @@ else start_ganache fi -if [ "$SOLC_NIGHTLY" = true ]; then - echo "Downloading solc nightly" - wget -q https://raw.githubusercontent.com/ethereum/solc-bin/gh-pages/bin/soljson-nightly.js -O /tmp/soljson.js && find . -name soljson.js -exec cp /tmp/soljson.js {} \; -fi - -truffle version +npx truffle version if [ "$SOLIDITY_COVERAGE" = true ]; then - node_modules/.bin/solidity-coverage - - if [ "$CONTINUOUS_INTEGRATION" = true ]; then - cat coverage/lcov.info | node_modules/.bin/coveralls - fi + npx solidity-coverage else - node_modules/.bin/truffle test "$@" + npx truffle test "$@" fi