|
1 |
| -env: # Global defaults |
| 1 | +env: |
| 2 | + ### cirrus config |
2 | 3 | CIRRUS_CLONE_DEPTH: 1
|
3 |
| - PACKAGE_MANAGER_INSTALL: "apt-get update && apt-get install -y" |
4 |
| - MAKEJOBS: "-j10" |
5 |
| - 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 |
6 |
| - 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 |
7 |
| - CCACHE_MAXSIZE: "200M" |
8 |
| - CCACHE_DIR: "/tmp/ccache_dir" |
9 |
| - CCACHE_NOHASHDIR: "1" # Debug info might contain a stale path if the build dir changes, but this is fine |
10 |
| - |
11 |
| -# https://cirrus-ci.org/guide/persistent-workers/ |
12 |
| -# |
13 |
| -# It is possible to select a specific persistent worker by label. Refer to the |
14 |
| -# Cirrus CI docs for more details. |
15 |
| -# |
16 |
| -# Generally, a persistent worker must run Ubuntu 23.04+ or Debian 12+. |
17 |
| -# Specifically, |
18 |
| -# - apt-get is required due to PACKAGE_MANAGER_INSTALL |
19 |
| -# - podman-docker-4.1+ is required due to the use of `podman` when |
20 |
| -# RESTART_CI_DOCKER_BEFORE_RUN is set and 4.1+ due to the bugfix in 4.1 |
21 |
| -# (https://github.com/bitcoin/bitcoin/pull/21652#issuecomment-1657098200) |
22 |
| -# - The ./ci/ depedencies (with cirrus-cli) should be installed: |
23 |
| -# |
24 |
| -# ``` |
25 |
| -# 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 |
26 |
| -# ``` |
27 |
| -# |
28 |
| -# - There are no strict requirements on the hardware, because having less CPUs |
29 |
| -# runs the same CI script (maybe slower). To avoid rare and intermittent OOM |
30 |
| -# due to short memory usage spikes, it is recommended to add (and persist) |
31 |
| -# swap: |
32 |
| -# |
33 |
| -# ``` |
34 |
| -# fallocate -l 16G /swapfile_ci && chmod 600 /swapfile_ci && mkswap /swapfile_ci && swapon /swapfile_ci && ( echo '/swapfile_ci none swap sw 0 0' | tee -a /etc/fstab ) |
35 |
| -# ``` |
36 |
| -# |
37 |
| -# - To register the persistent worker, open a `screen` session and run: |
38 |
| -# |
39 |
| -# ``` |
40 |
| -# RESTART_CI_DOCKER_BEFORE_RUN=1 screen cirrus worker run --labels type=todo_fill_in_type --token todo_fill_in_token |
41 |
| -# ``` |
42 |
| -# |
43 |
| -# The following specific types should exist, with the following requirements: |
44 |
| -# - small: For an x86_64 machine, recommended to have 2 CPUs and 8 GB of memory. |
45 |
| -# - medium: For an x86_64 machine, recommended to have 4 CPUs and 16 GB of memory. |
46 |
| -# - noble: For a machine running the Linux kernel shipped with exaclty Ubuntu Noble 24.04. The machine is recommended to have 4 CPUs and 16 GB of memory. |
47 |
| -# - arm64: For an aarch64 machine, recommended to have 2 CPUs and 8 GB of memory. |
48 |
| - |
49 |
| -# https://cirrus-ci.org/guide/tips-and-tricks/#sharing-configuration-between-tasks |
50 |
| -filter_template: &FILTER_TEMPLATE |
51 |
| - 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 |
52 |
| - stateful: false # https://cirrus-ci.org/guide/writing-tasks/#stateful-tasks |
53 |
| - |
54 |
| -base_template: &BASE_TEMPLATE |
55 |
| - << : *FILTER_TEMPLATE |
56 |
| - merge_base_script: |
57 |
| - # Unconditionally install git (used in fingerprint_script). |
58 |
| - - bash -c "$PACKAGE_MANAGER_INSTALL git" |
59 |
| - - if [ "$CIRRUS_PR" = "" ]; then exit 0; fi |
60 |
| - - git fetch --depth=1 $CIRRUS_REPO_CLONE_URL "pull/${CIRRUS_PR}/merge" |
61 |
| - - git checkout FETCH_HEAD # Use merged changes to detect silent merge conflicts |
62 |
| - # Also, the merge commit is used to lint COMMIT_RANGE="HEAD~..HEAD" |
63 |
| - |
64 |
| -main_template: &MAIN_TEMPLATE |
65 |
| - timeout_in: 120m # https://cirrus-ci.org/faq/#instance-timed-out |
66 |
| - ci_script: |
67 |
| - - ./ci/test_run_all.sh |
68 |
| - |
69 |
| -global_task_template: &GLOBAL_TASK_TEMPLATE |
70 |
| - << : *BASE_TEMPLATE |
71 |
| - << : *MAIN_TEMPLATE |
72 |
| - |
73 |
| -compute_credits_template: &CREDITS_TEMPLATE |
74 |
| - # https://cirrus-ci.org/pricing/#compute-credits |
75 |
| - # Only use credits for pull requests to the main repo |
76 |
| - use_compute_credits: $CIRRUS_REPO_FULL_NAME == 'bitcoin/bitcoin' && $CIRRUS_PR != "" |
77 |
| - |
78 |
| -task: |
79 |
| - name: 'lint' |
80 |
| - << : *BASE_TEMPLATE |
81 |
| - container: |
82 |
| - image: debian:bookworm |
83 |
| - cpu: 1 |
84 |
| - memory: 1G |
85 |
| - # For faster CI feedback, immediately schedule the linters |
86 |
| - << : *CREDITS_TEMPLATE |
87 |
| - test_runner_cache: |
88 |
| - folder: "/lint_test_runner" |
89 |
| - fingerprint_script: echo $CIRRUS_TASK_NAME $(git rev-parse HEAD:test/lint/test_runner) |
90 |
| - python_cache: |
91 |
| - folder: "/python_build" |
92 |
| - fingerprint_script: cat .python-version /etc/os-release |
93 |
| - unshallow_script: |
94 |
| - - git fetch --unshallow --no-tags |
95 |
| - lint_script: |
96 |
| - - ./ci/lint_run_all.sh |
97 |
| - |
98 |
| -task: |
99 |
| - name: 'tidy' |
100 |
| - << : *GLOBAL_TASK_TEMPLATE |
101 |
| - persistent_worker: |
102 |
| - labels: |
103 |
| - type: medium |
104 |
| - env: |
105 |
| - FILE_ENV: "./ci/test/00_setup_env_native_tidy.sh" |
106 |
| - |
107 |
| -task: |
108 |
| - name: 'ARM, unit tests, no functional tests' |
109 |
| - << : *GLOBAL_TASK_TEMPLATE |
110 |
| - persistent_worker: |
111 |
| - labels: |
112 |
| - type: arm64 # Use arm64 worker to sidestep qemu and avoid a slow CI: https://github.com/bitcoin/bitcoin/pull/28087#issuecomment-1649399453 |
113 |
| - env: |
114 |
| - FILE_ENV: "./ci/test/00_setup_env_arm.sh" |
115 |
| - |
116 |
| -task: |
117 |
| - name: 'Win64, unit tests, no gui tests, no functional tests' |
118 |
| - << : *GLOBAL_TASK_TEMPLATE |
119 |
| - persistent_worker: |
120 |
| - labels: |
121 |
| - type: small |
122 |
| - env: |
123 |
| - FILE_ENV: "./ci/test/00_setup_env_win64.sh" |
124 |
| - |
125 |
| -task: |
126 |
| - name: '32-bit CentOS, dash, gui' |
127 |
| - << : *GLOBAL_TASK_TEMPLATE |
128 |
| - persistent_worker: |
129 |
| - labels: |
130 |
| - type: small |
131 |
| - env: |
132 |
| - FILE_ENV: "./ci/test/00_setup_env_i686_centos.sh" |
133 |
| - |
134 |
| -task: |
135 |
| - name: 'previous releases, qt5 dev package and depends packages, DEBUG' |
136 |
| - << : *GLOBAL_TASK_TEMPLATE |
137 |
| - persistent_worker: |
138 |
| - labels: |
139 |
| - type: small |
140 |
| - env: |
141 |
| - FILE_ENV: "./ci/test/00_setup_env_native_qt5.sh" |
142 |
| - |
143 |
| -task: |
144 |
| - name: 'TSan, depends, gui' |
145 |
| - << : *GLOBAL_TASK_TEMPLATE |
146 |
| - persistent_worker: |
147 |
| - labels: |
148 |
| - type: medium |
149 |
| - env: |
150 |
| - FILE_ENV: "./ci/test/00_setup_env_native_tsan.sh" |
151 |
| - |
152 |
| -task: |
153 |
| - name: 'MSan, depends' |
154 |
| - << : *GLOBAL_TASK_TEMPLATE |
155 |
| - persistent_worker: |
156 |
| - labels: |
157 |
| - type: small |
158 |
| - timeout_in: 300m # Use longer timeout for the *rare* case where a full build (llvm + msan + depends + ...) needs to be done. |
159 |
| - env: |
160 |
| - FILE_ENV: "./ci/test/00_setup_env_native_msan.sh" |
161 |
| - |
162 |
| -task: |
163 |
| - name: 'ASan + LSan + UBSan + integer, no depends, USDT' |
164 |
| - enable_bpfcc_script: |
165 |
| - # In the image build step, no external environment variables are available, |
166 |
| - # so any settings will need to be written to the settings env file: |
167 |
| - - sed -i "s|\${CIRRUS_CI}|true|g" ./ci/test/00_setup_env_native_asan.sh |
168 |
| - << : *GLOBAL_TASK_TEMPLATE |
169 |
| - persistent_worker: |
170 |
| - labels: |
171 |
| - type: noble # Must use this specific worker (needed for USDT functional tests) |
172 |
| - env: |
173 |
| - FILE_ENV: "./ci/test/00_setup_env_native_asan.sh" |
174 |
| - |
175 |
| -task: |
176 |
| - name: 'fuzzer,address,undefined,integer, no depends' |
177 |
| - << : *GLOBAL_TASK_TEMPLATE |
178 |
| - persistent_worker: |
179 |
| - labels: |
180 |
| - type: medium |
181 |
| - env: |
182 |
| - FILE_ENV: "./ci/test/00_setup_env_native_fuzz.sh" |
183 |
| - |
184 |
| -task: |
185 |
| - name: 'multiprocess, i686, DEBUG' |
186 |
| - << : *GLOBAL_TASK_TEMPLATE |
187 |
| - persistent_worker: |
188 |
| - labels: |
189 |
| - type: medium |
190 |
| - env: |
191 |
| - FILE_ENV: "./ci/test/00_setup_env_i686_multiprocess.sh" |
| 4 | + ### compiler options |
| 5 | + HOST: |
| 6 | + WRAPPER_CMD: |
| 7 | + # Specific warnings can be disabled with -Wno-error=foo. |
| 8 | + # -pedantic-errors is not equivalent to -Werror=pedantic and thus not implied by -Werror according to the GCC manual. |
| 9 | + WERROR_CFLAGS: -Werror -pedantic-errors |
| 10 | + MAKEFLAGS: -j4 |
| 11 | + BUILD: check |
| 12 | + ### secp256k1 config |
| 13 | + ECMULTWINDOW: auto |
| 14 | + ECMULTGENPRECISION: auto |
| 15 | + ASM: no |
| 16 | + WIDEMUL: auto |
| 17 | + WITH_VALGRIND: yes |
| 18 | + EXTRAFLAGS: |
| 19 | + ### secp256k1 modules |
| 20 | + EXPERIMENTAL: no |
| 21 | + ECDH: no |
| 22 | + RECOVERY: no |
| 23 | + SCHNORRSIG: no |
| 24 | + ELLSWIFT: no |
| 25 | + ### test options |
| 26 | + SECP256K1_TEST_ITERS: |
| 27 | + BENCH: yes |
| 28 | + SECP256K1_BENCH_ITERS: 2 |
| 29 | + CTIMETESTS: yes |
| 30 | + # Compile and run the tests |
| 31 | + EXAMPLES: yes |
| 32 | + |
| 33 | +cat_logs_snippet: &CAT_LOGS |
| 34 | + always: |
| 35 | + cat_tests_log_script: |
| 36 | + - cat tests.log || true |
| 37 | + cat_noverify_tests_log_script: |
| 38 | + - cat noverify_tests.log || true |
| 39 | + cat_exhaustive_tests_log_script: |
| 40 | + - cat exhaustive_tests.log || true |
| 41 | + cat_ctime_tests_log_script: |
| 42 | + - cat ctime_tests.log || true |
| 43 | + cat_bench_log_script: |
| 44 | + - cat bench.log || true |
| 45 | + cat_config_log_script: |
| 46 | + - cat config.log || true |
| 47 | + cat_test_env_script: |
| 48 | + - cat test_env.log || true |
| 49 | + cat_ci_env_script: |
| 50 | + - env |
| 51 | + |
| 52 | +linux_arm64_container_snippet: &LINUX_ARM64_CONTAINER |
| 53 | + env_script: |
| 54 | + - env | tee /tmp/env |
| 55 | + build_script: |
| 56 | + - DOCKER_BUILDKIT=1 docker build --file "ci/linux-debian.Dockerfile" --tag="ci_secp256k1_arm" |
| 57 | + - docker image prune --force # Cleanup stale layers |
| 58 | + test_script: |
| 59 | + - docker run --rm --mount "type=bind,src=./,dst=/ci_secp256k1" --env-file /tmp/env --replace --name "ci_secp256k1_arm" "ci_secp256k1_arm" bash -c "cd /ci_secp256k1/ && ./ci/ci.sh" |
192 | 60 |
|
193 | 61 | task:
|
194 |
| - name: 'no wallet, libbitcoinkernel' |
195 |
| - << : *GLOBAL_TASK_TEMPLATE |
| 62 | + name: "ARM64: Linux (Debian stable)" |
196 | 63 | persistent_worker:
|
197 | 64 | labels:
|
198 |
| - type: small |
| 65 | + type: arm64 |
199 | 66 | env:
|
200 |
| - FILE_ENV: "./ci/test/00_setup_env_native_nowallet_libbitcoinkernel.sh" |
| 67 | + ECDH: yes |
| 68 | + RECOVERY: yes |
| 69 | + SCHNORRSIG: yes |
| 70 | + ELLSWIFT: yes |
| 71 | + matrix: |
| 72 | + # Currently only gcc-snapshot, the other compilers are tested on GHA with QEMU |
| 73 | + - env: { CC: 'gcc-snapshot' } |
| 74 | + << : *LINUX_ARM64_CONTAINER |
| 75 | + << : *CAT_LOGS |
201 | 76 |
|
202 | 77 | task:
|
203 |
| - name: 'macOS-cross 11.0, gui, no tests' |
204 |
| - << : *GLOBAL_TASK_TEMPLATE |
| 78 | + name: "ARM64: Linux (Debian stable), Valgrind" |
205 | 79 | persistent_worker:
|
206 | 80 | labels:
|
207 |
| - type: small |
| 81 | + type: arm64 |
208 | 82 | env:
|
209 |
| - FILE_ENV: "./ci/test/00_setup_env_mac.sh" |
| 83 | + ECDH: yes |
| 84 | + RECOVERY: yes |
| 85 | + SCHNORRSIG: yes |
| 86 | + ELLSWIFT: yes |
| 87 | + WRAPPER_CMD: 'valgrind --error-exitcode=42' |
| 88 | + SECP256K1_TEST_ITERS: 2 |
| 89 | + matrix: |
| 90 | + - env: { CC: 'gcc' } |
| 91 | + - env: { CC: 'clang' } |
| 92 | + - env: { CC: 'gcc-snapshot' } |
| 93 | + - env: { CC: 'clang-snapshot' } |
| 94 | + << : *LINUX_ARM64_CONTAINER |
| 95 | + << : *CAT_LOGS |
0 commit comments