From 37f50ff6dbbd1e52cd5e781d7850f2101e39682a Mon Sep 17 00:00:00 2001 From: Arugula Bowl <40344058+arugulaBowl@users.noreply.github.com> Date: Sat, 7 Jul 2018 17:46:04 +0200 Subject: [PATCH] Speed up travis builds: enable ccache, cache cargo and reduce test timeouts (#957) * Do not hang trying to upload to docker in unofficial repos docker push hung asking for a password if the password environment variable was not set. With this change it fails immediately. * Enable ccache on linux and osx * Cache homebrew downloads This does not avoid the compilation of the homebrew packages but stores the downloaded sources, speeding up the installation process. * Enable cargo caching * Cache load-tester cargo binaries * Reduce default timeout per test suite to 120 seconds One of the tests hangs in the CI system, reducing the timeout to have quicker feedback. It can be re-adjusted in the future if 120 is not enough for a successful run. --- .travis.yml | 15 +++++++++++++-- CMakeLists.txt | 2 +- ci/build-travis.sh | 1 + ci/deploy-docker.sh | 2 +- ci/test.sh | 7 ++++--- 5 files changed, 20 insertions(+), 7 deletions(-) diff --git a/.travis.yml b/.travis.yml index 765c66e6..76537aeb 100644 --- a/.travis.yml +++ b/.travis.yml @@ -17,16 +17,27 @@ matrix: compiler: - clang +cache: + - ccache: true + - directories: + - $HOME/Library/Caches/Homebrew + - $HOME/.cargo + - $TRAVIS_BUILD_DIR/load-tester/target + before_install: - - if [ "$TRAVIS_OS_NAME" = "linux" ]; then sudo mkdir -p /etc/docker && echo '{"ipv6":true,"fixed-cidr-v6":"2001:db8:1::/64"}' | sudo tee /etc/docker/daemon.json && sudo service docker restart; fi - if [ "$TRAVIS_OS_NAME" = "osx" ]; then brew update && brew install qt5 && brew cask install xquartz && brew upgrade boost && brew install rust; fi + - if [ "$TRAVIS_OS_NAME" = "linux" ]; then sudo mkdir -p /etc/docker && echo '{"ipv6":true,"fixed-cidr-v6":"2001:db8:1::/64"}' | sudo tee /etc/docker/daemon.json && sudo service docker restart; fi - if [ "$TRAVIS_OS_NAME" = "linux" ]; then ci/build-docker-image.sh docker/ci/Dockerfile nanocurrency/nano-ci; fi +install: + - if [ "$TRAVIS_OS_NAME" = "osx" ]; then brew install ccache; fi + - if [ "$TRAVIS_OS_NAME" = "osx" ]; then export PATH="/usr/local/opt/ccache/libexec:$PATH"; fi + script: - if [ -n "$ONE_TIME_TESTS" ]; then ci/check-commit-format.sh; fi - if [ -n "$ONE_TIME_TESTS" ]; then doxygen doxygen.config; fi # TODO also deploy the built HTML - if [ "$TRAVIS_OS_NAME" = "osx" ]; then ci/build-travis.sh "/usr/local/opt/qt5/lib/cmake/Qt5"; fi - - if [ "$TRAVIS_OS_NAME" = "linux" ]; then docker run -v $TRAVIS_BUILD_DIR:/workspace nanocurrency/nano-ci /bin/bash -c "cd /workspace && ASAN=${ASAN} TSAN=${TSAN} ./ci/build-travis.sh /usr/lib/x86_64-linux-gnu/cmake/Qt5 ${PWD}"; fi + - if [ "$TRAVIS_OS_NAME" = "linux" ]; then docker run -v $TRAVIS_BUILD_DIR:/workspace -v $HOME/.ccache:/ccache -v $HOME/.cargo:/cargo nanocurrency/nano-ci /bin/bash -c "apt install ccache; cd /workspace && ASAN=${ASAN} TSAN=${TSAN} CCACHE_DIR=/ccache CARGO_HOME=/cargo ./ci/build-travis.sh /usr/lib/x86_64-linux-gnu/cmake/Qt5 ${PWD}"; fi deploy: provider: script diff --git a/CMakeLists.txt b/CMakeLists.txt index 65882020..36b90d15 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,4 +1,4 @@ -cmake_minimum_required (VERSION 2.8.11) +cmake_minimum_required (VERSION 3.4) project (rai) set (CPACK_PACKAGE_VERSION_MAJOR "15") diff --git a/ci/build-travis.sh b/ci/build-travis.sh index 6189c723..aacc7222 100755 --- a/ci/build-travis.sh +++ b/ci/build-travis.sh @@ -30,6 +30,7 @@ cmake \ -DCMAKE_VERBOSE_MAKEFILE=ON \ -DBOOST_ROOT=/usr/local \ -DQt5_DIR=${qt_dir} \ + -DCMAKE_CXX_COMPILER_LAUNCHER=ccache \ ${SANITIZERS} \ .. diff --git a/ci/deploy-docker.sh b/ci/deploy-docker.sh index 39fb1f7d..bf6ab6c5 100755 --- a/ci/deploy-docker.sh +++ b/ci/deploy-docker.sh @@ -3,7 +3,7 @@ set -e scripts="$(dirname "$0")" -docker login -u nanocurrency -p "$DOCKER_PASSWORD" +echo "$DOCKER_PASSWORD" | docker login -u nanocurrency --password-stdin # We push this just so it can be a cache next time if [ "$TRAVIS_BRANCH" = "master" ]; then diff --git a/ci/test.sh b/ci/test.sh index 9be77131..ce8c64dc 100755 --- a/ci/test.sh +++ b/ci/test.sh @@ -1,6 +1,7 @@ #!/usr/bin/env bash build_dir=${1-${PWD}} +TIMEOUT_DEFAULT=120 BUSYBOX_BASH=${BUSYBOX_BASH-0} @@ -25,7 +26,7 @@ xvfb_run_() { Xvfb :2 -screen 0 1024x768x24 & xvfb_pid=$! sleep ${INIT_DELAY_SEC} - DISPLAY=:2 ${TIMEOUT_CMD} ${TIMEOUT_TIME_ARG} ${TIMEOUT_SEC-420} $@ + DISPLAY=:2 ${TIMEOUT_CMD} ${TIMEOUT_TIME_ARG} ${TIMEOUT_SEC-${TIMEOUT_DEFAULT}} $@ res=${?} kill ${xvfb_pid} @@ -41,13 +42,13 @@ run_tests() { TIMEOUT_TIME_ARG="" fi - ${TIMEOUT_CMD} ${TIMEOUT_TIME_ARG} ${TIMEOUT_SEC-420} ./core_test + ${TIMEOUT_CMD} ${TIMEOUT_TIME_ARG} ${TIMEOUT_SEC-${TIMEOUT_DEFAULT}} ./core_test core_test_res=${?} xvfb_run_ ./qt_test qt_test_res=${?} - ${TIMEOUT_CMD} ${TIMEOUT_TIME_ARG} ${TIMEOUT_SEC-420} ./load_test ./rai_node -s 150 + ${TIMEOUT_CMD} ${TIMEOUT_TIME_ARG} ${TIMEOUT_SEC-${TIMEOUT_DEFAULT}} ./load_test ./rai_node -s 150 load_test_res=${?} echo "Core Test return code: ${core_test_res}"