aboutsummaryrefslogtreecommitdiff
path: root/.cirrus.yml
blob: 237560fc2e681305c9a01ff8189c5e37f3dee0fa (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
### Global defaults

timeout_in: 120m  # https://cirrus-ci.org/faq/#instance-timed-out
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
  kvm: true  # Use kvm to avoid spurious CI failures in the default virtualization cluster, see https://github.com/bitcoin/bitcoin/issues/20093
env:
  PACKAGE_MANAGER_INSTALL: "apt-get update && apt-get install -y"
  MAKEJOBS: "-j4"
  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
  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
  CCACHE_SIZE: "200M"
  CCACHE_DIR: "/tmp/ccache_dir"

### Global task template

# https://cirrus-ci.org/guide/tips-and-tricks/#sharing-configuration-between-tasks
global_task_template: &GLOBAL_TASK_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
  ccache_cache:
    folder: "/tmp/ccache_dir"
  depends_built_cache:
    folder: "/tmp/cirrus-ci-build/depends/built"
  depends_sdk_cache:
    folder: "/tmp/cirrus-ci-build/depends/sdk-sources"
  depends_releases_cache:
    folder: "/tmp/cirrus-ci-build/releases"
  merge_base_script:
    - if [ "$CIRRUS_PR" = "" ]; then exit 0; fi
    - bash -c "$PACKAGE_MANAGER_INSTALL git"
    - git fetch $CIRRUS_REPO_CLONE_URL $CIRRUS_BASE_BRANCH
    - git config --global user.email "ci@ci.ci"
    - git config --global user.name "ci"
    - git merge FETCH_HEAD  # Merge base to detect silent merge conflicts
  ci_script:
    - ./ci/test_run_all.sh

#task:
#  name: "Windows"
#  windows_container:
#    image: cirrusci/windowsservercore:2019
#  env:
#    CIRRUS_SHELL: powershell
#    PATH: 'C:\Python37;C:\Python37\Scripts;%PATH%'
#    PYTHONUTF8: 1
#    QT_DOWNLOAD_URL: 'https://github.com/sipsorcery/qt_win_binary/releases/download/v1.6/Qt5.9.8_x64_static_vs2019.zip'
#    QT_DOWNLOAD_HASH: '9a8c6eb20967873785057fdcd329a657c7f922b0af08c5fde105cc597dd37e21'
#    QT_LOCAL_PATH: 'C:\Qt5.9.8_x64_static_vs2019'
#    VCPKG_INSTALL_PATH: 'C:\tools\vcpkg\installed'
#    VCPKG_COMMIT_ID: 'ed0df8ecc4ed7e755ea03e18aaf285fd9b4b4a74'
#  install_script:
#    - choco install python --version=3.7.7 -y

task:
  name: 'ARM  [GOAL: install]  [buster]  [unit tests, no functional tests]'
  << : *GLOBAL_TASK_TEMPLATE
  container:
    image: debian:buster
  env:
    FILE_ENV: "./ci/test/00_setup_env_arm.sh"

task:
  name: 'Win64  [GOAL: deploy]  [unit tests, no gui, no boost::process, no functional tests]'
  << : *GLOBAL_TASK_TEMPLATE
  container:
    image: ubuntu:bionic
  env:
    FILE_ENV: "./ci/test/00_setup_env_win64.sh"

task:
  name: 'x86_64 Linux  [GOAL: install]  [bionic]  [C++17, previous releases, uses qt5 dev package and some depends packages] [unsigned char]'
  << : *GLOBAL_TASK_TEMPLATE
  container:
    image: ubuntu:bionic
  env:
    FILE_ENV: "./ci/test/00_setup_env_native_qt5.sh"

task:
  name: 'x86_64 Linux  [GOAL: install]  [focal]  [depends, sanitizers: thread (TSan), no gui]'
  << : *GLOBAL_TASK_TEMPLATE
  container:
    image: ubuntu:focal
    cpu: 4  # Double CPU and Memory to avoid timeout
    memory: 16G
  env:
    MAKEJOBS: "-j8"
    FILE_ENV: "./ci/test/00_setup_env_native_tsan.sh"

task:
  name: 'x86_64 Linux  [GOAL: install]  [focal]  [depends, sanitizers: memory (MSan)]'
  << : *GLOBAL_TASK_TEMPLATE
  container:
    image: ubuntu:focal
  env:
    FILE_ENV: "./ci/test/00_setup_env_native_msan.sh"

task:
  name: 'x86_64 Linux  [GOAL: install]  [focal]  [no depends, only system libs, sanitizers: address/leak (ASan + LSan) + undefined (UBSan) + integer]'
  << : *GLOBAL_TASK_TEMPLATE
  container:
    image: ubuntu:focal
  env:
    FILE_ENV: "./ci/test/00_setup_env_native_asan.sh"

task:
  name: 'x86_64 Linux  [GOAL: install]  [focal]  [no depends, only system libs, sanitizers: fuzzer,address,undefined]'
  << : *GLOBAL_TASK_TEMPLATE
  container:
    image: ubuntu:focal
  env:
    FILE_ENV: "./ci/test/00_setup_env_native_fuzz.sh"

task:
  name: 'x86_64 Linux [GOAL: install]  [focal]  [multiprocess]'
  << : *GLOBAL_TASK_TEMPLATE
  container:
    image: ubuntu:focal
  env:
    FILE_ENV: "./ci/test/00_setup_env_native_multiprocess.sh"

task:
  name: 'macOS 10.12  [GOAL: deploy] [no functional tests]'
  << : *GLOBAL_TASK_TEMPLATE
  container:
    image: ubuntu:bionic
  env:
    FILE_ENV: "./ci/test/00_setup_env_mac.sh"

task:
  name: 'macOS 10.14 native [GOAL: install] [GUI] [no depends]'
  macos_brew_addon_script:
    - brew install boost libevent berkeley-db4 qt miniupnpc ccache zeromq qrencode sqlite libtool automake pkg-config gnu-getopt
  << : *GLOBAL_TASK_TEMPLATE
  osx_instance:
    # Use latest image, but hardcode version to avoid silent upgrades (and breaks)
    image: catalina-xcode-12.1  # https://cirrus-ci.org/guide/macOS
  env:
    DANGER_RUN_CI_ON_HOST: "true"
    CI_USE_APT_INSTALL: "no"
    PACKAGE_MANAGER_INSTALL: "echo"  # Nothing to do
    FILE_ENV: "./ci/test/00_setup_env_mac_host.sh"