aboutsummaryrefslogtreecommitdiff
path: root/ci
diff options
context:
space:
mode:
Diffstat (limited to 'ci')
-rw-r--r--ci/README.md4
-rw-r--r--ci/lint/Dockerfile2
-rwxr-xr-xci/test/00_setup_env.sh1
-rwxr-xr-xci/test/00_setup_env_i686_centos.sh7
-rwxr-xr-xci/test/00_setup_env_native_asan.sh11
-rwxr-xr-xci/test/00_setup_env_native_nowallet_libbitcoinkernel.sh11
-rwxr-xr-xci/test/00_setup_env_native_qt5.sh12
-rwxr-xr-xci/test/00_setup_env_native_tidy.sh2
-rwxr-xr-xci/test/01_base_install.sh12
-rwxr-xr-xci/test/04_install.sh40
-rwxr-xr-xci/test/05_before_script.sh29
-rwxr-xr-xci/test/06_script_a.sh68
-rwxr-xr-xci/test/06_script_b.sh213
-rwxr-xr-xci/test_run_all.sh10
14 files changed, 174 insertions, 248 deletions
diff --git a/ci/README.md b/ci/README.md
index de798607df..d014565f44 100644
--- a/ci/README.md
+++ b/ci/README.md
@@ -14,10 +14,10 @@ testing compared to other parts of the codebase. If you want to keep the work tr
system in a virtual machine with a Linux operating system of your choice.
To allow for a wide range of tested environments, but also ensure reproducibility to some extent, the test stage
-requires `docker` to be installed. To install all requirements on Ubuntu, run
+requires `bash`, `docker`, and `python3` to be installed. To install all requirements on Ubuntu, run
```
-sudo apt install docker.io bash
+sudo apt install bash docker.io python3
```
To run the default test stage,
diff --git a/ci/lint/Dockerfile b/ci/lint/Dockerfile
index 03c20c7286..a0a4516480 100644
--- a/ci/lint/Dockerfile
+++ b/ci/lint/Dockerfile
@@ -5,7 +5,7 @@
# entire repo as docker context during build; if it lived elsewhere, it wouldn't be
# able to make back-references to pull in the install scripts. So here it lives.
-FROM python:3.7-buster
+FROM python:3.8-buster
ENV DEBIAN_FRONTEND=noninteractive
ENV LC_ALL=C.UTF-8
diff --git a/ci/test/00_setup_env.sh b/ci/test/00_setup_env.sh
index 4a54f47b03..d98f05ca6b 100755
--- a/ci/test/00_setup_env.sh
+++ b/ci/test/00_setup_env.sh
@@ -37,7 +37,6 @@ export USE_BUSY_BOX=${USE_BUSY_BOX:-false}
export RUN_UNIT_TESTS=${RUN_UNIT_TESTS:-true}
export RUN_FUNCTIONAL_TESTS=${RUN_FUNCTIONAL_TESTS:-true}
export RUN_TIDY=${RUN_TIDY:-false}
-export RUN_SECURITY_TESTS=${RUN_SECURITY_TESTS:-false}
# By how much to scale the test_runner timeouts (option --timeout-factor).
# This is needed because some ci machines have slow CPU or disk, so sanitizers
# might be slow or a reindex might be waiting on disk IO.
diff --git a/ci/test/00_setup_env_i686_centos.sh b/ci/test/00_setup_env_i686_centos.sh
index 8a931d44e5..606c28e252 100755
--- a/ci/test/00_setup_env_i686_centos.sh
+++ b/ci/test/00_setup_env_i686_centos.sh
@@ -8,11 +8,10 @@ export LC_ALL=C.UTF-8
export HOST=i686-pc-linux-gnu
export CONTAINER_NAME=ci_i686_centos
-export CI_IMAGE_NAME_TAG=quay.io/centos/centos:stream8
-export CI_BASE_PACKAGES="gcc-c++ glibc-devel.x86_64 libstdc++-devel.x86_64 glibc-devel.i686 libstdc++-devel.i686 ccache libtool make git python38 python38-pip which patch lbzip2 xz procps-ng dash rsync coreutils bison"
+export CI_IMAGE_NAME_TAG="quay.io/centos/centos:stream9"
+export CI_BASE_PACKAGES="gcc-c++ glibc-devel.x86_64 libstdc++-devel.x86_64 glibc-devel.i686 libstdc++-devel.i686 ccache libtool make git python3 python3-pip which patch lbzip2 xz procps-ng dash rsync coreutils bison util-linux"
export PIP_PACKAGES="pyzmq"
export GOAL="install"
-export NO_WERROR=1 # GCC 8
+export NO_WERROR=1 # Suppress error: #warning _FORTIFY_SOURCE > 2 is treated like 2 on this platform [-Werror=cpp]
export BITCOIN_CONFIG="--enable-zmq --with-gui=qt5 --enable-reduce-exports"
export CONFIG_SHELL="/bin/dash"
-export TEST_RUNNER_ENV="LC_ALL=en_US.UTF-8"
diff --git a/ci/test/00_setup_env_native_asan.sh b/ci/test/00_setup_env_native_asan.sh
index bb3f6997f3..8701d383dd 100755
--- a/ci/test/00_setup_env_native_asan.sh
+++ b/ci/test/00_setup_env_native_asan.sh
@@ -8,19 +8,14 @@ export LC_ALL=C.UTF-8
# Only install BCC tracing packages in Cirrus CI.
if [[ "${CIRRUS_CI}" == "true" ]]; then
- # We install an up-to-date 'bpfcc-tools' package from an untrusted PPA.
- # This can be dropped with the next Ubuntu or Debian release that includes up-to-date packages.
- # See the if-then in ci/test/04_install.sh too.
- export ADD_UNTRUSTED_BPFCC_PPA=true
export BPFCC_PACKAGE="bpfcc-tools"
else
- export ADD_UNTRUSTED_BPFCC_PPA=false
export BPFCC_PACKAGE=""
fi
export CONTAINER_NAME=ci_native_asan
-export PACKAGES="systemtap-sdt-dev clang llvm python3-zmq qtbase5-dev qttools5-dev-tools libevent-dev bsdmainutils libboost-dev libdb5.3++-dev libminiupnpc-dev libnatpmp-dev libzmq3-dev libqrencode-dev libsqlite3-dev ${BPFCC_PACKAGE}"
-export CI_IMAGE_NAME_TAG=ubuntu:22.04
+export PACKAGES="systemtap-sdt-dev clang-16 llvm-16 libclang-rt-16-dev python3-zmq qtbase5-dev qttools5-dev-tools libevent-dev bsdmainutils libboost-dev libdb5.3++-dev libminiupnpc-dev libnatpmp-dev libzmq3-dev libqrencode-dev libsqlite3-dev ${BPFCC_PACKAGE}"
+export CI_IMAGE_NAME_TAG=ubuntu:23.04 # Version 23.04 will reach EOL in Jan 2024, and can be replaced by "ubuntu:24.04" (or anything else that ships the wanted clang version).
export NO_DEPENDS=1
export GOAL="install"
-export BITCOIN_CONFIG="--enable-c++20 --enable-usdt --enable-zmq --with-incompatible-bdb --with-gui=qt5 CPPFLAGS='-DARENA_DEBUG -DDEBUG_LOCKORDER' --with-sanitizers=address,integer,undefined CC=clang CXX=clang++"
+export BITCOIN_CONFIG="--enable-c++20 --enable-usdt --enable-zmq --with-incompatible-bdb --with-gui=qt5 CPPFLAGS='-DARENA_DEBUG -DDEBUG_LOCKORDER' --with-sanitizers=address,integer,undefined CC=clang-16 CXX=clang++-16"
diff --git a/ci/test/00_setup_env_native_nowallet_libbitcoinkernel.sh b/ci/test/00_setup_env_native_nowallet_libbitcoinkernel.sh
index 3fdb49765c..8e3c935c6f 100755
--- a/ci/test/00_setup_env_native_nowallet_libbitcoinkernel.sh
+++ b/ci/test/00_setup_env_native_nowallet_libbitcoinkernel.sh
@@ -7,10 +7,9 @@
export LC_ALL=C.UTF-8
export CONTAINER_NAME=ci_native_nowallet_libbitcoinkernel
-export CI_IMAGE_NAME_TAG=ubuntu:focal
-# Use minimum supported python3.7 (or python3.8, as best-effort) and clang-8, see doc/dependencies.md
-export PACKAGES="python3-zmq clang-8 llvm-8 libc++abi-8-dev libc++-8-dev"
-export DEP_OPTS="NO_WALLET=1 CC=clang-8 CXX='clang++-8 -stdlib=libc++'"
+export CI_IMAGE_NAME_TAG="ubuntu:20.04"
+# Use minimum supported python3.8 and clang-10, see doc/dependencies.md
+export PACKAGES="python3-zmq clang-10 llvm-10 libc++abi-10-dev libc++-10-dev"
+export DEP_OPTS="NO_WALLET=1 CC=clang-10 CXX='clang++-10 -stdlib=libc++'"
export GOAL="install"
-export NO_WERROR=1
-export BITCOIN_CONFIG="--enable-reduce-exports CC=clang-8 CXX='clang++-8 -stdlib=libc++' --enable-experimental-util-chainstate --with-experimental-kernel-lib --enable-shared"
+export BITCOIN_CONFIG="--enable-reduce-exports --enable-experimental-util-chainstate --with-experimental-kernel-lib --enable-shared"
diff --git a/ci/test/00_setup_env_native_qt5.sh b/ci/test/00_setup_env_native_qt5.sh
index 5cc0addd33..bb10a2a2de 100755
--- a/ci/test/00_setup_env_native_qt5.sh
+++ b/ci/test/00_setup_env_native_qt5.sh
@@ -7,15 +7,15 @@
export LC_ALL=C.UTF-8
export CONTAINER_NAME=ci_native_qt5
-export CI_IMAGE_NAME_TAG=debian:buster
-# Use minimum supported python3.7 and gcc-8, see doc/dependencies.md
-export PACKAGES="gcc-8 g++-8 python3-zmq qtbase5-dev qttools5-dev-tools libdbus-1-dev libharfbuzz-dev"
-export DEP_OPTS="NO_QT=1 NO_UPNP=1 NO_NATPMP=1 DEBUG=1 ALLOW_HOST_PACKAGES=1 CC=gcc-8 CXX=g++-8"
+export CI_IMAGE_NAME_TAG="ubuntu:20.04"
+# Use minimum supported python3.8 and gcc-9, see doc/dependencies.md
+export PACKAGES="gcc-9 g++-9 python3-zmq qtbase5-dev qttools5-dev-tools libdbus-1-dev libharfbuzz-dev"
+export DEP_OPTS="NO_QT=1 NO_UPNP=1 NO_NATPMP=1 DEBUG=1 ALLOW_HOST_PACKAGES=1 CC=gcc-9 CXX=g++-9"
export TEST_RUNNER_EXTRA="--previous-releases --coverage --extended --exclude feature_dbcrash" # Run extended tests so that coverage does not fail, but exclude the very slow dbcrash
export RUN_UNIT_TESTS_SEQUENTIAL="true"
export RUN_UNIT_TESTS="false"
export GOAL="install"
-export NO_WERROR=1
+export NO_WERROR=1 # -Werror=maybe-uninitialized
export DOWNLOAD_PREVIOUS_RELEASES="true"
export BITCOIN_CONFIG="--enable-zmq --with-libs=no --with-gui=qt5 --enable-reduce-exports \
---enable-debug CFLAGS=\"-g0 -O2 -funsigned-char\" CXXFLAGS=\"-g0 -O2 -funsigned-char\" CC=gcc-8 CXX=g++-8"
+--enable-debug CFLAGS=\"-g0 -O2 -funsigned-char\" CXXFLAGS=\"-g0 -O2 -funsigned-char\""
diff --git a/ci/test/00_setup_env_native_tidy.sh b/ci/test/00_setup_env_native_tidy.sh
index 2fa61b8465..5c642b0d96 100755
--- a/ci/test/00_setup_env_native_tidy.sh
+++ b/ci/test/00_setup_env_native_tidy.sh
@@ -8,7 +8,7 @@ export LC_ALL=C.UTF-8
export CI_IMAGE_NAME_TAG="ubuntu:lunar" # Version 23.04 will reach EOL in Jan 2024, and can be replaced by "ubuntu:24.04" (or anything else that ships the wanted clang version).
export CONTAINER_NAME=ci_native_tidy
-export PACKAGES="clang-16 libclang-16-dev llvm-16-dev libomp-16-dev clang-tidy-16 bear cmake libevent-dev libboost-dev libminiupnpc-dev libnatpmp-dev libzmq3-dev systemtap-sdt-dev libqt5gui5 libqt5core5a libqt5dbus5 qttools5-dev qttools5-dev-tools libqrencode-dev libsqlite3-dev libdb++-dev"
+export PACKAGES="clang-16 libclang-16-dev llvm-16-dev libomp-16-dev clang-tidy-16 jq bear cmake libevent-dev libboost-dev libminiupnpc-dev libnatpmp-dev libzmq3-dev systemtap-sdt-dev libqt5gui5 libqt5core5a libqt5dbus5 qttools5-dev qttools5-dev-tools libqrencode-dev libsqlite3-dev libdb++-dev"
export NO_DEPENDS=1
export RUN_UNIT_TESTS=false
export RUN_FUNCTIONAL_TESTS=false
diff --git a/ci/test/01_base_install.sh b/ci/test/01_base_install.sh
index d7ff80d972..beb5aa9242 100755
--- a/ci/test/01_base_install.sh
+++ b/ci/test/01_base_install.sh
@@ -18,17 +18,9 @@ if [ -n "$DPKG_ADD_ARCH" ]; then
fi
if [[ $CI_IMAGE_NAME_TAG == *centos* ]]; then
- ${CI_RETRY_EXE} bash -c "dnf -y install epel-release"
- ${CI_RETRY_EXE} bash -c "dnf -y --allowerasing install $CI_BASE_PACKAGES $PACKAGES"
+ bash -c "dnf -y install epel-release"
+ bash -c "dnf -y --allowerasing install $CI_BASE_PACKAGES $PACKAGES"
elif [ "$CI_USE_APT_INSTALL" != "no" ]; then
- if [[ "${ADD_UNTRUSTED_BPFCC_PPA}" == "true" ]]; then
- # Ubuntu 22.04 LTS and Debian 11 both have an outdated bpfcc-tools packages.
- # The iovisor PPA is outdated as well. The next Ubuntu and Debian releases will contain updated
- # packages. Meanwhile, use an untrusted PPA to install an up-to-date version of the bpfcc-tools
- # package.
- # TODO: drop this once we can use newer images in GCE
- add-apt-repository ppa:hadret/bpfcc
- fi
if [[ -n "${APPEND_APT_SOURCES_LIST}" ]]; then
echo "${APPEND_APT_SOURCES_LIST}" >> /etc/apt/sources.list
fi
diff --git a/ci/test/04_install.sh b/ci/test/04_install.sh
index 1024222e96..e9c54139a7 100755
--- a/ci/test/04_install.sh
+++ b/ci/test/04_install.sh
@@ -18,7 +18,6 @@ export ASAN_OPTIONS="detect_stack_use_after_return=1:check_initialization_order=
export LSAN_OPTIONS="suppressions=${BASE_ROOT_DIR}/test/sanitizer_suppressions/lsan"
export TSAN_OPTIONS="suppressions=${BASE_ROOT_DIR}/test/sanitizer_suppressions/tsan:halt_on_error=1:log_path=${BASE_SCRATCH_DIR}/sanitizer-output/tsan"
export UBSAN_OPTIONS="suppressions=${BASE_ROOT_DIR}/test/sanitizer_suppressions/ubsan:print_stacktrace=1:halt_on_error=1:report_error_type=1"
-env | grep -E '^(BITCOIN_CONFIG|BASE_|QEMU_|CCACHE_|LC_ALL|BOOST_TEST_RANDOM|DEBIAN_FRONTEND|CONFIG_SHELL|(ASAN|LSAN|TSAN|UBSAN)_OPTIONS|PREVIOUS_RELEASES_DIR)' | tee /tmp/env
if [[ $BITCOIN_CONFIG = *--with-sanitizers=*address* ]]; then # If ran with (ASan + LSan), Docker needs access to ptrace (https://github.com/google/sanitizers/issues/764)
CI_CONTAINER_CAP="--cap-add SYS_PTRACE"
fi
@@ -27,6 +26,9 @@ export P_CI_DIR="$PWD"
export BINS_SCRATCH_DIR="${BASE_SCRATCH_DIR}/bins/"
if [ -z "$DANGER_RUN_CI_ON_HOST" ]; then
+ # Export all env vars to avoid missing some.
+ # Though, exclude those with newlines to avoid parsing problems.
+ python3 -c 'import os; [print(f"{key}={value}") for key, value in os.environ.items() if "\n" not in value]' | tee /tmp/env
echo "Creating $CI_IMAGE_NAME_TAG container to run in"
DOCKER_BUILDKIT=1 ${CI_RETRY_EXE} docker build \
--file "${BASE_ROOT_DIR}/ci/test_imagefile" \
@@ -72,39 +74,3 @@ CI_EXEC rsync --archive --stats --human-readable /ro_base/ "${BASE_ROOT_DIR}" ||
CI_EXEC git config --global --add safe.directory \"*\"
CI_EXEC mkdir -p "${BINS_SCRATCH_DIR}"
-
-if [ "$CI_OS_NAME" == "macos" ]; then
- top -l 1 -s 0 | awk ' /PhysMem/ {print}'
- echo "Number of CPUs: $(sysctl -n hw.logicalcpu)"
-else
- CI_EXEC free -m -h
- CI_EXEC echo "Number of CPUs \(nproc\):" \$\(nproc\)
- CI_EXEC echo "$(lscpu | grep Endian)"
-fi
-CI_EXEC echo "Free disk space:"
-CI_EXEC df -h
-
-if [ "$RUN_FUZZ_TESTS" = "true" ]; then
- export DIR_FUZZ_IN=${DIR_QA_ASSETS}/fuzz_seed_corpus/
- if [ ! -d "$DIR_FUZZ_IN" ]; then
- CI_EXEC git clone --depth=1 https://github.com/bitcoin-core/qa-assets "${DIR_QA_ASSETS}"
- fi
-elif [ "$RUN_UNIT_TESTS" = "true" ] || [ "$RUN_UNIT_TESTS_SEQUENTIAL" = "true" ]; then
- export DIR_UNIT_TEST_DATA=${DIR_QA_ASSETS}/unit_test_data/
- if [ ! -d "$DIR_UNIT_TEST_DATA" ]; then
- CI_EXEC mkdir -p "$DIR_UNIT_TEST_DATA"
- CI_EXEC curl --location --fail https://github.com/bitcoin-core/qa-assets/raw/main/unit_test_data/script_assets_test.json -o "${DIR_UNIT_TEST_DATA}/script_assets_test.json"
- fi
-fi
-
-CI_EXEC mkdir -p "${BASE_SCRATCH_DIR}/sanitizer-output/"
-
-if [ "$USE_BUSY_BOX" = "true" ]; then
- echo "Setup to use BusyBox utils"
- # tar excluded for now because it requires passing in the exact archive type in ./depends (fixed in later BusyBox version)
- # ar excluded for now because it does not recognize the -q option in ./depends (unknown if fixed)
- # shellcheck disable=SC1010
- CI_EXEC for util in \$\(busybox --list \| grep -v "^ar$" \| grep -v "^tar$" \)\; do ln -s \$\(command -v busybox\) "${BINS_SCRATCH_DIR}/\$util"\; done
- # Print BusyBox version
- CI_EXEC patch --help
-fi
diff --git a/ci/test/05_before_script.sh b/ci/test/05_before_script.sh
deleted file mode 100755
index 199cdd64a7..0000000000
--- a/ci/test/05_before_script.sh
+++ /dev/null
@@ -1,29 +0,0 @@
-#!/usr/bin/env bash
-#
-# Copyright (c) 2018-2022 The Bitcoin Core developers
-# Distributed under the MIT software license, see the accompanying
-# file COPYING or http://www.opensource.org/licenses/mit-license.php.
-
-export LC_ALL=C.UTF-8
-
-# Make sure default datadir does not exist and is never read by creating a dummy file
-if [ "$CI_OS_NAME" == "macos" ]; then
- echo > "${HOME}/Library/Application Support/Bitcoin"
-else
- CI_EXEC echo \> \$HOME/.bitcoin
-fi
-
-if [ -z "$NO_DEPENDS" ]; then
- if [[ $CI_IMAGE_NAME_TAG == *centos* ]]; then
- # CentOS has problems building the depends if the config shell is not explicitly set
- # (i.e. for libevent a Makefile with an empty SHELL variable is generated, leading to
- # an error as the first command is executed)
- SHELL_OPTS="LC_ALL=en_US.UTF-8 CONFIG_SHELL=/bin/dash"
- else
- SHELL_OPTS="CONFIG_SHELL="
- fi
- CI_EXEC "$SHELL_OPTS" make "$MAKEJOBS" -C depends HOST="$HOST" "$DEP_OPTS" LOG=1
-fi
-if [ "$DOWNLOAD_PREVIOUS_RELEASES" = "true" ]; then
- CI_EXEC test/get_previous_releases.py -b -t "$PREVIOUS_RELEASES_DIR"
-fi
diff --git a/ci/test/06_script_a.sh b/ci/test/06_script_a.sh
deleted file mode 100755
index 5856d33d2d..0000000000
--- a/ci/test/06_script_a.sh
+++ /dev/null
@@ -1,68 +0,0 @@
-#!/usr/bin/env bash
-#
-# Copyright (c) 2018-2022 The Bitcoin Core developers
-# Distributed under the MIT software license, see the accompanying
-# file COPYING or http://www.opensource.org/licenses/mit-license.php.
-
-export LC_ALL=C.UTF-8
-
-BITCOIN_CONFIG_ALL="--enable-suppress-external-warnings --disable-dependency-tracking"
-if [ -z "$NO_DEPENDS" ]; then
- BITCOIN_CONFIG_ALL="${BITCOIN_CONFIG_ALL} CONFIG_SITE=$DEPENDS_DIR/$HOST/share/config.site"
-fi
-if [ -z "$NO_WERROR" ]; then
- BITCOIN_CONFIG_ALL="${BITCOIN_CONFIG_ALL} --enable-werror"
-fi
-
-CI_EXEC "ccache --zero-stats --max-size=$CCACHE_SIZE"
-PRINT_CCACHE_STATISTICS="ccache --version | head -n 1 && ccache --show-stats"
-
-if [ -n "$ANDROID_TOOLS_URL" ]; then
- CI_EXEC make distclean || true
- CI_EXEC ./autogen.sh
- CI_EXEC ./configure "$BITCOIN_CONFIG_ALL" "$BITCOIN_CONFIG" || ( (CI_EXEC cat config.log) && false)
- CI_EXEC "make $MAKEJOBS && cd src/qt && ANDROID_HOME=${ANDROID_HOME} ANDROID_NDK_HOME=${ANDROID_NDK_HOME} make apk"
- CI_EXEC "${PRINT_CCACHE_STATISTICS}"
- exit 0
-fi
-
-BITCOIN_CONFIG_ALL="${BITCOIN_CONFIG_ALL} --enable-external-signer --prefix=$BASE_OUTDIR"
-
-if [ -n "$CONFIG_SHELL" ]; then
- CI_EXEC "$CONFIG_SHELL" -c "./autogen.sh"
-else
- CI_EXEC ./autogen.sh
-fi
-
-CI_EXEC mkdir -p "${BASE_BUILD_DIR}"
-export P_CI_DIR="${BASE_BUILD_DIR}"
-
-CI_EXEC "${BASE_ROOT_DIR}/configure" --cache-file=config.cache "$BITCOIN_CONFIG_ALL" "$BITCOIN_CONFIG" || ( (CI_EXEC cat config.log) && false)
-
-CI_EXEC make distdir VERSION="$HOST"
-
-export P_CI_DIR="${BASE_BUILD_DIR}/bitcoin-$HOST"
-
-CI_EXEC ./configure --cache-file=../config.cache "$BITCOIN_CONFIG_ALL" "$BITCOIN_CONFIG" || ( (CI_EXEC cat config.log) && false)
-
-set -o errtrace
-trap 'CI_EXEC "cat ${BASE_SCRATCH_DIR}/sanitizer-output/* 2> /dev/null"' ERR
-
-if [[ ${USE_MEMORY_SANITIZER} == "true" ]]; then
- # MemorySanitizer (MSAN) does not support tracking memory initialization done by
- # using the Linux getrandom syscall. Avoid using getrandom by undefining
- # HAVE_SYS_GETRANDOM. See https://github.com/google/sanitizers/issues/852 for
- # details.
- CI_EXEC 'grep -v HAVE_SYS_GETRANDOM src/config/bitcoin-config.h > src/config/bitcoin-config.h.tmp && mv src/config/bitcoin-config.h.tmp src/config/bitcoin-config.h'
-fi
-
-if [[ "${RUN_TIDY}" == "true" ]]; then
- MAYBE_BEAR="bear --config src/.bear-tidy-config"
- MAYBE_TOKEN="--"
-fi
-
-CI_EXEC "${MAYBE_BEAR}" "${MAYBE_TOKEN}" make "$MAKEJOBS" "$GOAL" || ( echo "Build failure. Verbose build follows." && CI_EXEC make "$GOAL" V=1 ; false )
-
-CI_EXEC "${PRINT_CCACHE_STATISTICS}"
-CI_EXEC du -sh "${DEPENDS_DIR}"/*/
-CI_EXEC du -sh "${PREVIOUS_RELEASES_DIR}"
diff --git a/ci/test/06_script_b.sh b/ci/test/06_script_b.sh
index e0fae18b8e..ce5163caa8 100755
--- a/ci/test/06_script_b.sh
+++ b/ci/test/06_script_b.sh
@@ -6,101 +6,170 @@
export LC_ALL=C.UTF-8
+set -ex
+
+if [ "$CI_OS_NAME" == "macos" ]; then
+ top -l 1 -s 0 | awk ' /PhysMem/ {print}'
+ echo "Number of CPUs: $(sysctl -n hw.logicalcpu)"
+else
+ free -m -h
+ echo "Number of CPUs (nproc): $(nproc)"
+ lscpu | grep Endian
+fi
+echo "Free disk space:"
+df -h
+
+if [ "$RUN_FUZZ_TESTS" = "true" ]; then
+ export DIR_FUZZ_IN=${DIR_QA_ASSETS}/fuzz_seed_corpus/
+ if [ ! -d "$DIR_FUZZ_IN" ]; then
+ git clone --depth=1 https://github.com/bitcoin-core/qa-assets "${DIR_QA_ASSETS}"
+ fi
+ (
+ cd "${DIR_QA_ASSETS}"
+ echo "Using qa-assets repo from commit ..."
+ git log -1
+ )
+elif [ "$RUN_UNIT_TESTS" = "true" ] || [ "$RUN_UNIT_TESTS_SEQUENTIAL" = "true" ]; then
+ export DIR_UNIT_TEST_DATA=${DIR_QA_ASSETS}/unit_test_data/
+ if [ ! -d "$DIR_UNIT_TEST_DATA" ]; then
+ mkdir -p "$DIR_UNIT_TEST_DATA"
+ curl --location --fail https://github.com/bitcoin-core/qa-assets/raw/main/unit_test_data/script_assets_test.json -o "${DIR_UNIT_TEST_DATA}/script_assets_test.json"
+ fi
+fi
+
+mkdir -p "${BASE_SCRATCH_DIR}/sanitizer-output/"
+
+if [ "$USE_BUSY_BOX" = "true" ]; then
+ echo "Setup to use BusyBox utils"
+ # tar excluded for now because it requires passing in the exact archive type in ./depends (fixed in later BusyBox version)
+ # ar excluded for now because it does not recognize the -q option in ./depends (unknown if fixed)
+ for util in $(busybox --list | grep -v "^ar$" | grep -v "^tar$" ); do ln -s "$(command -v busybox)" "${BINS_SCRATCH_DIR}/$util"; done
+ # Print BusyBox version
+ patch --help
+fi
+
+# Make sure default datadir does not exist and is never read by creating a dummy file
+if [ "$CI_OS_NAME" == "macos" ]; then
+ echo > "${HOME}/Library/Application Support/Bitcoin"
+else
+ echo > "${HOME}/.bitcoin"
+fi
+
+if [ -z "$NO_DEPENDS" ]; then
+ if [[ $CI_IMAGE_NAME_TAG == *centos* ]]; then
+ SHELL_OPTS="CONFIG_SHELL=/bin/dash"
+ else
+ SHELL_OPTS="CONFIG_SHELL="
+ fi
+ bash -c "$SHELL_OPTS make $MAKEJOBS -C depends HOST=$HOST $DEP_OPTS LOG=1"
+fi
+if [ "$DOWNLOAD_PREVIOUS_RELEASES" = "true" ]; then
+ test/get_previous_releases.py -b -t "$PREVIOUS_RELEASES_DIR"
+fi
+
+BITCOIN_CONFIG_ALL="--enable-suppress-external-warnings --disable-dependency-tracking"
+if [ -z "$NO_DEPENDS" ]; then
+ BITCOIN_CONFIG_ALL="${BITCOIN_CONFIG_ALL} CONFIG_SITE=$DEPENDS_DIR/$HOST/share/config.site"
+fi
+if [ -z "$NO_WERROR" ]; then
+ BITCOIN_CONFIG_ALL="${BITCOIN_CONFIG_ALL} --enable-werror"
+fi
+
+ccache --zero-stats --max-size="${CCACHE_SIZE}"
+PRINT_CCACHE_STATISTICS="ccache --version | head -n 1 && ccache --show-stats"
+
+if [ -n "$ANDROID_TOOLS_URL" ]; then
+ make distclean || true
+ ./autogen.sh
+ bash -c "./configure $BITCOIN_CONFIG_ALL $BITCOIN_CONFIG" || ( (cat config.log) && false)
+ make "${MAKEJOBS}" && cd src/qt && ANDROID_HOME=${ANDROID_HOME} ANDROID_NDK_HOME=${ANDROID_NDK_HOME} make apk
+ bash -c "${PRINT_CCACHE_STATISTICS}"
+ exit 0
+fi
+
+BITCOIN_CONFIG_ALL="${BITCOIN_CONFIG_ALL} --enable-external-signer --prefix=$BASE_OUTDIR"
+
+if [ -n "$CONFIG_SHELL" ]; then
+ "$CONFIG_SHELL" -c "./autogen.sh"
+else
+ ./autogen.sh
+fi
+
+mkdir -p "${BASE_BUILD_DIR}"
+cd "${BASE_BUILD_DIR}"
+
+bash -c "${BASE_ROOT_DIR}/configure --cache-file=config.cache $BITCOIN_CONFIG_ALL $BITCOIN_CONFIG" || ( (cat config.log) && false)
+
+make distdir VERSION="$HOST"
+
+cd "${BASE_BUILD_DIR}/bitcoin-$HOST"
+
+bash -c "./configure --cache-file=../config.cache $BITCOIN_CONFIG_ALL $BITCOIN_CONFIG" || ( (cat config.log) && false)
+
+if [[ "${RUN_TIDY}" == "true" ]]; then
+ MAYBE_BEAR="bear --config src/.bear-tidy-config"
+ MAYBE_TOKEN="--"
+fi
+
+bash -c "${MAYBE_BEAR} ${MAYBE_TOKEN} make $MAKEJOBS $GOAL" || ( echo "Build failure. Verbose build follows." && make "$GOAL" V=1 ; false )
+
+bash -c "${PRINT_CCACHE_STATISTICS}"
+du -sh "${DEPENDS_DIR}"/*/
+du -sh "${PREVIOUS_RELEASES_DIR}"
+
if [[ $HOST = *-mingw32 ]]; then
# Generate all binaries, so that they can be wrapped
- CI_EXEC make "$MAKEJOBS" -C src/secp256k1 VERBOSE=1
- CI_EXEC make "$MAKEJOBS" -C src minisketch/test.exe VERBOSE=1
- CI_EXEC "${BASE_ROOT_DIR}/ci/test/wrap-wine.sh"
+ make "$MAKEJOBS" -C src/secp256k1 VERBOSE=1
+ make "$MAKEJOBS" -C src minisketch/test.exe VERBOSE=1
+ "${BASE_ROOT_DIR}/ci/test/wrap-wine.sh"
fi
if [ -n "$QEMU_USER_CMD" ]; then
# Generate all binaries, so that they can be wrapped
- CI_EXEC make "$MAKEJOBS" -C src/secp256k1 VERBOSE=1
- CI_EXEC make "$MAKEJOBS" -C src minisketch/test VERBOSE=1
- CI_EXEC "${BASE_ROOT_DIR}/ci/test/wrap-qemu.sh"
+ make "$MAKEJOBS" -C src/secp256k1 VERBOSE=1
+ make "$MAKEJOBS" -C src minisketch/test VERBOSE=1
+ "${BASE_ROOT_DIR}/ci/test/wrap-qemu.sh"
fi
if [ -n "$USE_VALGRIND" ]; then
- CI_EXEC "${BASE_ROOT_DIR}/ci/test/wrap-valgrind.sh"
+ "${BASE_ROOT_DIR}/ci/test/wrap-valgrind.sh"
fi
if [ "$RUN_UNIT_TESTS" = "true" ]; then
- CI_EXEC "${TEST_RUNNER_ENV}" DIR_UNIT_TEST_DATA="${DIR_UNIT_TEST_DATA}" LD_LIBRARY_PATH="${DEPENDS_DIR}/${HOST}/lib" make "$MAKEJOBS" check VERBOSE=1
+ bash -c "${TEST_RUNNER_ENV} DIR_UNIT_TEST_DATA=${DIR_UNIT_TEST_DATA} LD_LIBRARY_PATH=${DEPENDS_DIR}/${HOST}/lib make $MAKEJOBS check VERBOSE=1"
fi
if [ "$RUN_UNIT_TESTS_SEQUENTIAL" = "true" ]; then
- CI_EXEC "${TEST_RUNNER_ENV}" DIR_UNIT_TEST_DATA="${DIR_UNIT_TEST_DATA}" LD_LIBRARY_PATH="${DEPENDS_DIR}/${HOST}/lib" "${BASE_OUTDIR}/bin/test_bitcoin" --catch_system_errors=no -l test_suite
+ bash -c "${TEST_RUNNER_ENV} DIR_UNIT_TEST_DATA=${DIR_UNIT_TEST_DATA} LD_LIBRARY_PATH=${DEPENDS_DIR}/${HOST}/lib ${BASE_OUTDIR}/bin/test_bitcoin --catch_system_errors=no -l test_suite"
fi
if [ "$RUN_FUNCTIONAL_TESTS" = "true" ]; then
- CI_EXEC LD_LIBRARY_PATH="${DEPENDS_DIR}/${HOST}/lib" "${TEST_RUNNER_ENV}" test/functional/test_runner.py --ci "$MAKEJOBS" --tmpdirprefix "${BASE_SCRATCH_DIR}/test_runner/" --ansi --combinedlogslen=99999999 --timeout-factor="${TEST_RUNNER_TIMEOUT_FACTOR}" "${TEST_RUNNER_EXTRA}" --quiet --failfast
+ bash -c "LD_LIBRARY_PATH=${DEPENDS_DIR}/${HOST}/lib ${TEST_RUNNER_ENV} test/functional/test_runner.py --ci $MAKEJOBS --tmpdirprefix ${BASE_SCRATCH_DIR}/test_runner/ --ansi --combinedlogslen=99999999 --timeout-factor=${TEST_RUNNER_TIMEOUT_FACTOR} ${TEST_RUNNER_EXTRA} --quiet --failfast"
fi
if [ "${RUN_TIDY}" = "true" ]; then
set -eo pipefail
- export P_CI_DIR="${BASE_BUILD_DIR}/bitcoin-$HOST/src/"
- ( CI_EXEC run-clang-tidy-16 -quiet "${MAKEJOBS}" ) | grep -C5 "error"
- export P_CI_DIR="${BASE_BUILD_DIR}/bitcoin-$HOST/"
- CI_EXEC "python3 ${DIR_IWYU}/include-what-you-use/iwyu_tool.py"\
- " src/common/args.cpp"\
- " src/common/config.cpp"\
- " src/common/init.cpp"\
- " src/common/url.cpp"\
- " src/compat"\
- " src/dbwrapper.cpp"\
- " src/init"\
- " src/kernel"\
- " src/node/chainstate.cpp"\
- " src/node/chainstatemanager_args.cpp"\
- " src/node/mempool_args.cpp"\
- " src/node/minisketchwrapper.cpp"\
- " src/node/utxo_snapshot.cpp"\
- " src/node/validation_cache_args.cpp"\
- " src/policy/feerate.cpp"\
- " src/policy/packages.cpp"\
- " src/policy/settings.cpp"\
- " src/primitives/transaction.cpp"\
- " src/random.cpp"\
- " src/rpc/fees.cpp"\
- " src/rpc/signmessage.cpp"\
- " src/test/fuzz/string.cpp"\
- " src/test/fuzz/txorphan.cpp"\
- " src/test/fuzz/util/"\
- " src/test/util/coins.cpp"\
- " src/uint256.cpp"\
- " src/util/bip32.cpp"\
- " src/util/bytevectorhash.cpp"\
- " src/util/check.cpp"\
- " src/util/error.cpp"\
- " src/util/exception.cpp"\
- " src/util/getuniquepath.cpp"\
- " src/util/hasher.cpp"\
- " src/util/message.cpp"\
- " src/util/moneystr.cpp"\
- " src/util/serfloat.cpp"\
- " src/util/spanparsing.cpp"\
- " src/util/strencodings.cpp"\
- " src/util/string.cpp"\
- " src/util/syserror.cpp"\
- " src/util/threadinterrupt.cpp"\
- " src/zmq"\
- " -p . ${MAKEJOBS}"\
- " -- -Xiwyu --cxx17ns -Xiwyu --mapping_file=${BASE_BUILD_DIR}/bitcoin-$HOST/contrib/devtools/iwyu/bitcoin.core.imp"\
- " |& tee /tmp/iwyu_ci.out"
- export P_CI_DIR="${BASE_ROOT_DIR}/src"
- CI_EXEC "python3 ${DIR_IWYU}/include-what-you-use/fix_includes.py --nosafe_headers < /tmp/iwyu_ci.out"
- CI_EXEC "git --no-pager diff"
-fi
-
-if [ "$RUN_SECURITY_TESTS" = "true" ]; then
- CI_EXEC make test-security-check
+ cd "${BASE_BUILD_DIR}/bitcoin-$HOST/src/"
+ ( run-clang-tidy-16 -quiet "${MAKEJOBS}" ) | grep -C5 "error"
+ # Filter out files by regex here, because regex may not be
+ # accepted in src/.bear-tidy-config
+ # Filter out:
+ # * qt qrc and moc generated files
+ # * walletutil (temporarily)
+ # * secp256k1
+ jq 'map(select(.file | test("src/qt/qrc_.*\\.cpp$|/moc_.*\\.cpp$|src/wallet/walletutil|src/secp256k1/src/") | not))' ../compile_commands.json > tmp.json
+ mv tmp.json ../compile_commands.json
+ cd "${BASE_BUILD_DIR}/bitcoin-$HOST/"
+ python3 "${DIR_IWYU}/include-what-you-use/iwyu_tool.py" \
+ -p . "${MAKEJOBS}" \
+ -- -Xiwyu --cxx17ns -Xiwyu --mapping_file="${BASE_BUILD_DIR}/bitcoin-$HOST/contrib/devtools/iwyu/bitcoin.core.imp" \
+ -Xiwyu --max_line_length=160 \
+ 2>&1 | tee /tmp/iwyu_ci.out
+ cd "${BASE_ROOT_DIR}/src"
+ python3 "${DIR_IWYU}/include-what-you-use/fix_includes.py" --nosafe_headers < /tmp/iwyu_ci.out
+ git --no-pager diff
fi
if [ "$RUN_FUZZ_TESTS" = "true" ]; then
- CI_EXEC LD_LIBRARY_PATH="${DEPENDS_DIR}/${HOST}/lib" test/fuzz/test_runner.py "${FUZZ_TESTS_CONFIG}" "$MAKEJOBS" -l DEBUG "${DIR_FUZZ_IN}"
-fi
-
-if [ -z "$DANGER_RUN_CI_ON_HOST" ]; then
- echo "Stop and remove CI container by ID"
- docker container kill "${CI_CONTAINER_ID}"
+ bash -c "LD_LIBRARY_PATH=${DEPENDS_DIR}/${HOST}/lib test/fuzz/test_runner.py ${FUZZ_TESTS_CONFIG} $MAKEJOBS -l DEBUG ${DIR_FUZZ_IN}"
fi
diff --git a/ci/test_run_all.sh b/ci/test_run_all.sh
index 93b07aab1e..2284a2903b 100755
--- a/ci/test_run_all.sh
+++ b/ci/test_run_all.sh
@@ -8,6 +8,10 @@ export LC_ALL=C.UTF-8
set -o errexit; source ./ci/test/00_setup_env.sh
set -o errexit; source ./ci/test/04_install.sh
-set -o errexit; source ./ci/test/05_before_script.sh
-set -o errexit; source ./ci/test/06_script_a.sh
-set -o errexit; source ./ci/test/06_script_b.sh
+set -o errexit
+CI_EXEC "${BASE_ROOT_DIR}/ci/test/06_script_b.sh"
+
+if [ -z "$DANGER_RUN_CI_ON_HOST" ]; then
+ echo "Stop and remove CI container by ID"
+ docker container kill "${CI_CONTAINER_ID}"
+fi