config.yml 16 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546
  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. # View these jobs in the browser: https://app.circleci.com/pipelines/github/curl/curl
  25. #
  26. # The macOS builds use M1 (ARM) machines for platform diversity.
  27. # See https://circleci.com/docs/configuration-reference/#macos-execution-environment
  28. # Use the latest 2.1 version of CircleCI pipeline process engine. See: https://circleci.com/docs/2.0/configuration-reference
  29. version: 2.1
  30. commands:
  31. configure:
  32. steps:
  33. - run:
  34. command: |
  35. autoreconf -fi
  36. ./configure --enable-warnings --enable-werror --with-openssl || { tail -1000 config.log; false; }
  37. configure-openssl-no-verbose:
  38. steps:
  39. - run:
  40. command: |
  41. autoreconf -fi
  42. ./configure --disable-verbose --enable-werror --with-openssl || { tail -1000 config.log; false; }
  43. configure-no-proxy:
  44. steps:
  45. - run:
  46. command: |
  47. autoreconf -fi
  48. ./configure --disable-proxy --enable-werror --with-openssl || { tail -1000 config.log; false; }
  49. configure-macos-normal:
  50. steps:
  51. - run:
  52. command: |
  53. autoreconf -fi
  54. ./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; }
  55. configure-macos-debug:
  56. steps:
  57. - run:
  58. command: |
  59. autoreconf -fi
  60. ./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; }
  61. configure-macos-libssh2:
  62. steps:
  63. - run:
  64. command: |
  65. autoreconf -fi
  66. ./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; }
  67. configure-macos-libssh-c-ares:
  68. steps:
  69. - run:
  70. command: |
  71. autoreconf -fi
  72. ./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; }
  73. configure-macos-libssh:
  74. steps:
  75. - run:
  76. command: |
  77. autoreconf -fi
  78. ./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; }
  79. configure-macos-c-ares:
  80. steps:
  81. - run:
  82. command: |
  83. autoreconf -fi
  84. ./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; }
  85. configure-macos-http-only:
  86. steps:
  87. - run:
  88. command: |
  89. autoreconf -fi
  90. ./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; }
  91. configure-macos-securetransport-http2:
  92. steps:
  93. - run:
  94. command: |
  95. autoreconf -fi
  96. ./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; }
  97. configure-macos-openssl-http2:
  98. steps:
  99. - run:
  100. command: |
  101. autoreconf -fi
  102. ./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; }
  103. configure-macos-libressl-http2:
  104. steps:
  105. - run:
  106. command: |
  107. autoreconf -fi
  108. ./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; }
  109. configure-macos-torture:
  110. steps:
  111. - run:
  112. command: |
  113. autoreconf -fi
  114. ./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; }
  115. configure-macos-torture-ftp:
  116. steps:
  117. - run:
  118. command: |
  119. autoreconf -fi
  120. ./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; }
  121. install-cares:
  122. steps:
  123. - run:
  124. command: |
  125. sudo apt-get update && sudo apt-get install -y libc-ares-dev
  126. install-libssh:
  127. steps:
  128. - run:
  129. command: |
  130. sudo apt-get update && sudo apt-get install -y libssh-dev
  131. install-deps:
  132. steps:
  133. - run:
  134. command: |
  135. sudo apt-get update && sudo apt-get install -y libpsl-dev libbrotli-dev libzstd-dev zlib1g-dev python3-pip libpsl-dev
  136. sudo python3 -m pip install impacket
  137. install-deps-brew:
  138. steps:
  139. - run:
  140. command: |
  141. # Drop libressl as long as we're not trying to build it
  142. echo libtool autoconf automake pkg-config nghttp2 libssh2 openssl libssh c-ares libpsl icu4c | xargs -Ix -n1 echo brew '"x"' > /tmp/Brewfile
  143. 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
  144. sudo python3 -m pip install impacket
  145. configure-libssh:
  146. steps:
  147. - run:
  148. command: |
  149. autoreconf -fi
  150. ./configure --enable-warnings --enable-werror --with-openssl --with-libssh || { tail -1000 config.log; false; }
  151. install-wolfssl:
  152. steps:
  153. - run:
  154. command: |
  155. source .github/scripts/VERSIONS
  156. echo "Installing wolfSSL $WOLFSSL_VER"
  157. curl -LOsSf --retry 6 --retry-connrefused --max-time 999 https://github.com/wolfSSL/wolfssl/archive/v$WOLFSSL_VER-stable.tar.gz
  158. tar -xzf v$WOLFSSL_VER-stable.tar.gz
  159. cd wolfssl-$WOLFSSL_VER-stable
  160. ./autogen.sh
  161. ./configure --enable-tls13 --enable-all --enable-harden --prefix=$HOME/wssl
  162. make install
  163. install-wolfssh:
  164. steps:
  165. - run:
  166. command: |
  167. source .github/scripts/VERSIONS
  168. echo "Installing wolfSSH $WOLFSSH_VER"
  169. curl -LOsSf --retry 6 --retry-connrefused --max-time 999 https://github.com/wolfSSL/wolfssh/archive/v$WOLFSSH_VER-stable.tar.gz
  170. tar -xzf v$WOLFSSH_VER-stable.tar.gz
  171. cd wolfssh-$WOLFSSH_VER-stable
  172. ./autogen.sh
  173. ./configure --with-wolfssl=$HOME/wssl --prefix=$HOME/wssh --enable-scp --enable-sftp --disable-examples
  174. make install
  175. configure-cares:
  176. steps:
  177. - run:
  178. command: |
  179. autoreconf -fi
  180. ./configure --enable-warnings --enable-werror --with-openssl --enable-ares || { tail -1000 config.log; false; }
  181. configure-wolfssh:
  182. steps:
  183. - run:
  184. command: |
  185. autoreconf -fi
  186. LDFLAGS="-Wl,-rpath,$HOME/wssh/lib" ./configure --enable-warnings --enable-werror --with-wolfssl=$HOME/wssl --with-wolfssh=$HOME/wssh || { tail -1000 config.log; false; }
  187. configure-cares-debug:
  188. steps:
  189. - run:
  190. command: |
  191. autoreconf -fi
  192. ./configure --enable-debug --enable-werror --with-openssl --enable-ares || { tail -1000 config.log; false; }
  193. build:
  194. steps:
  195. - run: make -j3 V=1
  196. - run: make -j3 V=1 examples
  197. build-macos:
  198. steps:
  199. - run: make -j5 V=1
  200. - run: make -j5 V=1 examples
  201. test:
  202. steps:
  203. - run: make -j3 V=1 test-ci
  204. test-macos:
  205. steps:
  206. - run: make -j5 V=1 test-ci
  207. test-torture:
  208. steps:
  209. - run: make -j5 V=1 test-ci TFLAGS="-n -t --shallow=25 !FTP"
  210. test-torture-ftp:
  211. steps:
  212. # Test 250 takes too long, causing Circle CI to kill the job
  213. - run: make -j5 V=1 test-ci TFLAGS="-n -t --shallow=20 FTP !250 !251"
  214. executors:
  215. ubuntu:
  216. machine:
  217. image: ubuntu-2004:2024.01.1
  218. jobs:
  219. basic:
  220. executor: ubuntu
  221. steps:
  222. - checkout
  223. - install-deps
  224. - configure
  225. - build
  226. - test
  227. no-verbose:
  228. executor: ubuntu
  229. steps:
  230. - checkout
  231. - install-deps
  232. - configure-openssl-no-verbose
  233. - build
  234. wolfssh:
  235. executor: ubuntu
  236. steps:
  237. - checkout
  238. - install-deps
  239. - install-wolfssl
  240. - install-wolfssh
  241. - configure-wolfssh
  242. - build
  243. no-proxy:
  244. executor: ubuntu
  245. steps:
  246. - checkout
  247. - install-deps
  248. - configure-no-proxy
  249. - build
  250. - test
  251. cares:
  252. executor: ubuntu
  253. steps:
  254. - checkout
  255. - install-deps
  256. - install-cares
  257. - configure-cares
  258. - build
  259. - test
  260. libssh:
  261. executor: ubuntu
  262. steps:
  263. - checkout
  264. - install-deps
  265. - install-libssh
  266. - configure-libssh
  267. - build
  268. - test
  269. arm:
  270. machine:
  271. image: ubuntu-2004:2024.01.1
  272. resource_class: arm.medium
  273. steps:
  274. - checkout
  275. - install-deps
  276. - configure
  277. - build
  278. - test
  279. arm-cares:
  280. machine:
  281. image: ubuntu-2004:2024.01.1
  282. resource_class: arm.medium
  283. steps:
  284. - checkout
  285. - install-deps
  286. - install-cares
  287. - configure-cares-debug
  288. - build
  289. - test
  290. macos-arm-normal:
  291. macos:
  292. xcode: 15.0.0
  293. resource_class: macos.m1.medium.gen1
  294. steps:
  295. - checkout
  296. - install-deps-brew
  297. - configure-macos-normal
  298. - build-macos
  299. - test-macos
  300. macos-arm-debug:
  301. macos:
  302. xcode: 15.0.0
  303. resource_class: macos.m1.medium.gen1
  304. steps:
  305. - checkout
  306. - install-deps-brew
  307. - configure-macos-debug
  308. - build-macos
  309. - test-macos
  310. macos-arm-libssh2:
  311. macos:
  312. xcode: 15.0.0
  313. resource_class: macos.m1.medium.gen1
  314. steps:
  315. - checkout
  316. - install-deps-brew
  317. - configure-macos-libssh2
  318. - build-macos
  319. - test-macos
  320. macos-arm-libssh-c-ares:
  321. macos:
  322. xcode: 15.0.0
  323. resource_class: macos.m1.medium.gen1
  324. steps:
  325. - checkout
  326. - install-deps-brew
  327. - configure-macos-libssh-c-ares
  328. - build-macos
  329. - test-macos
  330. macos-arm-libssh:
  331. macos:
  332. xcode: 15.0.0
  333. resource_class: macos.m1.medium.gen1
  334. steps:
  335. - checkout
  336. - install-deps-brew
  337. - configure-macos-libssh
  338. - build-macos
  339. - test-macos
  340. macos-arm-c-ares:
  341. macos:
  342. xcode: 15.0.0
  343. resource_class: macos.m1.medium.gen1
  344. steps:
  345. - checkout
  346. - install-deps-brew
  347. - configure-macos-c-ares
  348. - build-macos
  349. - test-macos
  350. macos-arm-http-only:
  351. macos:
  352. xcode: 15.0.0
  353. resource_class: macos.m1.medium.gen1
  354. steps:
  355. - checkout
  356. - install-deps-brew
  357. - configure-macos-http-only
  358. - build-macos
  359. - test-macos
  360. macos-arm-http-securetransport-http2:
  361. macos:
  362. xcode: 15.0.0
  363. resource_class: macos.m1.medium.gen1
  364. steps:
  365. - checkout
  366. - install-deps-brew
  367. - configure-macos-securetransport-http2
  368. - build-macos
  369. - test-macos
  370. macos-arm-http-openssl-http2:
  371. macos:
  372. xcode: 15.0.0
  373. resource_class: macos.m1.medium.gen1
  374. steps:
  375. - checkout
  376. - install-deps-brew
  377. - configure-macos-openssl-http2
  378. - build-macos
  379. - test-macos
  380. macos-arm-http-libressl-http2:
  381. macos:
  382. xcode: 15.0.0
  383. resource_class: macos.m1.medium.gen1
  384. steps:
  385. - checkout
  386. - install-deps-brew
  387. - configure-macos-libressl-http2
  388. - build-macos
  389. - test-macos
  390. macos-arm-http-torture:
  391. macos:
  392. xcode: 15.0.0
  393. resource_class: macos.m1.medium.gen1
  394. steps:
  395. - checkout
  396. - install-deps-brew
  397. - configure-macos-torture
  398. - build-macos
  399. - test-torture
  400. macos-arm-http-torture-ftp:
  401. macos:
  402. xcode: 15.0.0
  403. resource_class: macos.m1.medium.gen1
  404. steps:
  405. - checkout
  406. - install-deps-brew
  407. - configure-macos-torture-ftp
  408. - build-macos
  409. - test-torture-ftp
  410. workflows:
  411. x86-openssl:
  412. jobs:
  413. - basic
  414. openssl-c-ares:
  415. jobs:
  416. - cares
  417. openssl-libssh:
  418. jobs:
  419. - libssh
  420. openssl-no-proxy:
  421. jobs:
  422. - no-proxy
  423. openssl-no-verbose:
  424. jobs:
  425. - no-verbose
  426. wolfssl-wolfssh:
  427. jobs:
  428. - wolfssh
  429. arm-openssl:
  430. jobs:
  431. - arm
  432. arm-openssl-c-ares:
  433. jobs:
  434. - arm-cares
  435. macos-arm-normal:
  436. jobs:
  437. - macos-arm-normal
  438. macos-arm-debug:
  439. jobs:
  440. - macos-arm-debug
  441. macos-arm-libssh2:
  442. jobs:
  443. - macos-arm-libssh2
  444. macos-arm-libssh-c-ares:
  445. jobs:
  446. - macos-arm-libssh-c-ares
  447. macos-arm-libssh:
  448. jobs:
  449. - macos-arm-libssh
  450. macos-arm-c-ares:
  451. jobs:
  452. - macos-arm-c-ares
  453. macos-arm-http-only:
  454. jobs:
  455. - macos-arm-http-only
  456. macos-arm-http-securetransport-http2:
  457. jobs:
  458. - macos-arm-http-securetransport-http2
  459. macos-arm-http-openssl-http2:
  460. jobs:
  461. - macos-arm-http-openssl-http2
  462. # There are problem linking with LibreSSL on the CI boxes that prevent this
  463. # from working.
  464. # macos-arm-http-libressl-http2:
  465. # jobs:
  466. # - macos-arm-http-libressl-http2
  467. macos-arm-http-torture:
  468. jobs:
  469. - macos-arm-http-torture
  470. macos-arm-http-torture-ftp:
  471. jobs:
  472. - macos-arm-http-torture-ftp