mirror of
https://github.com/bitcoin/bitcoin.git
synced 2024-11-19 01:42:58 +01:00
fac14c4e49
The option is to be phased out, so remove it to avoid relying on it. Update container.cpu and timeouts where needed.
343 lines
14 KiB
YAML
343 lines
14 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 process and setting this variable avoids killing the CI script itself on error
|
|
CCACHE_SIZE: "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
|
|
|
|
cirrus_ephemeral_worker_template_env: &CIRRUS_EPHEMERAL_WORKER_TEMPLATE_ENV
|
|
DANGER_RUN_CI_ON_HOST: "1" # Containers will be discarded after the run, so there is no risk that the ci scripts modify the system
|
|
|
|
persistent_worker_template_env: &PERSISTENT_WORKER_TEMPLATE_ENV
|
|
RESTART_CI_DOCKER_BEFORE_RUN: "1"
|
|
|
|
persistent_worker_template: &PERSISTENT_WORKER_TEMPLATE
|
|
persistent_worker: {} # https://cirrus-ci.org/guide/persistent-workers/
|
|
|
|
# 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
|
|
ccache_cache:
|
|
folder: "/tmp/ccache_dir"
|
|
ci_script:
|
|
- ./ci/test_run_all.sh
|
|
|
|
container_depends_template: &CONTAINER_DEPENDS_TEMPLATE
|
|
<< : *BASE_TEMPLATE
|
|
container:
|
|
# https://cirrus-ci.org/faq/#are-there-any-limits
|
|
# Each project has 16 CPU in total, assign 2 to each container, so that 8 tasks run in parallel
|
|
cpu: 2
|
|
memory: 8G # Set to 8GB to avoid OOM. https://cirrus-ci.org/guide/linux/#linux-containers
|
|
dockerfile: ci/test_imagefile # https://cirrus-ci.org/guide/docker-builder-vm/#dockerfile-as-a-ci-environment
|
|
depends_built_cache:
|
|
folder: "depends/built"
|
|
fingerprint_script: echo $CIRRUS_TASK_NAME $(git rev-parse HEAD:depends)
|
|
|
|
global_task_template: &GLOBAL_TASK_TEMPLATE
|
|
<< : *CONTAINER_DEPENDS_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 [bookworm]'
|
|
<< : *BASE_TEMPLATE
|
|
container:
|
|
image: debian:bookworm
|
|
cpu: 1
|
|
memory: 1G
|
|
# For faster CI feedback, immediately schedule the linters
|
|
<< : *CREDITS_TEMPLATE
|
|
python_cache:
|
|
folder: "/tmp/python"
|
|
fingerprint_script: cat .python-version /etc/os-release
|
|
unshallow_script:
|
|
- git fetch --unshallow --no-tags
|
|
lint_script:
|
|
- ./ci/lint_run_all.sh
|
|
env:
|
|
<< : *CIRRUS_EPHEMERAL_WORKER_TEMPLATE_ENV
|
|
|
|
task:
|
|
name: 'tidy [lunar]'
|
|
<< : *GLOBAL_TASK_TEMPLATE
|
|
container:
|
|
cpu: 4
|
|
memory: 5G
|
|
docker_arguments:
|
|
CI_IMAGE_NAME_TAG: ubuntu:lunar
|
|
FILE_ENV: "./ci/test/00_setup_env_native_tidy.sh"
|
|
env:
|
|
<< : *CIRRUS_EPHEMERAL_WORKER_TEMPLATE_ENV
|
|
|
|
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 --max-size=%CCACHE_SIZE%
|
|
- 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] [bullseye]'
|
|
<< : *GLOBAL_TASK_TEMPLATE
|
|
container:
|
|
docker_arguments:
|
|
CI_IMAGE_NAME_TAG: debian:bullseye
|
|
FILE_ENV: "./ci/test/00_setup_env_arm.sh"
|
|
<< : *CREDITS_TEMPLATE
|
|
env:
|
|
<< : *CIRRUS_EPHEMERAL_WORKER_TEMPLATE_ENV
|
|
|
|
task:
|
|
name: 'Win64 [unit tests, no gui tests, no boost::process, no functional tests] [jammy]'
|
|
<< : *GLOBAL_TASK_TEMPLATE
|
|
container:
|
|
docker_arguments:
|
|
CI_IMAGE_NAME_TAG: ubuntu:jammy
|
|
FILE_ENV: "./ci/test/00_setup_env_win64.sh"
|
|
<< : *CREDITS_TEMPLATE
|
|
env:
|
|
<< : *CIRRUS_EPHEMERAL_WORKER_TEMPLATE_ENV
|
|
|
|
task:
|
|
name: '32-bit + dash [gui] [CentOS 9]'
|
|
<< : *GLOBAL_TASK_TEMPLATE
|
|
container:
|
|
docker_arguments:
|
|
CI_IMAGE_NAME_TAG: quay.io/centos/centos:stream9
|
|
FILE_ENV: "./ci/test/00_setup_env_i686_centos.sh"
|
|
# For faster CI feedback, immediately schedule one task that runs all tests
|
|
<< : *CREDITS_TEMPLATE
|
|
env:
|
|
<< : *CIRRUS_EPHEMERAL_WORKER_TEMPLATE_ENV
|
|
PACKAGE_MANAGER_INSTALL: "yum install -y"
|
|
|
|
task:
|
|
name: '[previous releases, qt5 dev package and depends packages, DEBUG] [focal]'
|
|
previous_releases_cache:
|
|
folder: "releases"
|
|
<< : *GLOBAL_TASK_TEMPLATE
|
|
<< : *PERSISTENT_WORKER_TEMPLATE
|
|
env:
|
|
<< : *PERSISTENT_WORKER_TEMPLATE_ENV
|
|
FILE_ENV: "./ci/test/00_setup_env_native_qt5.sh"
|
|
|
|
task:
|
|
name: '[TSan, depends, gui] [lunar]'
|
|
<< : *GLOBAL_TASK_TEMPLATE
|
|
container:
|
|
cpu: 4
|
|
memory: 16G # The default memory is too small, so double everything
|
|
docker_arguments:
|
|
CI_IMAGE_NAME_TAG: ubuntu:lunar
|
|
FILE_ENV: "./ci/test/00_setup_env_native_tsan.sh"
|
|
env:
|
|
<< : *CIRRUS_EPHEMERAL_WORKER_TEMPLATE_ENV
|
|
|
|
task:
|
|
name: '[MSan, depends] [jammy]'
|
|
<< : *GLOBAL_TASK_TEMPLATE
|
|
container:
|
|
docker_arguments:
|
|
CI_IMAGE_NAME_TAG: ubuntu:jammy
|
|
FILE_ENV: "./ci/test/00_setup_env_native_msan.sh"
|
|
env:
|
|
<< : *CIRRUS_EPHEMERAL_WORKER_TEMPLATE_ENV
|
|
MAKEJOBS: "-j4" # Avoid excessive memory use due to MSan
|
|
|
|
task:
|
|
name: '[ASan + LSan + UBSan + integer, no depends, USDT] [lunar]'
|
|
<< : *GLOBAL_TASK_TEMPLATE
|
|
# We can't use a 'container' for the USDT interface tests as the CirrusCI
|
|
# containers don't have privileges to hook into bitcoind. CirrusCI uses
|
|
# Google Compute Engine instances: https://cirrus-ci.org/guide/custom-vms/
|
|
# Images can be found here: https://cloud.google.com/compute/docs/images/os-details
|
|
compute_engine_instance:
|
|
image_project: ubuntu-os-cloud
|
|
image: family/ubuntu-2304-amd64 # https://cirrus-ci.org/guide/custom-vms/#custom-compute-engine-vms
|
|
cpu: 4
|
|
disk: 100
|
|
memory: 12G
|
|
env:
|
|
<< : *CIRRUS_EPHEMERAL_WORKER_TEMPLATE_ENV
|
|
HOME: /root/ # Only needed for compute_engine_instance
|
|
FILE_ENV: "./ci/test/00_setup_env_native_asan.sh"
|
|
MAKEJOBS: "-j4" # Avoid excessive memory use
|
|
|
|
task:
|
|
name: '[fuzzer,address,undefined,integer, no depends] [lunar]'
|
|
<< : *GLOBAL_TASK_TEMPLATE
|
|
container:
|
|
cpu: 4 # Increase CPU and memory to avoid timeout
|
|
memory: 16G
|
|
docker_arguments:
|
|
CI_IMAGE_NAME_TAG: ubuntu:lunar
|
|
FILE_ENV: "./ci/test/00_setup_env_native_fuzz.sh"
|
|
env:
|
|
<< : *CIRRUS_EPHEMERAL_WORKER_TEMPLATE_ENV
|
|
|
|
task:
|
|
name: '[multiprocess, i686, DEBUG] [focal]'
|
|
<< : *GLOBAL_TASK_TEMPLATE
|
|
container:
|
|
cpu: 4
|
|
memory: 16G # The default memory is too small, so double everything
|
|
docker_arguments:
|
|
CI_IMAGE_NAME_TAG: ubuntu:focal
|
|
FILE_ENV: "./ci/test/00_setup_env_i686_multiprocess.sh"
|
|
env:
|
|
<< : *CIRRUS_EPHEMERAL_WORKER_TEMPLATE_ENV
|
|
|
|
task:
|
|
name: '[no wallet, libbitcoinkernel] [focal]'
|
|
<< : *GLOBAL_TASK_TEMPLATE
|
|
container:
|
|
docker_arguments:
|
|
CI_IMAGE_NAME_TAG: ubuntu:focal
|
|
FILE_ENV: "./ci/test/00_setup_env_native_nowallet_libbitcoinkernel.sh"
|
|
<< : *CREDITS_TEMPLATE
|
|
env:
|
|
<< : *CIRRUS_EPHEMERAL_WORKER_TEMPLATE_ENV
|
|
|
|
task:
|
|
name: 'macOS 11.0 [gui, no tests] [jammy]'
|
|
<< : *CONTAINER_DEPENDS_TEMPLATE
|
|
container:
|
|
docker_arguments:
|
|
CI_IMAGE_NAME_TAG: ubuntu:jammy
|
|
FILE_ENV: "./ci/test/00_setup_env_mac.sh"
|
|
macos_sdk_cache:
|
|
folder: "depends/SDKs/$MACOS_SDK"
|
|
fingerprint_key: "$MACOS_SDK"
|
|
<< : *MAIN_TEMPLATE
|
|
env:
|
|
MACOS_SDK: "Xcode-12.2-12B45b-extracted-SDK-with-libcxx-headers"
|
|
<< : *CIRRUS_EPHEMERAL_WORKER_TEMPLATE_ENV
|
|
|
|
task:
|
|
name: 'macOS 13 native arm64 [gui, sqlite only] [no depends]'
|
|
macos_instance:
|
|
# Use latest image, but hardcode version to avoid silent upgrades (and breaks)
|
|
image: ghcr.io/cirruslabs/macos-ventura-xcode:14.3.1 # https://cirrus-ci.org/guide/macOS
|
|
<< : *BASE_TEMPLATE
|
|
check_clang_script:
|
|
- clang --version
|
|
brew_install_script:
|
|
- brew install boost libevent qt@5 miniupnpc libnatpmp ccache zeromq qrencode libtool automake gnu-getopt
|
|
<< : *MAIN_TEMPLATE
|
|
env:
|
|
<< : *CIRRUS_EPHEMERAL_WORKER_TEMPLATE_ENV
|
|
CI_USE_APT_INSTALL: "no"
|
|
PACKAGE_MANAGER_INSTALL: "echo" # Nothing to do
|
|
FILE_ENV: "./ci/test/00_setup_env_mac_native_arm64.sh"
|