aboutsummaryrefslogtreecommitdiff
path: root/.cirrus.yml
blob: b3d58461e0aadf0c0ef994d731476f1abeea40c4 (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
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
### Global defaults

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"

# https://cirrus-ci.org/guide/tips-and-tricks/#sharing-configuration-between-tasks
base_template: &BASE_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
  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
  stateful: false  # https://cirrus-ci.org/guide/writing-tasks/#stateful-tasks

global_task_template: &GLOBAL_TASK_TEMPLATE
  << : *BASE_TEMPLATE
  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
  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"
  ci_script:
    - ./ci/test_run_all.sh

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: "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: 'lint [bionic]'
  << : *BASE_TEMPLATE
  container:
    image: ubuntu:bionic  # For python 3.6, oldest supported version according to doc/dependencies.md
    cpu: 1
    memory: 1G
  # For faster CI feedback, immediately schedule the linters
  << : *CREDITS_TEMPLATE
  lint_script:
    - ./ci/lint_run_all.sh

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

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

task:
  name: '32-bit + dash [gui] [CentOS 8]'
  << : *GLOBAL_TASK_TEMPLATE
  container:
    image: centos:8
  env:
    PACKAGE_MANAGER_INSTALL: "yum install -y"
    FILE_ENV: "./ci/test/00_setup_env_i686_centos.sh"

task:
  name: '[previous releases, uses qt5 dev package and some depends packages] [unsigned char] [bionic]'
  # For faster CI feedback, immediately schedule a task that compiles most modules
  << : *CREDITS_TEMPLATE
  << : *GLOBAL_TASK_TEMPLATE
  depends_releases_cache:
    folder: "/tmp/cirrus-ci-build/releases"
  container:
    image: ubuntu:bionic
  env:
    FILE_ENV: "./ci/test/00_setup_env_native_qt5.sh"

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

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

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

task:
  name: '[no depends, sanitizers: fuzzer,address,undefined,integer] [focal]'
  << : *GLOBAL_TASK_TEMPLATE
  container:
    image: ubuntu:focal
  env:
    FILE_ENV: "./ci/test/00_setup_env_native_fuzz.sh"

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

task:
  name: '[no wallet] [bionic]'
  << : *GLOBAL_TASK_TEMPLATE
  container:
    image: ubuntu:bionic
  env:
    FILE_ENV: "./ci/test/00_setup_env_native_nowallet.sh"

task:
  name: 'macOS 10.14 [gui, no tests] [focal]'
  << : *GLOBAL_TASK_TEMPLATE
  container:
    image: ubuntu:focal
  env:
    FILE_ENV: "./ci/test/00_setup_env_mac.sh"

task:
  name: 'macOS 10.15 native [gui] [no depends]'
  macos_brew_addon_script:
    - brew install boost libevent berkeley-db4 qt miniupnpc libnatpmp 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"

task:
  name: 'ARM64 Android APK [focal]'
  depends_sources_cache:
    folder: "/tmp/cirrus-ci-build/depends/sources"
  << : *GLOBAL_TASK_TEMPLATE
  container:
    image: ubuntu:focal
  env:
    FILE_ENV: "./ci/test/00_setup_env_android.sh"