mirror of
https://github.com/dashpay/dash.git
synced 2024-12-26 04:22:55 +01:00
f8e425b437
fa05f44893d228f672f39436d0cb6b3376f81ac2 ci: Upgrade most ci configs to focal (MarcoFalke) fad67208914e5a74b64f4cc018368902ef3a2e9b doc: move doc to ci readme (MarcoFalke) fa880773b425fcd292ed7669d237ee3151a15bc6 ci: Have one config run in xenial to test against python3.5 (MarcoFalke) fa6ddb2fa167df52f59cb9eaabed48315ddcdb2e travis: Always run multiprocess build (MarcoFalke) Pull request description: Generally developers compile with recent compilers, so bumping the ci configs to a recent OS should be uncontroversial. Older OSes (especially with compiler sanitizers) need workarounds that can be dropped by running on a more recent OS. This pull changes the asan sanitizer and the experimental multiprocess build to use focal. Also, it runs the no_wallet config on xenial to test against python 3.5, according to `doc/dependencies.md`. Finally, all configs that mimic gitian (win and mac) will stay at bionic. ACKs for top commit: Sjors: ACK fa05f44893d228f672f39436d0cb6b3376f81ac2, assuming Travis passes hebasto: ACK fa05f44893d228f672f39436d0cb6b3376f81ac2 Tree-SHA512: 55ec56c71ba2280d27c1a8856a1e6c310b1fbf469d5a8a1dde228063e3892e1dd1e51408ecff7a3d77ac2ae018daa9e9bbbb60598cdeaab8c32a146b11b3e7c4
282 lines
12 KiB
YAML
282 lines
12 KiB
YAML
# errata:
|
|
# - sudo/dist/group are set so as to get Blue Box VMs, necessary for [loopback]
|
|
# IPv6 support
|
|
|
|
version: ~> 1.0
|
|
|
|
dist: bionic
|
|
|
|
os: linux
|
|
language: minimal
|
|
arch: amd64
|
|
|
|
services:
|
|
- docker
|
|
|
|
cache:
|
|
ccache: true
|
|
directories:
|
|
- $BASE_BUILD_DIR/releases/$HOST
|
|
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"
|
|
- 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:
|
|
# Temporary workaround for https://github.com/bitcoin/bitcoin/issues/16368
|
|
- for i in {1..4}; do echo "$(sleep 500)" ; done &
|
|
- set -o errexit; source ./ci/test/05_before_script.sh &> "/dev/null"
|
|
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 \<missing\>) | 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 $(<contrib/verify-commits/trusted-keys); fi
|
|
#- if [ "$TRAVIS_REPO_SLUG" = "dashpay/dash" -a "$TRAVIS_EVENT_TYPE" = "cron" ]; then travis_wait 30 contrib/verify-commits/verify-commits.py; fi
|
|
after_script:
|
|
- echo $TRAVIS_COMMIT_RANGE
|
|
- echo $TRAVIS_COMMIT_LOG
|
|
after_success:
|
|
- if [ "$DOCKER_BUILD" = "true" ]; then docker login -u $DOCKER_HUB_USER -p $DOCKER_HUB_PASSWORD && ./ci/dash/push-docker.sh; fi
|
|
- stage: lint
|
|
name: 'lint'
|
|
env:
|
|
cache: pip
|
|
language: python
|
|
python: '3.8' # Oldest supported version according to doc/dependencies.md
|
|
install:
|
|
- set -o errexit; source ./ci/lint/04_install.sh
|
|
before_script:
|
|
- set -o errexit; source ./ci/lint/05_before_script.sh
|
|
script:
|
|
- set -o errexit; source ./ci/lint/06_script.sh
|
|
|
|
- stage: test
|
|
name: 'ARM [GOAL: install] [focal] [unit tests, functional tests]'
|
|
arch: arm64 # Can disable QEMU_USER_CMD and run the tests natively without qemu
|
|
env: >-
|
|
FILE_ENV="./ci/test/00_setup_env_arm.sh"
|
|
QEMU_USER_CMD=""
|
|
|
|
- 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] [previous releases, 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] [bionic] [no depends, only system libs, sanitizers: thread (TSan), no wallet]'
|
|
# Not enough memory on travis machines, so feature_block is excluded for now
|
|
env: >-
|
|
TEST_RUNNER_EXTRA="--exclude feature_block"
|
|
FILE_ENV="./ci/test/00_setup_env_native_tsan.sh"
|
|
|
|
# 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] [multiprocess]'
|
|
env: >-
|
|
FILE_ENV="./ci/test/00_setup_env_native_multiprocess.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"
|