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.
This commit is contained in:
Arugula Bowl 2018-07-07 17:46:04 +02:00 committed by Lee Bousfield
commit 37f50ff6db
5 changed files with 20 additions and 7 deletions

View file

@ -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

View file

@ -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")

View file

@ -30,6 +30,7 @@ cmake \
-DCMAKE_VERBOSE_MAKEFILE=ON \
-DBOOST_ROOT=/usr/local \
-DQt5_DIR=${qt_dir} \
-DCMAKE_CXX_COMPILER_LAUNCHER=ccache \
${SANITIZERS} \
..

View file

@ -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

View file

@ -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}"