mirror of
https://github.com/bitcoin/bitcoin.git
synced 2024-11-19 18:09:47 +01:00
fa8e89d5e4
The exact distro name should not be important. Also, it is easy to find out, if needed. Thus, remove it to avoid bloat and maintenance overhead having to keep it in sync.
303 lines
12 KiB
YAML
303 lines
12 KiB
YAML
env: # Global defaults
|
|
CIRRUS_CLONE_DEPTH: 1
|
|
PACKAGE_MANAGER_INSTALL: "apt-get update && apt-get install -y"
|
|
MAKEJOBS: "-j10"
|
|
TEST_RUNNER_PORT_MIN: "14000" # Must be larger than 12321, which is used for the http cache. See https://cirrus-ci.org/guide/writing-tasks/#http-cache
|
|
CI_FAILFAST_TEST_LEAVE_DANGLING: "1" # Cirrus CI does not care about dangling processes and setting this variable avoids killing the CI script itself on error
|
|
CCACHE_MAXSIZE: "200M"
|
|
CCACHE_DIR: "/tmp/ccache_dir"
|
|
CCACHE_NOHASHDIR: "1" # Debug info might contain a stale path if the build dir changes, but this is fine
|
|
|
|
# https://cirrus-ci.org/guide/persistent-workers/
|
|
#
|
|
# It is possible to select a specific persistent worker by label. Refer to the
|
|
# Cirrus CI docs for more details.
|
|
#
|
|
# Generally, a persistent worker must run Ubuntu 23.04+ or Debian 12+.
|
|
# Specifically,
|
|
# - apt-get is required due to PACKAGE_MANAGER_INSTALL
|
|
# - podman-docker-4.1+ is required due to the use of `podman` when
|
|
# RESTART_CI_DOCKER_BEFORE_RUN is set and 4.1+ due to the bugfix in 4.1
|
|
# (https://github.com/bitcoin/bitcoin/pull/21652#issuecomment-1657098200)
|
|
# - The ./ci/ depedencies (with cirrus-cli) should be installed:
|
|
#
|
|
# ```
|
|
# apt update && apt install screen python3 bash podman-docker curl -y && curl -L -o cirrus "https://github.com/cirruslabs/cirrus-cli/releases/latest/download/cirrus-linux-$(dpkg --print-architecture)" && mv cirrus /usr/local/bin/cirrus && chmod +x /usr/local/bin/cirrus
|
|
# ```
|
|
#
|
|
# - There are no strict requirements on the hardware, because having less CPUs
|
|
# runs the same CI script (maybe slower). To avoid rare and intermittent OOM
|
|
# due to short memory usage spikes, it is recommended to add (and persist)
|
|
# swap:
|
|
#
|
|
# ```
|
|
# fallocate -l 16G /swapfile_ci && chmod 600 /swapfile_ci && mkswap /swapfile_ci && swapon /swapfile_ci && ( echo '/swapfile_ci none swap sw 0 0' | sudo tee -a /etc/fstab )
|
|
# ```
|
|
#
|
|
# - To register the persistent worker, open a `screen` session and run:
|
|
#
|
|
# ```
|
|
# RESTART_CI_DOCKER_BEFORE_RUN=1 screen cirrus worker run --labels type=todo_fill_in_type --token todo_fill_in_token
|
|
# ```
|
|
#
|
|
# The following specific types should exist, with the following requirements:
|
|
# - small: For an x86_64 machine, recommended to have 2 CPUs and 8 GB of memory.
|
|
# - medium: For an x86_64 machine, recommended to have 4 CPUs and 16 GB of memory.
|
|
# - lunar: For a machine running the Linux kernel shipped with Ubuntu Lunar 23.04. The machine is recommended to have 4 CPUs and 16 GB of memory.
|
|
# - arm64: For an aarch64 machine, recommended to have 2 CPUs and 8 GB of memory.
|
|
|
|
# https://cirrus-ci.org/guide/tips-and-tricks/#sharing-configuration-between-tasks
|
|
filter_template: &FILTER_TEMPLATE
|
|
skip: $CIRRUS_REPO_FULL_NAME == "bitcoin-core/gui" && $CIRRUS_PR == "" # No need to run on the read-only mirror, unless it is a PR. https://cirrus-ci.org/guide/writing-tasks/#conditional-task-execution
|
|
stateful: false # https://cirrus-ci.org/guide/writing-tasks/#stateful-tasks
|
|
|
|
base_template: &BASE_TEMPLATE
|
|
<< : *FILTER_TEMPLATE
|
|
merge_base_script:
|
|
# Unconditionally install git (used in fingerprint_script).
|
|
- bash -c "$PACKAGE_MANAGER_INSTALL git"
|
|
- if [ "$CIRRUS_PR" = "" ]; then exit 0; fi
|
|
- git fetch --depth=1 $CIRRUS_REPO_CLONE_URL "pull/${CIRRUS_PR}/merge"
|
|
- git checkout FETCH_HEAD # Use merged changes to detect silent merge conflicts
|
|
# Also, the merge commit is used to lint COMMIT_RANGE="HEAD~..HEAD"
|
|
|
|
main_template: &MAIN_TEMPLATE
|
|
timeout_in: 120m # https://cirrus-ci.org/faq/#instance-timed-out
|
|
ci_script:
|
|
- ./ci/test_run_all.sh
|
|
|
|
global_task_template: &GLOBAL_TASK_TEMPLATE
|
|
<< : *BASE_TEMPLATE
|
|
<< : *MAIN_TEMPLATE
|
|
|
|
compute_credits_template: &CREDITS_TEMPLATE
|
|
# https://cirrus-ci.org/pricing/#compute-credits
|
|
# Only use credits for pull requests to the main repo
|
|
use_compute_credits: $CIRRUS_REPO_FULL_NAME == 'bitcoin/bitcoin' && $CIRRUS_PR != ""
|
|
|
|
task:
|
|
name: 'lint'
|
|
<< : *BASE_TEMPLATE
|
|
container:
|
|
image: debian:bookworm
|
|
cpu: 1
|
|
memory: 1G
|
|
# For faster CI feedback, immediately schedule the linters
|
|
<< : *CREDITS_TEMPLATE
|
|
python_cache:
|
|
folder: "/python_build"
|
|
fingerprint_script: cat .python-version /etc/os-release
|
|
unshallow_script:
|
|
- git fetch --unshallow --no-tags
|
|
lint_script:
|
|
- ./ci/lint_run_all.sh
|
|
|
|
task:
|
|
name: 'tidy'
|
|
<< : *GLOBAL_TASK_TEMPLATE
|
|
persistent_worker:
|
|
labels:
|
|
type: medium
|
|
env:
|
|
FILE_ENV: "./ci/test/00_setup_env_native_tidy.sh"
|
|
|
|
task:
|
|
name: "Win64 native [vs2022]"
|
|
<< : *FILTER_TEMPLATE
|
|
windows_container:
|
|
cpu: 6
|
|
memory: 12G
|
|
image: cirrusci/windowsservercore:visualstudio2022
|
|
timeout_in: 120m
|
|
env:
|
|
PATH: 'C:\jom;C:\Python39;C:\Python39\Scripts;C:\Program Files (x86)\Microsoft Visual Studio\2022\BuildTools\MSBuild\Current\Bin;%PATH%'
|
|
PYTHONUTF8: 1
|
|
CI_VCPKG_TAG: '2023.01.09'
|
|
VCPKG_DOWNLOADS: 'C:\Users\ContainerAdministrator\AppData\Local\vcpkg\downloads'
|
|
VCPKG_DEFAULT_BINARY_CACHE: 'C:\Users\ContainerAdministrator\AppData\Local\vcpkg\archives'
|
|
CCACHE_DIR: 'C:\Users\ContainerAdministrator\AppData\Local\ccache'
|
|
WRAPPED_CL: 'C:\Users\ContainerAdministrator\AppData\Local\Temp\cirrus-ci-build\ci\test\wrapped-cl.bat'
|
|
QT_DOWNLOAD_URL: 'https://download.qt.io/official_releases/qt/5.15/5.15.5/single/qt-everywhere-opensource-src-5.15.5.zip'
|
|
QT_LOCAL_PATH: 'C:\qt-everywhere-opensource-src-5.15.5.zip'
|
|
QT_SOURCE_DIR: 'C:\qt-everywhere-src-5.15.5'
|
|
QTBASEDIR: 'C:\Qt_static'
|
|
x64_NATIVE_TOOLS: '"C:\Program Files (x86)\Microsoft Visual Studio\2022\BuildTools\VC\Auxiliary\Build\vcvars64.bat"'
|
|
QT_CONFIGURE_COMMAND: '..\configure -release -silent -opensource -confirm-license -opengl desktop -static -static-runtime -mp -qt-zlib -qt-pcre -qt-libpng -nomake examples -nomake tests -nomake tools -no-angle -no-dbus -no-gif -no-gtk -no-ico -no-icu -no-libjpeg -no-libudev -no-sql-sqlite -no-sql-odbc -no-sqlite -no-vulkan -skip qt3d -skip qtactiveqt -skip qtandroidextras -skip qtcharts -skip qtconnectivity -skip qtdatavis3d -skip qtdeclarative -skip doc -skip qtdoc -skip qtgamepad -skip qtgraphicaleffects -skip qtimageformats -skip qtlocation -skip qtlottie -skip qtmacextras -skip qtmultimedia -skip qtnetworkauth -skip qtpurchasing -skip qtquick3d -skip qtquickcontrols -skip qtquickcontrols2 -skip qtquicktimeline -skip qtremoteobjects -skip qtscript -skip qtscxml -skip qtsensors -skip qtserialbus -skip qtserialport -skip qtspeech -skip qtsvg -skip qtvirtualkeyboard -skip qtwayland -skip qtwebchannel -skip qtwebengine -skip qtwebglplugin -skip qtwebsockets -skip qtwebview -skip qtx11extras -skip qtxmlpatterns -no-openssl -no-feature-bearermanagement -no-feature-printdialog -no-feature-printer -no-feature-printpreviewdialog -no-feature-printpreviewwidget -no-feature-sql -no-feature-sqlmodel -no-feature-textbrowser -no-feature-textmarkdownwriter -no-feature-textodfwriter -no-feature-xml'
|
|
IgnoreWarnIntDirInTempDetected: 'true'
|
|
merge_script:
|
|
- PowerShell -NoLogo -Command if ($env:CIRRUS_PR -ne $null) { git fetch $env:CIRRUS_REPO_CLONE_URL pull/$env:CIRRUS_PR/merge; git reset --hard FETCH_HEAD; }
|
|
msvc_qt_built_cache:
|
|
folder: "%QTBASEDIR%"
|
|
reupload_on_changes: false
|
|
fingerprint_script:
|
|
- echo %QT_DOWNLOAD_URL% %QT_CONFIGURE_COMMAND%
|
|
- msbuild -version
|
|
populate_script:
|
|
- curl -L -o C:\jom.zip http://download.qt.io/official_releases/jom/jom.zip
|
|
- mkdir C:\jom
|
|
- tar -xf C:\jom.zip -C C:\jom
|
|
- curl -L -o %QT_LOCAL_PATH% %QT_DOWNLOAD_URL%
|
|
- tar -xf %QT_LOCAL_PATH% -C C:\
|
|
- '%x64_NATIVE_TOOLS%'
|
|
- cd %QT_SOURCE_DIR%
|
|
- mkdir build
|
|
- cd build
|
|
- '%QT_CONFIGURE_COMMAND% -prefix %QTBASEDIR%'
|
|
- jom
|
|
- jom install
|
|
vcpkg_tools_cache:
|
|
folder: '%VCPKG_DOWNLOADS%\tools'
|
|
reupload_on_changes: false
|
|
fingerprint_script:
|
|
- echo %CI_VCPKG_TAG%
|
|
- msbuild -version
|
|
vcpkg_binary_cache:
|
|
folder: '%VCPKG_DEFAULT_BINARY_CACHE%'
|
|
reupload_on_changes: true
|
|
fingerprint_script:
|
|
- echo %CI_VCPKG_TAG%
|
|
- type build_msvc\vcpkg.json
|
|
- msbuild -version
|
|
populate_script:
|
|
- mkdir %VCPKG_DEFAULT_BINARY_CACHE%
|
|
ccache_cache:
|
|
folder: '%CCACHE_DIR%'
|
|
install_tools_script:
|
|
- choco install --yes --no-progress ccache --version=4.7.4
|
|
- choco install --yes --no-progress python3 --version=3.9.6
|
|
- pip install zmq
|
|
- ccache --version
|
|
- python -VV
|
|
install_vcpkg_script:
|
|
- cd ..
|
|
- git clone --quiet https://github.com/microsoft/vcpkg.git
|
|
- cd vcpkg
|
|
- git -c advice.detachedHead=false checkout %CI_VCPKG_TAG%
|
|
- .\bootstrap-vcpkg -disableMetrics
|
|
- echo set(VCPKG_BUILD_TYPE release) >> triplets\x64-windows-static.cmake
|
|
- .\vcpkg integrate install
|
|
- .\vcpkg version
|
|
build_script:
|
|
- '%x64_NATIVE_TOOLS%'
|
|
- cd %CIRRUS_WORKING_DIR%
|
|
- ccache --zero-stats
|
|
- python build_msvc\msvc-autogen.py
|
|
- msbuild build_msvc\bitcoin.sln -property:CLToolExe=%WRAPPED_CL%;UseMultiToolTask=true;Configuration=Release -maxCpuCount -verbosity:minimal -noLogo
|
|
- ccache --show-stats
|
|
check_script:
|
|
- src\test_bitcoin.exe -l test_suite
|
|
- src\bench_bitcoin.exe --sanity-check
|
|
- python test\util\test_runner.py
|
|
- python test\util\rpcauth-test.py
|
|
functional_tests_script:
|
|
# Increase the dynamic port range to the maximum allowed value to mitigate "OSError: [WinError 10048] Only one usage of each socket address (protocol/network address/port) is normally permitted".
|
|
# See: https://learn.microsoft.com/en-us/biztalk/technical-guides/settings-that-can-be-modified-to-improve-network-performance
|
|
- netsh int ipv4 set dynamicport tcp start=1025 num=64511
|
|
- netsh int ipv6 set dynamicport tcp start=1025 num=64511
|
|
# Exclude feature_dbcrash for now due to timeout
|
|
- python test\functional\test_runner.py --nocleanup --ci --quiet --combinedlogslen=99999999 --jobs=6 --timeout-factor=8 --extended --exclude feature_dbcrash
|
|
|
|
task:
|
|
name: 'ARM, unit tests, no functional tests'
|
|
<< : *GLOBAL_TASK_TEMPLATE
|
|
persistent_worker:
|
|
labels:
|
|
type: arm64 # Use arm64 worker to sidestep qemu and avoid a slow CI: https://github.com/bitcoin/bitcoin/pull/28087#issuecomment-1649399453
|
|
env:
|
|
FILE_ENV: "./ci/test/00_setup_env_arm.sh"
|
|
|
|
task:
|
|
name: 'Win64, unit tests, no gui tests, no boost::process, no functional tests'
|
|
<< : *GLOBAL_TASK_TEMPLATE
|
|
persistent_worker:
|
|
labels:
|
|
type: small
|
|
env:
|
|
FILE_ENV: "./ci/test/00_setup_env_win64.sh"
|
|
|
|
task:
|
|
name: '32-bit CentOS, dash, gui'
|
|
<< : *GLOBAL_TASK_TEMPLATE
|
|
persistent_worker:
|
|
labels:
|
|
type: small
|
|
env:
|
|
FILE_ENV: "./ci/test/00_setup_env_i686_centos.sh"
|
|
|
|
task:
|
|
name: 'previous releases, qt5 dev package and depends packages, DEBUG'
|
|
<< : *GLOBAL_TASK_TEMPLATE
|
|
persistent_worker:
|
|
labels:
|
|
type: small
|
|
env:
|
|
FILE_ENV: "./ci/test/00_setup_env_native_qt5.sh"
|
|
|
|
task:
|
|
name: 'TSan, depends, gui'
|
|
<< : *GLOBAL_TASK_TEMPLATE
|
|
persistent_worker:
|
|
labels:
|
|
type: medium
|
|
env:
|
|
FILE_ENV: "./ci/test/00_setup_env_native_tsan.sh"
|
|
|
|
task:
|
|
name: 'MSan, depends'
|
|
<< : *GLOBAL_TASK_TEMPLATE
|
|
persistent_worker:
|
|
labels:
|
|
type: small
|
|
timeout_in: 300m # Use longer timeout for the *rare* case where a full build (llvm + msan + depends + ...) needs to be done.
|
|
env:
|
|
FILE_ENV: "./ci/test/00_setup_env_native_msan.sh"
|
|
|
|
task:
|
|
name: 'ASan + LSan + UBSan + integer, no depends, USDT'
|
|
enable_bpfcc_script:
|
|
# In the image build step, no external environment variables are available,
|
|
# so any settings will need to be written to the settings env file:
|
|
- sed -i "s|\${CIRRUS_CI}|true|g" ./ci/test/00_setup_env_native_asan.sh
|
|
<< : *GLOBAL_TASK_TEMPLATE
|
|
persistent_worker:
|
|
labels:
|
|
type: lunar # Must use the lunar-specific worker (needed for USDT functional tests)
|
|
env:
|
|
FILE_ENV: "./ci/test/00_setup_env_native_asan.sh"
|
|
|
|
task:
|
|
name: 'fuzzer,address,undefined,integer, no depends'
|
|
<< : *GLOBAL_TASK_TEMPLATE
|
|
persistent_worker:
|
|
labels:
|
|
type: medium
|
|
env:
|
|
FILE_ENV: "./ci/test/00_setup_env_native_fuzz.sh"
|
|
|
|
task:
|
|
name: 'multiprocess, i686, DEBUG'
|
|
<< : *GLOBAL_TASK_TEMPLATE
|
|
persistent_worker:
|
|
labels:
|
|
type: medium
|
|
env:
|
|
FILE_ENV: "./ci/test/00_setup_env_i686_multiprocess.sh"
|
|
|
|
task:
|
|
name: 'no wallet, libbitcoinkernel'
|
|
<< : *GLOBAL_TASK_TEMPLATE
|
|
persistent_worker:
|
|
labels:
|
|
type: small
|
|
env:
|
|
FILE_ENV: "./ci/test/00_setup_env_native_nowallet_libbitcoinkernel.sh"
|
|
|
|
task:
|
|
name: 'macOS-cross 11.0, gui, no tests'
|
|
<< : *GLOBAL_TASK_TEMPLATE
|
|
persistent_worker:
|
|
labels:
|
|
type: small
|
|
env:
|
|
FILE_ENV: "./ci/test/00_setup_env_mac.sh"
|