language: cpp dist: xenial services: - docker env: global: - DOCKER_IMAGE="mellery451/rippled-ci-builder:2019-08-26" - CMAKE_EXTRA_ARGS="-Dwerr=ON -Dwextra=ON" - NINJA_BUILD=true # change this if we get more VM capacity - MAX_TIME_MIN=80 - CACHE_DIR=${TRAVIS_HOME}/_cache - NIH_CACHE_ROOT=${CACHE_DIR}/nih_c - PARALLEL_TESTS=true # this is NOT used by linux container based builds (which already have boost installed) - BOOST_URL='https://dl.bintray.com/boostorg/release/1.70.0/source/boost_1_70_0.tar.bz2' - VCPKG_DIR=${CACHE_DIR}/vcpkg - USE_CCACHE=true - CCACHE_BASEDIR=${TRAVIS_HOME}" - CCACHE_NOHASHDIR=true - CCACHE_DIR=${CACHE_DIR}/ccache before_install: - if [ "$(uname)" = "Darwin" ] ; then export NUM_PROCESSORS=$(sysctl -n hw.physicalcpu); else export NUM_PROCESSORS=$(nproc); fi - echo "NUM PROC is ${NUM_PROCESSORS}" - if [ "$(uname)" = "Linux" ] ; then docker pull ${DOCKER_IMAGE}; fi - if [ "${MATRIX_EVAL}" != "" ] ; then eval "${MATRIX_EVAL}"; fi - if [ "${CMAKE_ADD}" != "" ] ; then export CMAKE_EXTRA_ARGS="${CMAKE_EXTRA_ARGS} ${CMAKE_ADD}"; fi - bin/ci/ubuntu/travis-cache-start.sh matrix: fast_finish: true allow_failures: # TODO these all need more investigation # # current tsan failure might be related to: # https://github.com/google/sanitizers/issues/1104 - name: tsan, clang-8 # there are a number of UBs caught currently that need triage - name: ubsan, clang-8 include: # coverage builds - compiler: gcc-8 name: coverage, gcc-8 env: - MATRIX_EVAL="CC=gcc-8 && CXX=g++-8" - BUILD_TYPE=Debug - CMAKE_ADD="-Dcoverage=ON" - TARGET=coverage_report - SKIP_TESTS=true - compiler: clang-8 name: coverage, clang-8 env: - MATRIX_EVAL="CC=clang-8 && CXX=clang++-8" - BUILD_TYPE=Debug - CMAKE_ADD="-Dcoverage=ON" - TARGET=coverage_report - SKIP_TESTS=true # nounity - compiler: gcc-8 name: non-unity, gcc-8 env: - MATRIX_EVAL="CC=gcc-8 && CXX=g++-8" - BUILD_TYPE=Debug - CMAKE_ADD="-Dunity=OFF" - compiler: clang-8 name: non-unity, clang-8 env: - MATRIX_EVAL="CC=clang-8 && CXX=clang++-8" - BUILD_TYPE=Debug - CMAKE_ADD="-Dunity=OFF" # manual tests - compiler: gcc-8 name: manual tests, gcc-8, debug env: - MATRIX_EVAL="CC=gcc-8 && CXX=g++-8" - BUILD_TYPE=Debug - MANUAL_TESTS=true # manual tests - compiler: gcc-8 name: manual tests, gcc-8, release env: - MATRIX_EVAL="CC=gcc-8 && CXX=g++-8" - BUILD_TYPE=Release - CMAKE_ADD="-Dassert=ON" - MANUAL_TESTS=true # release builds - compiler: gcc-8 name: gcc-8, release env: - MATRIX_EVAL="CC=gcc-8 && CXX=g++-8" - BUILD_TYPE=Release - CMAKE_ADD="-Dassert=ON" - compiler: clang-8 name: clang-8, release env: - MATRIX_EVAL="CC=clang-8 && CXX=clang++-8" - BUILD_TYPE=Release - CMAKE_ADD="-Dassert=ON" # debug builds - compiler: gcc-8 name: gcc-8, debug env: - MATRIX_EVAL="CC=gcc-8 && CXX=g++-8" - BUILD_TYPE=Debug - compiler: clang-8 name: clang-8, debug env: - MATRIX_EVAL="CC=clang-8 && CXX=clang++-8" - BUILD_TYPE=Debug # asan - compiler: clang-8 name: asan, clang-8 env: - MATRIX_EVAL="CC=clang-8 && CXX=clang++-8" - BUILD_TYPE=Release - CMAKE_ADD="-Dsan=address" - ASAN_OPTIONS="print_stats=true:atexit=true" #- LSAN_OPTIONS="verbosity=1:log_threads=1" - PARALLEL_TESTS=false # ubsan - compiler: clang-8 name: ubsan, clang-8 env: - MATRIX_EVAL="CC=clang-8 && CXX=clang++-8" - BUILD_TYPE=Release - CMAKE_ADD="-Dsan=undefined" # once we can run clean under ubsan, add halt_on_error=1 to options below - UBSAN_OPTIONS="print_stacktrace=1:report_error_type=1" - PARALLEL_TESTS=false # tsan - compiler: clang-8 name: tsan, clang-8 env: - MATRIX_EVAL="CC=clang-8 && CXX=clang++-8" - BUILD_TYPE=Release - CMAKE_ADD="-Dsan=thread" - TSAN_OPTIONS="history_size=3 external_symbolizer_path=/usr/bin/llvm-symbolizer verbosity=1" - PARALLEL_TESTS=false # dynamic lib builds - compiler: gcc-8 name: non-static, gcc-8 env: - MATRIX_EVAL="CC=gcc-8 && CXX=g++-8" - BUILD_TYPE=Debug - CMAKE_ADD="-Dstatic=OFF" - compiler: gcc-8 name: non-static + BUILD_SHARED_LIBS, gcc-8 env: - MATRIX_EVAL="CC=gcc-8 && CXX=g++-8" - BUILD_TYPE=Debug - CMAKE_ADD="-Dstatic=OFF -DBUILD_SHARED_LIBS=ON" # makefile - compiler: gcc-8 name: makefile generator, gcc-8 env: - MATRIX_EVAL="CC=gcc-8 && CXX=g++-8" - BUILD_TYPE=Debug - NINJA_BUILD=false # misc alternative compilers - compiler: gcc-7 name: gcc-7 env: - MATRIX_EVAL="CC=gcc-7 && CXX=g++-7" - BUILD_TYPE=Debug - compiler: gcc-9 name: gcc-9 env: - MATRIX_EVAL="CC=gcc-9 && CXX=g++-9" - BUILD_TYPE=Debug - compiler: clang-5.0 name: clang-5 env: - MATRIX_EVAL="CC=clang-5.0 && CXX=clang++-5.0" - BUILD_TYPE=Debug - compiler: clang-6.0 name: clang-6 env: - MATRIX_EVAL="CC=clang-6.0 && CXX=clang++-6.0" - BUILD_TYPE=Debug - compiler: clang-7 name: clang-7 env: - MATRIX_EVAL="CC=clang-7 && CXX=clang++-7" - BUILD_TYPE=Debug - compiler: clang-9 name: clang-9 env: - MATRIX_EVAL="CC=clang-9 && CXX=clang++-9" - BUILD_TYPE=Debug # verify build with min version of cmake - compiler: gcc-8 name: min cmake version env: - MATRIX_EVAL="CC=gcc-8 && CXX=g++-8" - BUILD_TYPE=Debug - CMAKE_EXE=/opt/local/cmake-3.9/bin/cmake - SKIP_TESTS=true # validator keys project as subproj of rippled - compiler: gcc-8 name: validator-keys env: - MATRIX_EVAL="CC=gcc-8 && CXX=g++-8" - BUILD_TYPE=Debug - CMAKE_ADD="-Dvalidator_keys=ON" - TARGET=validator-keys # macos - &macos os: osx osx_image: xcode10.2 name: xcode10, debug env: - BLD_CONFIG=Debug - TEST_EXTRA_ARGS="" - BOOST_ROOT=${CACHE_DIR}/boost_1_70_0 - >- CMAKE_ADD=" -DBOOST_ROOT=${BOOST_ROOT}/_INSTALLED_ -DBoost_ARCHITECTURE=-x64 -DBoost_NO_SYSTEM_PATHS=ON -DCMAKE_VERBOSE_MAKEFILE=ON" addons: homebrew: packages: - bash - ninja - cmake - openssl@1.1 update: true install: - export OPENSSL_ROOT=$(brew --prefix openssl@1.1) - travis_wait ${MAX_TIME_MIN} Builds/containers/shared/install_boost.sh - brew uninstall --ignore-dependencies boost script: - mkdir -p build.macos && cd build.macos - cmake -G Ninja ${CMAKE_EXTRA_ARGS} -DCMAKE_BUILD_TYPE=${BLD_CONFIG} .. - travis_wait ${MAX_TIME_MIN} cmake --build . --parallel --verbose - ./rippled --unittest --quiet --unittest-log --unittest-jobs ${NUM_PROCESSORS} ${TEST_EXTRA_ARGS} - <<: *macos name: xcode10, release before_script: - export BLD_CONFIG=Release - export CMAKE_EXTRA_ARGS="${CMAKE_EXTRA_ARGS} -Dassert=ON" - <<: *macos name: ipv6 (macos) before_script: - export TEST_EXTRA_ARGS="--unittest-ipv6" - <<: *macos osx_image: xcode9.4 name: xcode9, debug before_script: # turn off warnings as err for this build - export CMAKE_EXTRA_ARGS="${CMAKE_EXTRA_ARGS} -Dwerr=OFF" - <<: *macos osx_image: xcode11 name: xcode11, debug # windows - &windows # caching is unreliable on windows...disable for now cache: false os: windows name: windows, debug env: # put NIH in a non-cached location until # we come up with a way to stabilize that # cache on windows (minimize incremental changes) - NIH_CACHE_ROOT=${TRAVIS_BUILD_DIR}/nih_c - VCPKG_DEFAULT_TRIPLET="x64-windows-static" - BOOST_ROOT=${CACHE_DIR}/boost_1_70_0 - MATRIX_EVAL="CC=cl.exe && CXX=cl.exe" - >- CMAKE_ADD=" -DBOOST_ROOT=${BOOST_ROOT}/_INSTALLED_ -DCMAKE_VERBOSE_MAKEFILE=ON -DCMAKE_TOOLCHAIN_FILE=${VCPKG_DIR}/scripts/buildsystems/vcpkg.cmake -DVCPKG_TARGET_TRIPLET=x64-windows-static" install: - choco upgrade cmake.install - choco install ninja visualstudio2017-workload-vctools -y - travis_wait 30 bin/sh/install-vcpkg.sh - travis_wait ${MAX_TIME_MIN} Builds/containers/shared/install_boost.sh before_script: - export BLD_CONFIG=Debug script: - . ./bin/sh/setup-msvc.sh - mkdir -p build.ms && cd build.ms - cmake -G Ninja ${CMAKE_EXTRA_ARGS} -DCMAKE_BUILD_TYPE=${BLD_CONFIG} .. - travis_wait ${MAX_TIME_MIN} cmake --build . --parallel --verbose - ./rippled.exe --unittest --quiet --unittest-log --unittest-jobs ${NUM_PROCESSORS} - <<: *windows name: windows, release before_script: - export BLD_CONFIG=Release - <<: *windows name: windows, visual studio, debug script: - mkdir -p build.ms && cd build.ms - cmake -G "Visual Studio 15 2017 Win64" ${CMAKE_EXTRA_ARGS} .. - export DESTDIR=${PWD}/_installed_ - travis_wait ${MAX_TIME_MIN} cmake --build . --parallel --verbose --config ${BLD_CONFIG} --target install - >- "./_installed_/Program Files/rippled/bin/rippled.exe" --unittest --quiet --unittest-log --unittest-jobs ${NUM_PROCESSORS} cache: timeout: 900 directories: - $CACHE_DIR before_cache: - if [ $(uname) = "Linux" ] ; then SUDO="sudo"; else SUDO=""; fi - cd ${TRAVIS_HOME} - if [ -f cache_ignore.tar ] ; then $SUDO tar xvf cache_ignore.tar; fi - cd ${TRAVIS_BUILD_DIR} script: - sudo chmod -R a+rw ${CACHE_DIR} - ccache -s - travis_wait ${MAX_TIME_MIN} bin/ci/ubuntu/build-in-docker.sh - ccache -s notifications: email: false