# errata: # - sudo/dist/group are set so as to get Blue Box VMs, necessary for [loopback] # IPv6 support # The test build matrix (stage: test) is constructed to test a wide range of # configurations, rather than a single pass/fail. This helps to catch build # failures and logic errors that present on platforms other than the ones the # author has tested. # # Some builders use the dependency-generator in `./depends`, rather than using # apt-get to install build dependencies. This guarantees that the tester is # using the same versions as Gitian, so the build results are nearly identical # to what would be found in a final release. # # In order to avoid rebuilding all dependencies for each build, the binaries # are cached and re-used when possible. Changes in the dependency-generator # will trigger cache-invalidation and rebuilds as necessary. # version: ~> 1.0 dist: xenial os: linux language: minimal arch: amd64 services: - docker cache: ccache: true directories: - $BASE_BUILD_DIR/ci/scratch/.ccache before_cache: - if [ "${TRAVIS_OS_NAME}" = "osx" ]; then brew cleanup; fi env: global: # DOCKER_HUB_USER - secure: "J0T+zrRBBzBnxoioCD378cRSJUF8Vms32QMmrENVVfuJl03oBQv0QxSatLEiD4PtRPrN00mJ8/k/HdqFQ0SN1yg6a00duOZ6C9jk6t/fExBO1LNhp3Z7lcaMUrNEyRN6sgfVeznDVTGj9jBQU2HNlwHk0UD9BNp/k+Bjhrtw7Njp9JTLZKBgxrXk0WZmfk0d75Q+9DajA1j2tSfWVpwzv6HMGfqIH1wsVEakBY+tnaE6EO3IdzdWHhf/iV+Tx0tL0Qz/6mejgSuoGLTJLmeTrceTTmsDlN3B95y+XfcYDs6EP7gpzN8Ffg/mLV8xJ2Myj7+b1o+smMJZE5tLuPIeAu0YsfkPNa/tNLotOlDxF72per0kXyNYbRf+JrpxiOu9pLCtdtd40V2SsiNhpQqHVy+b+wkkqo2syTHT+9UNkqEi3WFm6TqFuOeQNtDm6R0hRl/Talw/ZEeKs68z1Cf6VyBrZG5LqtOurtWlKwXCe/Tr1i2g4BEAcbywphtCCcfgMK9YSGQnjKkGk6k9gVEa2bneYLZz1RSh2OpXnIsIJOX7X0hNd5xtQDLgbpSUlKwVcEriWeGe12GCszKNX9gdEo2bHeq4xAJ6BE+ot745z9dc+nC2BJ6Su+I5L6zBg4m2FWn0TWhPvz/6JR26t6ls/E7m+hkwJTCHnIUiFmmzpEw=" # DOCKER_HUB_PASSWORD - secure: "RLzlMhfLqwSBrZqJOVOd61suXBn+HtUR3vOZfuFYF/Qmjjj5TE41+rObZmzc54hP/ZL+OH6blnibpvfDXlX+eN38ivFQfuxkJIGL68SJsEwNBRwW39Yw6Hl5RdI41MLCH7ByN15wifLp1JKBilHJ7XGMOUjI7P0yl7JjX8GBXUCtJbVLRugo80/yn+XQ1NdnlpbpYHNjMEQFWSODPa3pSK5McWvyQjDZDgS+IkdrZmIYJPMa7bmKH5I/edUPSmXQT905FgEwq9u8XR0SyBopli21EK9l6GkXIIvmDTYz5vT26Apvi2B4Aoazlklg+KNRUJuLGerpt6kbnU0gMSUChVkFfFhOk6GRSN3a/AUfD2FOudvMhet2QvlPHx+GYdEUr5XVo5HW42pHsqfD6eDtHd8VLTsHP0q4C8V85fNMv21lkkehy2ry8fx/RRy6x4O2wg2mua+79UkGKXp75gMKzWEcth34PCFCOu37l2F8R/ANnrQ52K/8vIQ88TtU2OpYX89fHjLojBxu+WKEBGZH2LRPsZBOUHeeO5C/xKDrhZU24ORnMW8wg66Qg5GIX1KI4a8yp73Mpues5hzpJ6wkMuRrQt40ymKndLCjv8KSd+5BfP6Or/KIrzDNYdZaasjk7JNi6rcZmm9d3fTAo+Ja/mjpUCIOo3SX14luzVCJIig=" - DOCKER_BUILD=false stages: - build depends - build src - run tests - build docker builddepends: &builddepends stage: build depends script: - $DOCKER_RUN_IN_BUILDER ./ci/dash/build_depends.sh buildsrc: &buildsrc stage: build src script: - $DOCKER_RUN_IN_BUILDER ./ci/dash/build_depends.sh - $DOCKER_RUN_IN_BUILDER ./ci/dash/build_src.sh runtests: &runtests stage: run tests script: - $DOCKER_RUN_IN_BUILDER ./ci/dash/build_depends.sh - $DOCKER_RUN_IN_BUILDER ./ci/dash/build_src.sh - $DOCKER_RUN_IN_BUILDER ./ci/dash/test_unittests.sh - if [ "$TRAVIS_EVENT_TYPE" = "cron" ]; then extended="--extended --exclude feature_pruning,feature_dbcrash"; fi - $DOCKER_RUN_IN_BUILDER ./ci/test_integrationtests.sh --quiet --jobs=3 ${extended} builddocker: &builddocker stage: build docker script: # no need to run tests again here - if [ "$DOCKER_BUILD" = "true" ]; then $DOCKER_RUN_IN_BUILDER ./ci/dash/build_depends.sh && $DOCKER_RUN_IN_BUILDER ./ci/dash/build_src.sh && BUILD_DIR=build-ci/dashcore-$BUILD_TARGET ./ci/dash/build-docker.sh; fi - CI_RETRY_EXE="travis_retry" - CI_WAIT="while sleep 500; do echo .; done" - CACHE_ERR_MSG="Error! Initial build successful, but not enough time remains to run later build stages and tests. See https://docs.travis-ci.com/user/customizing-the-build#build-timeouts . Please manually re-run this job by using the travis restart button. The next run should not time out because the build cache has been saved." before_install: - set -o errexit; source ./ci/test/00_setup_env.sh - set -o errexit; source ./ci/test/03_before_install.sh install: - set -o errexit; source ./ci/test/04_install.sh before_script: - set -o errexit; source ./ci/test/05_before_script.sh script: - if [ $SECONDS -gt 1200 ]; then set +o errexit; echo "Travis early exit to cache current state"; false; else set -o errexit; source .travis/test_06_script.sh; fi after_script: - echo $TRAVIS_COMMIT_RANGE jobs: include: # build depends - <<: *builddepends name: depends-arm-linux env: BUILD_TARGET=arm-linux - <<: *builddepends name: depends-win64 env: BUILD_TARGET=win64 - <<: *builddepends name: depends-linux64 env: BUILD_TARGET=linux64 - <<: *builddepends name: depends-linux64_nowallet env: BUILD_TARGET=linux64_nowallet - <<: *builddepends name: depends-linux64_release env: - BUILD_TARGET=linux64_release - DOCKER_BUILD=true - <<: *builddepends name: depends-mac env: BUILD_TARGET=mac # build source - <<: *buildsrc name: src-arm-linux env: BUILD_TARGET=arm-linux - <<: *buildsrc name: src-win64 env: BUILD_TARGET=win64 - <<: *buildsrc name: src-linux64 env: BUILD_TARGET=linux64 - <<: *buildsrc name: src-linux64_nowallet env: BUILD_TARGET=linux64_nowallet - <<: *buildsrc name: src-linux64_release env: - BUILD_TARGET=linux64_release - DOCKER_BUILD=true - <<: *buildsrc name: src-mac env: BUILD_TARGET=mac # run tests (no tests for arm-linux and mac) - <<: *runtests name: tests-win64 env: BUILD_TARGET=win64 - <<: *runtests name: tests-linux64 env: BUILD_TARGET=linux64 - <<: *runtests name: tests-linux64_nowallet env: BUILD_TARGET=linux64_nowallet - <<: *runtests name: tests-linux64_release env: - BUILD_TARGET=linux64_release - DOCKER_BUILD=true # build docker - <<: *builddocker name: docker-linux64_release env: - BUILD_TARGET=linux64_release - DOCKER_BUILD=true before_cache: # Save builder image - docker save dash-builder-$BUILD_TARGET-$TRAVIS_JOB_NUMBER $(docker history -q dash-builder-$BUILD_TARGET-$TRAVIS_JOB_NUMBER | grep -v \) | gzip -2 > $HOME/cache/docker/dash-builder-$BUILD_TARGET.tar.gz install: # Fix annoying Travis bug: a branch with a single commit has an empty TRAVIS_COMMIT_RANGE sometimes - if [ -z "$TRAVIS_COMMIT_RANGE" ]; then export TRAVIS_COMMIT_RANGE="HEAD~..HEAD"; fi # Our scripts try to be Travis agnostic - export PULL_REQUEST="$TRAVIS_PULL_REQUEST" - export COMMIT_RANGE="$TRAVIS_COMMIT_RANGE" - export JOB_NUMBER="$TRAVIS_JOB_NUMBER" - export HOST_SRC_DIR=$BASE_BUILD_DIR - export HOST_CACHE_DIR=$HOME/cache - export TRAVIS_COMMIT_LOG=`git log --format=fuller -1` - source ./ci/matrix.sh - mkdir -p $HOST_CACHE_DIR/docker && mkdir -p $HOST_CACHE_DIR/ccache && mkdir -p $HOST_CACHE_DIR/depends && mkdir -p $HOST_CACHE_DIR/sdk-sources # Keep this as it makes caching related debugging easier - ls -lah $HOST_CACHE_DIR && ls -lah $HOST_CACHE_DIR/depends && ls -lah $HOST_CACHE_DIR/ccache && ls -lah $HOST_CACHE_DIR/docker # Load cached builder image - if [ -f $HOST_CACHE_DIR/docker/dash-builder-$BUILD_TARGET.tar.gz ]; then zcat $HOST_CACHE_DIR/docker/dash-builder-$BUILD_TARGET.tar.gz | docker load || true; fi - travis_retry docker pull ubuntu:focal - travis_retry docker build -t $BUILDER_IMAGE_NAME --build-arg=USER_ID=$UID --build-arg=GROUP_ID=$UID --build-arg=BUILD_TARGET=$BUILD_TARGET -f contrib/containers/ci/Dockerfile ci before_script: # Make sure stdout is in blocking mode. Otherwise builds will fail due to large writes to stdout # See https://github.com/travis-ci/travis-ci/issues/4704. If this gets fixed, this line can also be removed. - python3 -c 'import os,sys,fcntl; flags = fcntl.fcntl(sys.stdout, fcntl.F_GETFL); fcntl.fcntl(sys.stdout, fcntl.F_SETFL, flags&~os.O_NONBLOCK);' # Build docker image only for develop branch of the main repo - if [ "$TRAVIS_REPO_SLUG" != "dashpay/dash" -o "$TRAVIS_BRANCH" != "develop" -o "$TRAVIS_PULL_REQUEST" != "false" ]; then export DOCKER_BUILD="false"; echo DOCKER_BUILD=$DOCKER_BUILD; fi # TODO(ignore if don't use travis): Check keys and signed commits #- if [ "$TRAVIS_REPO_SLUG" = "dashpay/dash" -a "$TRAVIS_PULL_REQUEST" = "false" ]; then travis_retry gpg --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys $(- FILE_ENV="./ci/test/00_setup_env_arm.sh" QEMU_USER_CMD="" - stage: test name: 's390x native BE [GOAL: install] [bionic] [no depends, no GUI]' arch: s390x dist: bionic addons: apt: packages: - bsdmainutils - libboost-filesystem-dev - libboost-system-dev - libboost-test-dev - libboost-thread-dev - libdb++-dev - libdb-dev - libevent-dev env: >- DANGER_RUN_CI_ON_HOST=true CI_USE_APT_INSTALL=no FILE_ENV="./ci/test/00_setup_env_s390x_host.sh" # s390 build was disabled temporarily because of disk space issues on the Travis VM # # - stage: test # name: 'S390x [GOAL: install] [focal] [unit tests, functional tests]' # arch: s390x # Can disable QEMU_USER_CMD and run the tests natively without qemu # env: >- # FILE_ENV="./ci/test/00_setup_env_s390x.sh" # QEMU_USER_CMD="" - stage: test name: 'Win64 [GOAL: deploy] [unit tests, no gui, no functional tests]' env: >- FILE_ENV="./ci/test/00_setup_env_win64.sh" - stage: test name: 'x86_64 Linux [GOAL: install] [focal] [uses qt5 dev package and some depends packages] [unsigned char]' env: >- FILE_ENV="./ci/test/00_setup_env_native_qt5.sh" # x86_64 Linux (xenial, no depends, only system libs, sanitizers: thread (TSan)) - stage: test name: 'x86_64 Linux [GOAL: install] [xenial] [no depends, only system libs, sanitizers: thread (TSan), no wallet]' env: >- FILE_ENV="./ci/test/00_setup_env_native_tsan.sh" TEST_RUNNER_EXTRA="--exclude feature_block" # Not enough memory on travis machines # x86_64 Linux (no depends, only system libs, sanitizers: address/leak (ASan + LSan) + undefined (UBSan) + integer) - stage: test name: 'x86_64 Linux [GOAL: install] [focal] [no depends, only system libs, sanitizers: address/leak (ASan + LSan) + undefined (UBSan) + integer]' env: >- FILE_ENV="./ci/test/00_setup_env_native_asan.sh" - stage: test name: 'x86_64 Linux [GOAL: install] [focal] [no wallet]' env: >- FILE_ENV="./ci/test/00_setup_env_native_fuzz.sh" - stage: test name: 'x86_64 Linux [GOAL: install] [focal] [no depends, only system libs, fuzzers under valgrind]' env: >- FILE_ENV="./ci/test/00_setup_env_native_fuzz_with_valgrind.sh" - stage: test name: 'x86_64 Linux [GOAL: install] [focal] [no wallet]' env: >- FILE_ENV="./ci/test/00_setup_env_native_nowallet.sh" - stage: test name: 'macOS 10.12 [GOAL: deploy] [no functional tests]' env: >- FILE_ENV="./ci/test/00_setup_env_mac.sh" - stage: test name: 'macOS 10.14 native [GOAL: install] [GUI] [no depends]' os: osx # Use the most recent version: # Xcode 11.3.1, macOS 10.14, SDK 10.15 # https://docs.travis-ci.com/user/reference/osx/#macos-version osx_image: xcode11.3 cache: directories: - $TRAVIS_BUILD_DIR/ci/scratch/.ccache - $TRAVIS_BUILD_DIR/releases/$HOST - $HOME/Library/Caches/Homebrew - /usr/local/Homebrew addons: homebrew: packages: - libtool - berkeley-db4 - boost - miniupnpc - qt - qrencode - python3 - ccache - zeromq env: >- DANGER_RUN_CI_ON_HOST=true CI_USE_APT_INSTALL=no FILE_ENV="./ci/test/00_setup_env_mac_host.sh"