language: cpp dist: bionic services: - docker stages: - one - two - three - four - five env: global: - DOCKER_IMAGE="rippleci/rippled-ci-builder:2020-01-08" - 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 matrix: fast_finish: true allow_failures: # TODO these need more investigation # # there are a number of UBs caught currently that need triage - name: ubsan, clang-8 # this one often runs out of memory: - name: manual tests, gcc-8, release include: # debug builds - &linux stage: one if: commit_message !~ /travis_run_/ OR commit_message =~ /travis_run_linux/ compiler: gcc-8 name: gcc-8, debug env: - MATRIX_EVAL="CC=gcc-8 && CXX=g++-8" - BUILD_TYPE=Debug script: - sudo chmod -R a+rw ${CACHE_DIR} - ccache -s - travis_wait ${MAX_TIME_MIN} bin/ci/ubuntu/build-in-docker.sh - ccache -s - <<: *linux compiler: clang-8 name: clang-8, debug env: - MATRIX_EVAL="CC=clang-8 && CXX=clang++-8" - BUILD_TYPE=Debug # coverage builds - <<: *linux if: commit_message !~ /travis_run_/ OR commit_message =~ /travis_run_linux/ OR commit_message =~ /travis_run_cov/ 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 - <<: *linux if: commit_message !~ /travis_run_/ OR commit_message =~ /travis_run_linux/ OR commit_message =~ /travis_run_cov/ 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 - <<: *linux if: commit_message !~ /travis_run_/ OR commit_message =~ /travis_run_linux/ OR commit_message =~ /travis_run_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" - <<: *linux if: commit_message !~ /travis_run_/ OR commit_message =~ /travis_run_linux/ OR commit_message =~ /travis_run_nounity/ 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 - <<: *linux if: commit_message !~ /travis_run_/ OR commit_message =~ /travis_run_linux/ OR commit_message =~ /travis_run_man/ 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 - <<: *linux if: commit_message !~ /travis_run_/ OR commit_message =~ /travis_run_linux/ OR commit_message =~ /travis_run_man/ 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 -Dunity=OFF" - MANUAL_TESTS=true # release builds - <<: *linux if: commit_message !~ /travis_run_/ OR commit_message =~ /travis_run_linux/ OR commit_message =~ /travis_run_release/ compiler: gcc-8 name: gcc-8, release env: - MATRIX_EVAL="CC=gcc-8 && CXX=g++-8" - BUILD_TYPE=Release - CMAKE_ADD="-Dassert=ON -Dunity=OFF" - <<: *linux if: commit_message !~ /travis_run_/ OR commit_message =~ /travis_run_linux/ OR commit_message =~ /travis_run_release/ compiler: clang-8 name: clang-8, release env: - MATRIX_EVAL="CC=clang-8 && CXX=clang++-8" - BUILD_TYPE=Release - CMAKE_ADD="-Dassert=ON" # asan - <<: *linux if: commit_message !~ /travis_run_/ OR commit_message =~ /travis_run_linux/ OR commit_message =~ /travis_run_san/ 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 - <<: *linux if: commit_message !~ /travis_run_/ OR commit_message =~ /travis_run_linux/ OR commit_message =~ /travis_run_san/ 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 # current tsan failure *might* be related to: # https://github.com/google/sanitizers/issues/1104 # but we can't get it to run, so leave it disabled for now # - <<: *linux # if: commit_message !~ /travis_run_/ OR commit_message =~ /travis_run_linux/ OR commit_message =~ /travis_run_san/ # 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 - <<: *linux compiler: gcc-8 name: non-static, gcc-8 env: - MATRIX_EVAL="CC=gcc-8 && CXX=g++-8" - BUILD_TYPE=Debug - CMAKE_ADD="-Dstatic=OFF" - <<: *linux 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 - <<: *linux 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 - <<: *linux compiler: gcc-7 name: gcc-7 env: - MATRIX_EVAL="CC=gcc-7 && CXX=g++-7" - BUILD_TYPE=Debug - <<: *linux compiler: gcc-9 name: gcc-9 env: - MATRIX_EVAL="CC=gcc-9 && CXX=g++-9" - BUILD_TYPE=Debug - <<: *linux compiler: clang-7 name: clang-7 env: - MATRIX_EVAL="CC=clang-7 && CXX=clang++-7" - BUILD_TYPE=Debug - <<: *linux 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 - <<: *linux 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 - <<: *linux if: commit_message !~ /travis_run_/ OR commit_message =~ /travis_run_vkeys/ 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 if: commit_message !~ /travis_run_/ OR commit_message =~ /travis_run_mac/ stage: one os: osx osx_image: xcode10.3 name: xcode10, debug env: # put NIH in non-cache location since it seems to # cause failures when homebrew updates - NIH_CACHE_ROOT=${TRAVIS_BUILD_DIR}/nih_c - 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: - protobuf - grpc - pkg-config - bash - ninja - cmake - wget - zstd - libarchive - 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: xcode11.2 name: xcode11, debug # windows - &windows if: commit_message !~ /travis_run_/ OR commit_message =~ /travis_run_win/ os: windows env: # put NIH in a non-cached location until # we come up with a way to stabilize that # cache on windows (minimize incremental changes) - CACHE_NAME=win_01 - NIH_CACHE_ROOT=${TRAVIS_BUILD_DIR}/nih_c - VCPKG_DEFAULT_TRIPLET="x64-windows-static" - MATRIX_EVAL="CC=cl.exe && CXX=cl.exe" - BOOST_ROOT=${CACHE_DIR}/boost_1_70 - >- CMAKE_ADD=" -DCMAKE_PREFIX_PATH=${BOOST_ROOT}/_INSTALLED_ -DBOOST_ROOT=${BOOST_ROOT}/_INSTALLED_ -DBoost_ROOT=${BOOST_ROOT}/_INSTALLED_ -DBoost_DIR=${BOOST_ROOT}/_INSTALLED_/lib/cmake/Boost-1.70.0 -DBoost_COMPILER=vc141 -DCMAKE_VERBOSE_MAKEFILE=ON -DCMAKE_TOOLCHAIN_FILE=${VCPKG_DIR}/scripts/buildsystems/vcpkg.cmake -DVCPKG_TARGET_TRIPLET=x64-windows-static" stage: one name: prereq-ssl install: - choco upgrade cmake.install - choco install ninja visualstudio2017-workload-vctools -y script: - df -h - travis_wait ${MAX_TIME_MIN} bin/sh/install-vcpkg.sh openssl - <<: *windows stage: two name: prereq-grpc script: - travis_wait ${MAX_TIME_MIN} bin/sh/install-vcpkg.sh grpc - <<: *windows stage: three name: prereq-libarchive script: - travis_wait ${MAX_TIME_MIN} bin/sh/install-vcpkg.sh libarchive[lz4] # TBD consider rocksdb via vcpkg if/when we can build with the # vcpkg version # - travis_wait ${MAX_TIME_MIN} bin/sh/install-vcpkg.sh rocksdb[snappy,lz4,zlib] - <<: *windows stage: four name: prereq-boost install: - choco upgrade cmake.install - choco install ninja visualstudio2017-workload-vctools -y - choco install visualstudio2019buildtools visualstudio2019community visualstudio2019-workload-vctools -y script: - export BOOST_TOOLSET=msvc-14.1 - travis_wait ${MAX_TIME_MIN} Builds/containers/shared/install_boost.sh - &windows-bld <<: *windows stage: five name: windows, debug before_script: - export BLD_CONFIG=Debug script: - df -h - . ./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 # override num procs to force single unit test job - export NUM_PROCESSORS=1 - travis_wait ${MAX_TIME_MIN} ./rippled.exe --unittest --quiet --unittest-log --unittest-jobs ${NUM_PROCESSORS} - <<: *windows-bld name: windows, release before_script: - export BLD_CONFIG=Release - <<: *windows-bld 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 # override num procs to force single unit test job - export NUM_PROCESSORS=1 - >- travis_wait ${MAX_TIME_MIN} "./_installed_/Program Files/rippled/bin/rippled.exe" --unittest --quiet --unittest-log --unittest-jobs ${NUM_PROCESSORS} - <<: *windows-bld name: windows, vc2019 install: - choco upgrade cmake.install - choco install ninja -y - choco install visualstudio2019buildtools visualstudio2019community visualstudio2019-workload-vctools -y before_script: - export BLD_CONFIG=Release # we want to use the boost build from cache, which was built using the # vs2017 compiler so we need to specify the Boost_COMPILER. BUT, we # can't use the cmake config files generated by boost b/c they are # broken for Boost_COMPILER override, so we need to specify both # Boost_NO_BOOST_CMAKE and a slightly different Boost_COMPILER string # to make the legacy find module work for us. If the cmake configs are # fixed in the future, it should be possible to remove these # workarounds. - export CMAKE_EXTRA_ARGS="${CMAKE_EXTRA_ARGS} -DBoost_NO_BOOST_CMAKE=ON -DBoost_COMPILER=-vc141" 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} cache: timeout: 900 directories: - $CACHE_DIR 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 notifications: email: false