mirror of
https://github.com/dashpay/dash.git
synced 2024-12-25 03:52:49 +01:00
bd0e9c90e2
0c78e49be3a258695b7f363f2d5b1cfdb93f9522 tests: Switch one of the Travis jobs to an unsigned char environment (-funsigned-char) (practicalswift) Pull request description: Switch one of the Travis jobs to an unsigned char environment (`-funsigned-char`). This will help us catch errors due to code written under the assumption that `char` has the same value range as `signed char`. The signedness of `char` is implementation-defined. Example: ``` $ uname -a Linux […] x86_64 x86_64 x86_64 GNU/Linux $ cat foo.cpp #include <iostream> int main() { char c; std::cin >> c; int i = (unsigned char)c; std::cout << i << "\n"; } $ clang++ -o foo foo.cpp $ echo -e "\xff" | ./foo 255 $ clang++ -fsigned-char -o foo foo.cpp $ echo -e "\xff" | ./foo 255 $ clang++ -funsigned-char -o foo foo.cpp $ echo -e "\xff" | ./foo 255 $ cat bar.cpp #include <iostream> int main() { char c; std::cin >> c; int i = c; std::cout << i << "\n"; } $ clang++ -o bar bar.cpp $ echo -e "\xff" | ./bar -1 $ clang++ -fsigned-char -o bar bar.cpp $ echo -e "\xff" | ./bar -1 $ clang++ -funsigned-char -o bar bar.cpp $ echo -e "\xff" | ./bar 255 ``` `gcc` chars: * signed: alpha, hppa, ia64, m68k, mips, sh, sparc, x86 * unsigned: arm, powerpc, s390 About `-funsigned-char`: > Let the type "char" be unsigned, like "unsigned char". > > Each kind of machine has a default for what "char" should be. It is either like "unsigned char" by default or like "signed char" by default. > > Ideally, a portable program should always use "signed char" or "unsigned char" when it depends on the signedness of an object. But many programs have been written to use plain "char" and expect it to be signed, or expect it to be unsigned, depending on the machines they were written for. > > This option, and its inverse, let you make such a program work with the opposite default. The type "char" is always a distinct type from each of "signed char" or "unsigned char", even though its behavior is always just like one of those two. ACKs for top commit: laanwj: ACK 0c78e49be3a258695b7f363f2d5b1cfdb93f9522 Tree-SHA512: ba04590415c0bb9a0bbd348623e57068f75274f53da7247d5c5ecad82e365a5b45893a4a491d318e82a8feb6a25f019d46e01990afb33162e2c9740d33a343d7
305 lines
14 KiB
YAML
305 lines
14 KiB
YAML
# errata:
|
|
# - sudo/dist/group are set so as to get Blue Box VMs, necessary for [loopback]
|
|
# IPv6 support
|
|
|
|
dist: xenial
|
|
|
|
os: linux
|
|
language: minimal
|
|
|
|
services:
|
|
- docker
|
|
|
|
cache:
|
|
ccache: true
|
|
directories:
|
|
- $HOME/cache
|
|
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/build_depends.sh
|
|
|
|
buildsrc: &buildsrc
|
|
stage: build src
|
|
script:
|
|
- $DOCKER_RUN_IN_BUILDER ./ci/build_depends.sh
|
|
- $DOCKER_RUN_IN_BUILDER ./ci/build_src.sh
|
|
|
|
runtests: &runtests
|
|
stage: run tests
|
|
script:
|
|
- $DOCKER_RUN_IN_BUILDER ./ci/build_depends.sh
|
|
- $DOCKER_RUN_IN_BUILDER ./ci/build_src.sh
|
|
- $DOCKER_RUN_IN_BUILDER ./ci/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/build_depends.sh && $DOCKER_RUN_IN_BUILDER ./ci/build_src.sh && BUILD_DIR=build-ci/dashcore-$BUILD_TARGET ./docker/build-docker.sh; fi
|
|
|
|
- MAKEJOBS=-j3
|
|
- RUN_UNIT_TESTS=true
|
|
- RUN_FUNCTIONAL_TESTS=true
|
|
- RUN_BENCH=false # Set to true for any one job that has debug enabled, to quickly check bench is not crashing or hitting assertions
|
|
- RUN_FUZZ_TESTS=false
|
|
- DOCKER_NAME_TAG=ubuntu:18.04
|
|
- BOOST_TEST_RANDOM=1$TRAVIS_BUILD_ID
|
|
- CCACHE_SIZE=100M
|
|
- CCACHE_TEMPDIR=/tmp/.ccache-temp
|
|
- CCACHE_COMPRESS=1
|
|
- CCACHE_DIR=$HOME/.ccache
|
|
- BASE_OUTDIR=$TRAVIS_BUILD_DIR/out
|
|
- SDK_URL=https://bitcoincore.org/depends-sources/sdks
|
|
- WINEDEBUG=fixme-all
|
|
- DOCKER_PACKAGES="build-essential libtool autotools-dev automake pkg-config bsdmainutils curl git ca-certificates ccache"
|
|
before_install:
|
|
- set -o errexit; source .travis/test_03_before_install.sh
|
|
install:
|
|
- set -o errexit; source .travis/test_04_install.sh
|
|
before_script:
|
|
- set -o errexit; source .travis/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
|
|
- echo $TRAVIS_COMMIT_LOG
|
|
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-linux32
|
|
env: BUILD_TARGET=linux32
|
|
- <<: *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-linux32
|
|
env: BUILD_TARGET=linux32
|
|
- <<: *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-linux32
|
|
env: BUILD_TARGET=linux32
|
|
- <<: *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=$TRAVIS_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:bionic
|
|
- 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 ci/Dockerfile.builder 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: Check keys and signed commits
|
|
#- if [ "$TRAVIS_REPO_SLUG" = "dashpay/dash" -a "$TRAVIS_PULL_REQUEST" = "false" ]; then while read LINE; do travis_retry gpg --keyserver hkp://subset.pool.sks-keyservers.net --recv-keys $LINE; done < 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 && ./docker/push-docker.sh; fi
|
|
- stage: lint
|
|
name: 'lint'
|
|
env:
|
|
cache: false
|
|
language: python
|
|
python: '3.5' # Oldest supported version according to doc/dependencies.md
|
|
install:
|
|
- set -o errexit; source .travis/lint_04_install.sh
|
|
before_script:
|
|
- set -o errexit; source .travis/lint_05_before_script.sh
|
|
script:
|
|
- set -o errexit; source .travis/lint_06_script.sh
|
|
|
|
- stage: test
|
|
name: 'ARM [GOAL: install] [no unit or functional tests]'
|
|
env: >-
|
|
HOST=arm-linux-gnueabihf
|
|
PACKAGES="python3 g++-arm-linux-gnueabihf"
|
|
RUN_UNIT_TESTS=false
|
|
RUN_FUNCTIONAL_TESTS=false
|
|
GOAL="install"
|
|
BITCOIN_CONFIG="--enable-glibc-back-compat --enable-reduce-exports"
|
|
|
|
- stage: test
|
|
name: 'Win64 [GOAL: deploy] [no gui tests]'
|
|
env: >-
|
|
HOST=x86_64-w64-mingw32
|
|
PACKAGES="python3 nsis g++-mingw-w64-x86-64 wine-binfmt wine64"
|
|
GOAL="deploy"
|
|
BITCOIN_CONFIG="--enable-reduce-exports --disable-gui-tests"
|
|
|
|
- stage: test
|
|
name: '32-bit + dash [GOAL: install] [GUI: no BIP70]'
|
|
env: >-
|
|
HOST=i686-pc-linux-gnu
|
|
PACKAGES="g++-multilib python3-zmq"
|
|
GOAL="install"
|
|
BITCOIN_CONFIG="--enable-zmq --with-gui=qt5 --disable-bip70 --enable-glibc-back-compat --enable-reduce-exports LDFLAGS=-static-libstdc++"
|
|
CONFIG_SHELL="/bin/dash"
|
|
|
|
- stage: test
|
|
name: 'x86_64 Linux [GOAL: install] [bionic] [uses qt5 dev package instead of depends Qt to speed up build and avoid timeout] [unsigned char]'
|
|
env: >-
|
|
HOST=x86_64-unknown-linux-gnu
|
|
PACKAGES="python3-zmq qtbase5-dev qttools5-dev-tools protobuf-compiler libdbus-1-dev libharfbuzz-dev libprotobuf-dev"
|
|
DEP_OPTS="NO_QT=1 NO_UPNP=1 DEBUG=1 ALLOW_HOST_PACKAGES=1"
|
|
GOAL="install"
|
|
BITCOIN_CONFIG="--enable-zmq --with-gui=qt5 --enable-glibc-back-compat --enable-reduce-exports --enable-debug CFLAGS=\"-g0 -O2 -funsigned-char\" CXXFLAGS=\"-g0 -O2 -funsigned-char\""
|
|
|
|
- stage: test
|
|
name: 'x86_64 Linux [GOAL: install] [trusty] [depends for now]'
|
|
env: >-
|
|
HOST=x86_64-unknown-linux-gnu
|
|
DOCKER_NAME_TAG=ubuntu:14.04
|
|
PACKAGES="python3-zmq qtbase5-dev qttools5-dev-tools libicu-dev libpng-dev libssl-dev libevent-dev bsdmainutils libboost-system-dev libboost-filesystem-dev libboost-chrono-dev libboost-test-dev libboost-thread-dev libdb5.1++-dev libminiupnpc-dev libzmq3-dev libprotobuf-dev protobuf-compiler libqrencode-dev"
|
|
RUN_FUNCTIONAL_TESTS=false
|
|
GOAL="install"
|
|
BITCOIN_CONFIG="--enable-zmq --with-incompatible-bdb --with-gui=no"
|
|
|
|
- stage: test
|
|
name: 'x86_64 Linux [GOAL: install] [xenial] [no depends, only system libs, sanitizers: thread (TSan), no wallet]'
|
|
env: >-
|
|
HOST=x86_64-unknown-linux-gnu
|
|
DOCKER_NAME_TAG=ubuntu:16.04
|
|
PACKAGES="clang llvm python3-zmq qtbase5-dev qttools5-dev-tools libssl-dev libevent-dev bsdmainutils libboost-system-dev libboost-filesystem-dev libboost-chrono-dev libboost-test-dev libboost-thread-dev libdb5.3++-dev libminiupnpc-dev libzmq3-dev libprotobuf-dev protobuf-compiler libqrencode-dev"
|
|
NO_DEPENDS=1
|
|
RUN_FUNCTIONAL_TESTS=false # Disabled for now. TODO identify suppressions or exclude specific tests
|
|
GOAL="install"
|
|
BITCOIN_CONFIG="--enable-zmq --with-incompatible-bdb --with-gui=qt5 CPPFLAGS=-DDEBUG_LOCKORDER --with-sanitizers=thread --disable-hardening --disable-asm CC=clang CXX=clang++"
|
|
|
|
- stage: test
|
|
name: 'x86_64 Linux [GOAL: install] [bionic] [no depends, only system libs, sanitizers: address/leak (ASan + LSan) + undefined (UBSan) + integer]'
|
|
env: >-
|
|
HOST=x86_64-unknown-linux-gnu
|
|
PACKAGES="clang llvm python3-zmq qtbase5-dev qttools5-dev-tools libssl1.0-dev libevent-dev bsdmainutils libboost-system-dev libboost-filesystem-dev libboost-chrono-dev libboost-test-dev libboost-thread-dev libdb5.3++-dev libminiupnpc-dev libzmq3-dev libprotobuf-dev protobuf-compiler libqrencode-dev"
|
|
NO_DEPENDS=1
|
|
RUN_BENCH=true
|
|
GOAL="install"
|
|
BITCOIN_CONFIG="--enable-zmq --with-incompatible-bdb --with-gui=qt5 CPPFLAGS=-DDEBUG_LOCKORDER --with-sanitizers=integer,undefined CC=clang CXX=clang++"
|
|
|
|
- stage: test
|
|
name: 'x86_64 Linux [GOAL: install] [bionic] [no wallet]'
|
|
env: >-
|
|
HOST=x86_64-unknown-linux-gnu
|
|
PACKAGES="clang llvm python3 libssl1.0-dev libevent-dev bsdmainutils libboost-system-dev libboost-filesystem-dev libboost-chrono-dev libboost-test-dev libboost-thread-dev"
|
|
NO_DEPENDS=1
|
|
RUN_UNIT_TESTS=false
|
|
RUN_FUNCTIONAL_TESTS=false
|
|
RUN_FUZZ_TESTS=true
|
|
GOAL="install"
|
|
BITCOIN_CONFIG="--disable-wallet --disable-bench --with-utils=no --with-daemon=no --with-libs=no --with-gui=no --enable-fuzz --with-sanitizers=fuzzer,address CC=clang CXX=clang++"
|
|
|
|
- stage: test
|
|
env: >-
|
|
HOST=x86_64-unknown-linux-gnu
|
|
PACKAGES="python3"
|
|
DEP_OPTS="NO_WALLET=1"
|
|
GOAL="install"
|
|
BITCOIN_CONFIG="--enable-glibc-back-compat --enable-reduce-exports"
|
|
|
|
- stage: test
|
|
name: 'macOS 10.12 [GOAL: deploy]'
|
|
env: >-
|
|
HOST=x86_64-apple-darwin18
|
|
PACKAGES="cmake imagemagick libcap-dev librsvg2-bin libz-dev libbz2-dev libtiff-tools python3-dev python3-setuptools"
|
|
export XCODE_VERSION=11.3.1
|
|
export XCODE_BUILD_ID=11C505
|
|
RUN_UNIT_TESTS=false
|
|
RUN_FUNCTIONAL_TESTS=false
|
|
GOAL="deploy"
|
|
BITCOIN_CONFIG="--enable-gui --enable-reduce-exports --enable-werror"
|