xref: /curl/.circleci/config.yml (revision 73a36021)
1#***************************************************************************
2#                                  _   _ ____  _
3#  Project                     ___| | | |  _ \| |
4#                             / __| | | | |_) | |
5#                            | (__| |_| |  _ <| |___
6#                             \___|\___/|_| \_\_____|
7#
8# Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
9#
10# This software is licensed as described in the file COPYING, which
11# you should have received as part of this distribution. The terms
12# are also available at https://curl.se/docs/copyright.html.
13#
14# You may opt to use, copy, modify, merge, publish, distribute and/or sell
15# copies of the Software, and permit persons to whom the Software is
16# furnished to do so, under the terms of the COPYING file.
17#
18# This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
19# KIND, either express or implied.
20#
21# SPDX-License-Identifier: curl
22#
23###########################################################################
24
25# View these jobs in the browser: https://app.circleci.com/pipelines/github/curl/curl
26#
27# The macOS builds use M1 (ARM) machines for platform diversity.
28# See https://circleci.com/docs/configuration-reference/#macos-execution-environment
29
30# Use the latest 2.1 version of CircleCI pipeline process engine. See: https://circleci.com/docs/2.0/configuration-reference
31version: 2.1
32
33commands:
34  configure:
35    steps:
36      - run:
37          command: |
38            autoreconf -fi
39            ./configure --enable-warnings --enable-werror --with-openssl || { tail -1000 config.log; false; }
40
41  configure-openssl-no-verbose:
42    steps:
43      - run:
44          command: |
45            autoreconf -fi
46            ./configure --disable-verbose --enable-werror --with-openssl || { tail -1000 config.log; false; }
47
48  configure-no-proxy:
49    steps:
50      - run:
51          command: |
52            autoreconf -fi
53            ./configure --disable-proxy --enable-werror --with-openssl || { tail -1000 config.log; false; }
54
55  configure-macos-normal:
56    steps:
57      - run:
58          command: |
59            autoreconf -fi
60            ./configure --enable-warnings --enable-websockets --without-ssl CFLAGS='-Wno-vla -mmacosx-version-min=10.9' CPPFLAGS="-I$(brew --prefix libpsl)/include" LDFLAGS="-L$(brew --prefix libpsl)/lib -L$(brew --prefix icu4c)/lib" LIBS="-licuuc -licudata" || { tail -1000 config.log; false; }
61
62  configure-macos-debug:
63    steps:
64      - run:
65          command: |
66            autoreconf -fi
67            ./configure --enable-warnings --enable-websockets --without-ssl --enable-debug CPPFLAGS="-I$(brew --prefix libpsl)/include" CFLAGS='-Wno-vla -mmacosx-version-min=10.9' LDFLAGS="-L$(brew --prefix libpsl)/lib -L$(brew --prefix icu4c)/lib" LIBS="-licuuc -licudata" || { tail -1000 config.log; false; }
68
69  configure-macos-libssh2:
70    steps:
71      - run:
72          command: |
73            autoreconf -fi
74            ./configure --enable-warnings --enable-websockets --without-ssl --with-libssh2=/opt/homebrew/opt/libssh2 --enable-debug CPPFLAGS="-I$(brew --prefix libpsl)/include" CFLAGS='-Wno-vla -mmacosx-version-min=10.9' LDFLAGS="-L$(brew --prefix libpsl)/lib -L$(brew --prefix icu4c)/lib" LIBS="-licuuc -licudata" || { tail -1000 config.log; false; }
75
76  configure-macos-libssh-c-ares:
77    steps:
78      - run:
79          command: |
80            autoreconf -fi
81            ./configure --enable-warnings --enable-websockets --with-openssl --with-libssh --enable-ares --enable-debug PKG_CONFIG_PATH="$(brew --prefix openssl)/lib/pkgconfig" CPPFLAGS="-I$(brew --prefix libpsl)/include" CFLAGS='-Wno-vla -mmacosx-version-min=10.9' LDFLAGS="-L$(brew --prefix libpsl)/lib -L$(brew --prefix icu4c)/lib" LIBS="-licuuc -licudata" || { tail -1000 config.log; false; }
82
83  configure-macos-libssh:
84    steps:
85      - run:
86          command: |
87            autoreconf -fi
88            ./configure --enable-warnings --enable-websockets --with-openssl --with-libssh --enable-debug PKG_CONFIG_PATH="$(brew --prefix openssl)/lib/pkgconfig" CPPFLAGS="-I$(brew --prefix libpsl)/include" CFLAGS='-Wno-vla -mmacosx-version-min=10.9' LDFLAGS="-L$(brew --prefix libpsl)/lib -L$(brew --prefix icu4c)/lib" LIBS="-licuuc -licudata" || { tail -1000 config.log; false; }
89
90  configure-macos-c-ares:
91    steps:
92      - run:
93          command: |
94            autoreconf -fi
95            ./configure --enable-warnings --enable-websockets --without-ssl --enable-ares --enable-debug CPPFLAGS="-I$(brew --prefix libpsl)/include" CFLAGS='-Wno-vla -mmacosx-version-min=10.9' LDFLAGS="-L$(brew --prefix libpsl)/lib -L$(brew --prefix icu4c)/lib" LIBS="-licuuc -licudata" || { tail -1000 config.log; false; }
96
97  configure-macos-http-only:
98    steps:
99      - run:
100          command: |
101            autoreconf -fi
102            ./configure --enable-warnings --enable-maintainer-mode --disable-dict --disable-file --disable-ftp --disable-gopher --disable-imap --disable-ldap --disable-mqtt --disable-pop3 --disable-rtsp --disable-smb --disable-smtp --disable-telnet --disable-tftp --disable-unix-sockets --disable-shared --without-brotli --without-gssapi --without-libidn2 --without-libpsl --without-librtmp --without-libssh2 --without-nghttp2 --without-ssl --without-zlib --enable-debug CFLAGS='-Wno-vla -mmacosx-version-min=10.15' || { tail -1000 config.log; false; }
103
104  configure-macos-securetransport-http2:
105    steps:
106      - run:
107          command: |
108            autoreconf -fi
109            ./configure --enable-warnings --enable-websockets --with-secure-transport CPPFLAGS="-I$(brew --prefix libpsl)/include" CFLAGS='-Wno-vla -mmacosx-version-min=10.8' LDFLAGS="-L$(brew --prefix libpsl)/lib -L$(brew --prefix icu4c)/lib" LIBS="-licuuc -licudata" || { tail -1000 config.log; false; }
110
111  configure-macos-openssl-http2:
112    steps:
113      - run:
114          command: |
115            autoreconf -fi
116            ./configure --enable-warnings --enable-websockets --with-openssl --enable-debug PKG_CONFIG_PATH="$(brew --prefix openssl)/lib/pkgconfig" CPPFLAGS="-I$(brew --prefix libpsl)/include" CFLAGS='-Wno-vla -mmacosx-version-min=10.9' LDFLAGS="-L$(brew --prefix libpsl)/lib -L$(brew --prefix icu4c)/lib" LIBS="-licuuc -licudata" || { tail -1000 config.log; false; }
117
118  configure-macos-libressl-http2:
119    steps:
120      - run:
121          command: |
122            autoreconf -fi
123            ./configure --enable-warnings --enable-websockets --with-openssl --enable-debug PKG_CONFIG_PATH="$(brew --prefix libressl)/lib/pkgconfig" CPPFLAGS="-I$(brew --prefix libpsl)/include" CFLAGS='-Wno-vla -mmacosx-version-min=10.9' LDFLAGS="-L$(brew --prefix libpsl)/lib -L$(brew --prefix icu4c)/lib" LIBS="-licuuc -licudata" || { tail -1000 config.log; false; }
124
125  configure-macos-torture:
126    steps:
127      - run:
128          command: |
129            autoreconf -fi
130            ./configure --enable-warnings --enable-websockets --disable-shared --disable-threaded-resolver --with-openssl --enable-debug PKG_CONFIG_PATH="$(brew --prefix openssl)/lib/pkgconfig" CPPFLAGS="-I$(brew --prefix libpsl)/include" CFLAGS='-Wno-vla -mmacosx-version-min=10.9' LDFLAGS="-L$(brew --prefix libpsl)/lib -L$(brew --prefix icu4c)/lib" LIBS="-licuuc -licudata" || { tail -1000 config.log; false; }
131
132  configure-macos-torture-ftp:
133    steps:
134      - run:
135          command: |
136            autoreconf -fi
137            ./configure --enable-warnings --enable-websockets --disable-shared --disable-threaded-resolver --with-openssl --enable-debug PKG_CONFIG_PATH="$(brew --prefix openssl)/lib/pkgconfig" CPPFLAGS="-I$(brew --prefix libpsl)/include" CFLAGS='-Wno-vla -mmacosx-version-min=10.9' LDFLAGS="-L$(brew --prefix libpsl)/lib -L$(brew --prefix icu4c)/lib" LIBS="-licuuc -licudata" || { tail -1000 config.log; false; }
138
139  install-cares:
140    steps:
141      - run:
142          command: |
143            sudo apt-get update && sudo apt-get install -y libc-ares-dev
144
145  install-libssh:
146    steps:
147      - run:
148          command: |
149            sudo apt-get update && sudo apt-get install -y libssh-dev
150
151  install-deps:
152    steps:
153      - run:
154          command: |
155            sudo apt-get update && sudo apt-get install -y libpsl-dev libbrotli-dev libzstd-dev zlib1g-dev python3-pip libpsl-dev
156            sudo python3 -m pip install impacket
157
158  install-deps-brew:
159    steps:
160      - run:
161          command: |
162            # Drop libressl as long as we're not trying to build it
163            echo libtool autoconf automake pkg-config nghttp2 libssh2 openssl libssh c-ares libpsl icu4c | xargs -Ix -n1 echo brew '"x"' > /tmp/Brewfile
164            while [ $? -eq 0 ]; do for i in 1 2 3; do brew update && brew bundle install --no-lock --file /tmp/Brewfile && break 2 || { echo Error: wait to try again; sleep 10; } done; false Too many retries; done
165            sudo python3 -m pip install impacket
166
167  configure-libssh:
168    steps:
169      - run:
170          command: |
171            autoreconf -fi
172            ./configure --enable-warnings --enable-werror --with-openssl --with-libssh || { tail -1000 config.log; false; }
173
174  install-wolfssl:
175    steps:
176      - run:
177          command: |
178            source .github/scripts/VERSIONS
179            echo "Installing wolfSSL $WOLFSSL_VER"
180            curl -LOsSf --retry 6 --retry-connrefused --max-time 999 https://github.com/wolfSSL/wolfssl/archive/v$WOLFSSL_VER-stable.tar.gz
181            tar -xzf v$WOLFSSL_VER-stable.tar.gz
182            cd wolfssl-$WOLFSSL_VER-stable
183            ./autogen.sh
184            ./configure --enable-tls13 --enable-all --enable-harden --prefix=$HOME/wssl
185            make install
186
187  install-wolfssh:
188    steps:
189      - run:
190          command: |
191            source .github/scripts/VERSIONS
192            echo "Installing wolfSSH $WOLFSSH_VER"
193            curl -LOsSf --retry 6 --retry-connrefused --max-time 999 https://github.com/wolfSSL/wolfssh/archive/v$WOLFSSH_VER-stable.tar.gz
194            tar -xzf v$WOLFSSH_VER-stable.tar.gz
195            cd wolfssh-$WOLFSSH_VER-stable
196            ./autogen.sh
197            ./configure --with-wolfssl=$HOME/wssl --prefix=$HOME/wssh --enable-scp --enable-sftp --disable-examples
198            make install
199
200  configure-cares:
201    steps:
202      - run:
203          command: |
204            autoreconf -fi
205            ./configure --enable-warnings --enable-werror --with-openssl --enable-ares || { tail -1000 config.log; false; }
206
207  configure-wolfssh:
208    steps:
209      - run:
210          command: |
211            autoreconf -fi
212            LDFLAGS="-Wl,-rpath,$HOME/wssh/lib" ./configure --enable-warnings --enable-werror --with-wolfssl=$HOME/wssl --with-wolfssh=$HOME/wssh || { tail -1000 config.log; false; }
213
214  configure-cares-debug:
215    steps:
216      - run:
217          command: |
218            autoreconf -fi
219            ./configure --enable-debug --enable-werror --with-openssl --enable-ares || { tail -1000 config.log; false; }
220
221  build:
222    steps:
223      - run: make -j3 V=1
224      - run: make -j3 V=1 examples
225
226  build-macos:
227    steps:
228      - run: make -j5 V=1
229      - run: make -j5 V=1 examples
230
231  test:
232    steps:
233      - run: make -j3 V=1 test-ci
234
235  test-macos:
236    steps:
237      - run: make -j5 V=1 test-ci
238
239  test-torture:
240    steps:
241      - run: make -j5 V=1 test-ci TFLAGS="-n -t --shallow=25 !FTP"
242
243  test-torture-ftp:
244    steps:
245      # Test 250 takes too long, causing Circle CI to kill the job
246      - run: make -j5 V=1 test-ci TFLAGS="-n -t --shallow=20 FTP !250 !251"
247
248executors:
249  ubuntu:
250    machine:
251      image: ubuntu-2004:2024.01.1
252
253jobs:
254  basic:
255    executor: ubuntu
256    steps:
257      - checkout
258      - install-deps
259      - configure
260      - build
261      - test
262
263  no-verbose:
264    executor: ubuntu
265    steps:
266      - checkout
267      - install-deps
268      - configure-openssl-no-verbose
269      - build
270
271  wolfssh:
272    executor: ubuntu
273    steps:
274      - checkout
275      - install-deps
276      - install-wolfssl
277      - install-wolfssh
278      - configure-wolfssh
279      - build
280
281  no-proxy:
282    executor: ubuntu
283    steps:
284      - checkout
285      - install-deps
286      - configure-no-proxy
287      - build
288      - test
289
290  cares:
291    executor: ubuntu
292    steps:
293      - checkout
294      - install-deps
295      - install-cares
296      - configure-cares
297      - build
298      - test
299
300  libssh:
301    executor: ubuntu
302    steps:
303      - checkout
304      - install-deps
305      - install-libssh
306      - configure-libssh
307      - build
308      - test
309
310  arm:
311    machine:
312      image: ubuntu-2004:2024.01.1
313    resource_class: arm.medium
314    steps:
315      - checkout
316      - install-deps
317      - configure
318      - build
319      - test
320
321  arm-cares:
322    machine:
323      image: ubuntu-2004:2024.01.1
324    resource_class: arm.medium
325    steps:
326      - checkout
327      - install-deps
328      - install-cares
329      - configure-cares-debug
330      - build
331      - test
332
333  macos-arm-normal:
334    macos:
335      xcode: 15.0.0
336    resource_class: macos.m1.medium.gen1
337    steps:
338      - checkout
339      - install-deps-brew
340      - configure-macos-normal
341      - build-macos
342      - test-macos
343
344  macos-arm-debug:
345    macos:
346      xcode: 15.0.0
347    resource_class: macos.m1.medium.gen1
348    steps:
349      - checkout
350      - install-deps-brew
351      - configure-macos-debug
352      - build-macos
353      - test-macos
354
355  macos-arm-libssh2:
356    macos:
357      xcode: 15.0.0
358    resource_class: macos.m1.medium.gen1
359    steps:
360      - checkout
361      - install-deps-brew
362      - configure-macos-libssh2
363      - build-macos
364      - test-macos
365
366  macos-arm-libssh-c-ares:
367    macos:
368      xcode: 15.0.0
369    resource_class: macos.m1.medium.gen1
370    steps:
371      - checkout
372      - install-deps-brew
373      - configure-macos-libssh-c-ares
374      - build-macos
375      - test-macos
376
377  macos-arm-libssh:
378    macos:
379      xcode: 15.0.0
380    resource_class: macos.m1.medium.gen1
381    steps:
382      - checkout
383      - install-deps-brew
384      - configure-macos-libssh
385      - build-macos
386      - test-macos
387
388  macos-arm-c-ares:
389    macos:
390      xcode: 15.0.0
391    resource_class: macos.m1.medium.gen1
392    steps:
393      - checkout
394      - install-deps-brew
395      - configure-macos-c-ares
396      - build-macos
397      - test-macos
398
399  macos-arm-http-only:
400    macos:
401      xcode: 15.0.0
402    resource_class: macos.m1.medium.gen1
403    steps:
404      - checkout
405      - install-deps-brew
406      - configure-macos-http-only
407      - build-macos
408      - test-macos
409
410  macos-arm-http-securetransport-http2:
411    macos:
412      xcode: 15.0.0
413    resource_class: macos.m1.medium.gen1
414    steps:
415      - checkout
416      - install-deps-brew
417      - configure-macos-securetransport-http2
418      - build-macos
419      - test-macos
420
421  macos-arm-http-openssl-http2:
422    macos:
423      xcode: 15.0.0
424    resource_class: macos.m1.medium.gen1
425    steps:
426      - checkout
427      - install-deps-brew
428      - configure-macos-openssl-http2
429      - build-macos
430      - test-macos
431
432  macos-arm-http-libressl-http2:
433    macos:
434      xcode: 15.0.0
435    resource_class: macos.m1.medium.gen1
436    steps:
437      - checkout
438      - install-deps-brew
439      - configure-macos-libressl-http2
440      - build-macos
441      - test-macos
442
443  macos-arm-http-torture:
444    macos:
445      xcode: 15.0.0
446    resource_class: macos.m1.medium.gen1
447    steps:
448      - checkout
449      - install-deps-brew
450      - configure-macos-torture
451      - build-macos
452      - test-torture
453
454  macos-arm-http-torture-ftp:
455    macos:
456      xcode: 15.0.0
457    resource_class: macos.m1.medium.gen1
458    steps:
459      - checkout
460      - install-deps-brew
461      - configure-macos-torture-ftp
462      - build-macos
463      - test-torture-ftp
464
465workflows:
466  x86-openssl:
467    jobs:
468      - basic
469
470  openssl-c-ares:
471    jobs:
472      - cares
473
474  openssl-libssh:
475    jobs:
476      - libssh
477
478  openssl-no-proxy:
479    jobs:
480      - no-proxy
481
482  openssl-no-verbose:
483    jobs:
484      - no-verbose
485
486  wolfssl-wolfssh:
487    jobs:
488      - wolfssh
489
490  arm-openssl:
491    jobs:
492      - arm
493
494  arm-openssl-c-ares:
495    jobs:
496      - arm-cares
497
498  macos-arm-normal:
499    jobs:
500      - macos-arm-normal
501
502  macos-arm-debug:
503    jobs:
504      - macos-arm-debug
505
506  macos-arm-libssh2:
507    jobs:
508      - macos-arm-libssh2
509
510  macos-arm-libssh-c-ares:
511    jobs:
512      - macos-arm-libssh-c-ares
513
514  macos-arm-libssh:
515    jobs:
516      - macos-arm-libssh
517
518  macos-arm-c-ares:
519    jobs:
520      - macos-arm-c-ares
521
522  macos-arm-http-only:
523    jobs:
524      - macos-arm-http-only
525
526  macos-arm-http-securetransport-http2:
527    jobs:
528      - macos-arm-http-securetransport-http2
529
530  macos-arm-http-openssl-http2:
531    jobs:
532      - macos-arm-http-openssl-http2
533
534  # There are problem linking with LibreSSL on the CI boxes that prevent this
535  # from working.
536  # macos-arm-http-libressl-http2:
537  #   jobs:
538  #     - macos-arm-http-libressl-http2
539
540  macos-arm-http-torture:
541    jobs:
542      - macos-arm-http-torture
543
544  macos-arm-http-torture-ftp:
545    jobs:
546      - macos-arm-http-torture-ftp
547