curl/.circleci/config.yml
Viktor Szakats 2a7c8b27fd
CI/circleci: config tidy-ups, bump up test parallelism
- bump parallel test for Linux jobs.
  Credit-to: Dan Fandrich
  Cherry-picked from #11510
- bump parallel test for macOS jobs.
- drop no longer necessary `-Wno-vla` option.
- fold long lines.
- drop `--enable-maintainer-mode` `./configure` option.
- replace a hard-coded prefix with `brew --prefix`.
- update documentation link.
- move `--enable-debug` in front.
- tidy up quotes.

Closes #14171
2024-07-13 04:03:05 +02:00

641 lines
18 KiB
YAML

#***************************************************************************
# _ _ ____ _
# Project ___| | | | _ \| |
# / __| | | | |_) | |
# | (__| |_| | _ <| |___
# \___|\___/|_| \_\_____|
#
# Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
#
# This software is licensed as described in the file COPYING, which
# you should have received as part of this distribution. The terms
# are also available at https://curl.se/docs/copyright.html.
#
# You may opt to use, copy, modify, merge, publish, distribute and/or sell
# copies of the Software, and permit persons to whom the Software is
# furnished to do so, under the terms of the COPYING file.
#
# This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
# KIND, either express or implied.
#
# SPDX-License-Identifier: curl
#
###########################################################################
# View these jobs in the browser: https://app.circleci.com/pipelines/github/curl/curl
#
# The macOS builds use M1 (ARM) machines for platform diversity.
# See https://circleci.com/docs/configuration-reference/#macos-execution-environment
# Use the latest 2.1 version of CircleCI pipeline process engine. See: https://circleci.com/docs/configuration-reference/
version: 2.1
commands:
configure:
steps:
- run:
command: |
autoreconf -fi
./configure --enable-warnings --enable-werror --with-openssl \
|| { tail -1000 config.log; false; }
configure-openssl-no-verbose:
steps:
- run:
command: |
autoreconf -fi
./configure --disable-verbose --enable-werror --with-openssl \
|| { tail -1000 config.log; false; }
configure-no-proxy:
steps:
- run:
command: |
autoreconf -fi
./configure --disable-proxy --enable-werror --with-openssl \
|| { tail -1000 config.log; false; }
configure-macos-normal:
steps:
- run:
command: |
autoreconf -fi
./configure --enable-warnings --enable-websockets --without-ssl \
CPPFLAGS="-I$(brew --prefix libpsl)/include" \
CFLAGS='-mmacosx-version-min=10.9' \
LDFLAGS="-L$(brew --prefix libpsl)/lib -L$(brew --prefix icu4c)/lib" \
LIBS='-licuuc -licudata' \
|| { tail -1000 config.log; false; }
configure-macos-debug:
steps:
- run:
command: |
autoreconf -fi
./configure --enable-debug --enable-warnings --enable-websockets --without-ssl \
CPPFLAGS="-I$(brew --prefix libpsl)/include" \
CFLAGS='-mmacosx-version-min=10.9' \
LDFLAGS="-L$(brew --prefix libpsl)/lib -L$(brew --prefix icu4c)/lib" \
LIBS='-licuuc -licudata' \
|| { tail -1000 config.log; false; }
configure-macos-libssh2:
steps:
- run:
command: |
autoreconf -fi
./configure --enable-debug --enable-warnings --enable-websockets --without-ssl "--with-libssh2=$(brew --prefix libssh2)" \
CPPFLAGS="-I$(brew --prefix libpsl)/include" \
CFLAGS='-mmacosx-version-min=10.9' \
LDFLAGS="-L$(brew --prefix libpsl)/lib -L$(brew --prefix icu4c)/lib" \
LIBS='-licuuc -licudata' \
|| { tail -1000 config.log; false; }
configure-macos-libssh-c-ares:
steps:
- run:
command: |
autoreconf -fi
./configure --enable-debug --enable-warnings --enable-websockets --with-openssl --with-libssh --enable-ares \
PKG_CONFIG_PATH="$(brew --prefix openssl)/lib/pkgconfig" \
CPPFLAGS="-I$(brew --prefix libpsl)/include" \
CFLAGS='-mmacosx-version-min=10.9' \
LDFLAGS="-L$(brew --prefix libpsl)/lib -L$(brew --prefix icu4c)/lib" \
LIBS='-licuuc -licudata' \
|| { tail -1000 config.log; false; }
configure-macos-libssh:
steps:
- run:
command: |
autoreconf -fi
./configure --enable-debug --enable-warnings --enable-websockets --with-openssl --with-libssh \
PKG_CONFIG_PATH="$(brew --prefix openssl)/lib/pkgconfig" \
CPPFLAGS="-I$(brew --prefix libpsl)/include" \
CFLAGS='-mmacosx-version-min=10.9' \
LDFLAGS="-L$(brew --prefix libpsl)/lib -L$(brew --prefix icu4c)/lib" \
LIBS='-licuuc -licudata' \
|| { tail -1000 config.log; false; }
configure-macos-c-ares:
steps:
- run:
command: |
autoreconf -fi
./configure --enable-debug --enable-warnings --enable-websockets --without-ssl --enable-ares \
CPPFLAGS="-I$(brew --prefix libpsl)/include" \
CFLAGS='-mmacosx-version-min=10.9' \
LDFLAGS="-L$(brew --prefix libpsl)/lib -L$(brew --prefix icu4c)/lib" \
LIBS='-licuuc -licudata' \
|| { tail -1000 config.log; false; }
configure-macos-http-only:
steps:
- run:
command: |
autoreconf -fi
./configure --enable-debug --enable-warnings \
--disable-dict \
--disable-file \
--disable-ftp \
--disable-gopher \
--disable-imap \
--disable-ldap \
--disable-mqtt \
--disable-pop3 \
--disable-rtsp \
--disable-shared \
--disable-smb \
--disable-smtp \
--disable-telnet \
--disable-tftp \
--disable-unix-sockets \
--without-brotli \
--without-gssapi \
--without-libidn2 \
--without-libpsl \
--without-librtmp \
--without-libssh2 \
--without-nghttp2 \
--without-ssl \
--without-zlib \
CFLAGS='-mmacosx-version-min=10.15' \
|| { tail -1000 config.log; false; }
configure-macos-securetransport-http2:
steps:
- run:
command: |
autoreconf -fi
./configure --enable-warnings --enable-websockets --with-secure-transport \
CPPFLAGS="-I$(brew --prefix libpsl)/include" \
CFLAGS='-mmacosx-version-min=10.8' \
LDFLAGS="-L$(brew --prefix libpsl)/lib -L$(brew --prefix icu4c)/lib" \
LIBS='-licuuc -licudata' \
|| { tail -1000 config.log; false; }
configure-macos-openssl-http2:
steps:
- run:
command: |
autoreconf -fi
./configure --enable-debug --enable-warnings --enable-websockets --with-openssl \
PKG_CONFIG_PATH="$(brew --prefix openssl)/lib/pkgconfig" \
CPPFLAGS="-I$(brew --prefix libpsl)/include" \
CFLAGS='-mmacosx-version-min=10.9' \
LDFLAGS="-L$(brew --prefix libpsl)/lib -L$(brew --prefix icu4c)/lib" \
LIBS='-licuuc -licudata' \
|| { tail -1000 config.log; false; }
configure-macos-libressl-http2:
steps:
- run:
command: |
autoreconf -fi
./configure --enable-debug --enable-warnings --enable-websockets --with-openssl \
PKG_CONFIG_PATH="$(brew --prefix libressl)/lib/pkgconfig" \
CPPFLAGS="-I$(brew --prefix libpsl)/include" \
CFLAGS='-mmacosx-version-min=10.9' \
LDFLAGS="-L$(brew --prefix libpsl)/lib -L$(brew --prefix icu4c)/lib" \
LIBS='-licuuc -licudata' \
|| { tail -1000 config.log; false; }
configure-macos-torture:
steps:
- run:
command: |
autoreconf -fi
./configure --enable-debug --enable-warnings --enable-websockets --disable-shared --disable-threaded-resolver --with-openssl \
PKG_CONFIG_PATH="$(brew --prefix openssl)/lib/pkgconfig" \
CPPFLAGS="-I$(brew --prefix libpsl)/include" \
CFLAGS='-mmacosx-version-min=10.9' \
LDFLAGS="-L$(brew --prefix libpsl)/lib -L$(brew --prefix icu4c)/lib" \
LIBS='-licuuc -licudata' \
|| { tail -1000 config.log; false; }
configure-macos-torture-ftp:
steps:
- run:
command: |
autoreconf -fi
./configure --enable-debug --enable-warnings --enable-websockets --disable-shared --disable-threaded-resolver --with-openssl \
PKG_CONFIG_PATH="$(brew --prefix openssl)/lib/pkgconfig" \
CPPFLAGS="-I$(brew --prefix libpsl)/include" \
CFLAGS='-mmacosx-version-min=10.9' \
LDFLAGS="-L$(brew --prefix libpsl)/lib -L$(brew --prefix icu4c)/lib" \
LIBS='-licuuc -licudata' \
|| { tail -1000 config.log; false; }
install-cares:
steps:
- run:
command: |
sudo apt-get update && sudo apt-get install -y libc-ares-dev
install-libssh:
steps:
- run:
command: |
sudo apt-get update && sudo apt-get install -y libssh-dev
install-deps:
steps:
- run:
command: |
sudo apt-get update && sudo apt-get install -y libpsl-dev libbrotli-dev libzstd-dev zlib1g-dev python3-pip libpsl-dev
sudo python3 -m pip install impacket
install-deps-brew:
steps:
- run:
command: |
# Drop LibreSSL as long as we're not trying to build it
echo libtool autoconf automake pkg-config nghttp2 libssh2 openssl libssh c-ares libpsl icu4c | xargs -Ix -n1 echo brew '"x"' > /tmp/Brewfile
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
sudo python3 -m pip install impacket
configure-libssh:
steps:
- run:
command: |
autoreconf -fi
./configure --enable-warnings --enable-werror --with-openssl --with-libssh \
|| { tail -1000 config.log; false; }
install-wolfssl:
steps:
- run:
command: |
source .github/scripts/VERSIONS
echo "Installing wolfSSL $WOLFSSL_VER"
curl -LOsSf --retry 6 --retry-connrefused --max-time 999 https://github.com/wolfSSL/wolfssl/archive/v$WOLFSSL_VER-stable.tar.gz
tar -xzf v$WOLFSSL_VER-stable.tar.gz
cd wolfssl-$WOLFSSL_VER-stable
./autogen.sh
./configure --enable-tls13 --enable-all --enable-harden --prefix=$HOME/wssl
make install
install-wolfssh:
steps:
- run:
command: |
source .github/scripts/VERSIONS
echo "Installing wolfSSH $WOLFSSH_VER"
curl -LOsSf --retry 6 --retry-connrefused --max-time 999 https://github.com/wolfSSL/wolfssh/archive/v$WOLFSSH_VER-stable.tar.gz
tar -xzf v$WOLFSSH_VER-stable.tar.gz
cd wolfssh-$WOLFSSH_VER-stable
./autogen.sh
./configure --with-wolfssl=$HOME/wssl --prefix=$HOME/wssh --enable-scp --enable-sftp --disable-examples
make install
configure-cares:
steps:
- run:
command: |
autoreconf -fi
./configure --enable-warnings --enable-werror --with-openssl --enable-ares \
|| { tail -1000 config.log; false; }
configure-wolfssh:
steps:
- run:
command: |
autoreconf -fi
LDFLAGS="-Wl,-rpath,$HOME/wssh/lib" ./configure --enable-warnings --enable-werror --with-wolfssl=$HOME/wssl --with-wolfssh=$HOME/wssh \
|| { tail -1000 config.log; false; }
configure-cares-debug:
steps:
- run:
command: |
autoreconf -fi
./configure --enable-debug --enable-werror --with-openssl --enable-ares \
|| { tail -1000 config.log; false; }
build:
steps:
- run: make -j3 V=1
- run: make -j3 V=1 examples
build-macos:
steps:
- run: make -j5 V=1
- run: make -j5 V=1 examples
test:
steps:
- run: make -j3 V=1 test-ci TFLAGS='-j14'
test-macos:
steps:
- run: make -j5 V=1 test-ci TFLAGS='-j10'
test-torture:
steps:
- run: make -j5 V=1 test-ci TFLAGS='-j10 -n -t --shallow=25 !FTP'
test-torture-ftp:
steps:
# Test 250 takes too long, causing Circle CI to kill the job
- run: make -j5 V=1 test-ci TFLAGS='-j10 -n -t --shallow=20 FTP !250 !251'
executors:
ubuntu:
machine:
image: ubuntu-2004:2024.01.1
jobs:
basic:
executor: ubuntu
steps:
- checkout
- install-deps
- configure
- build
- test
no-verbose:
executor: ubuntu
steps:
- checkout
- install-deps
- configure-openssl-no-verbose
- build
wolfssh:
executor: ubuntu
steps:
- checkout
- install-deps
- install-wolfssl
- install-wolfssh
- configure-wolfssh
- build
no-proxy:
executor: ubuntu
steps:
- checkout
- install-deps
- configure-no-proxy
- build
- test
cares:
executor: ubuntu
steps:
- checkout
- install-deps
- install-cares
- configure-cares
- build
- test
libssh:
executor: ubuntu
steps:
- checkout
- install-deps
- install-libssh
- configure-libssh
- build
- test
arm:
machine:
image: ubuntu-2004:2024.01.1
resource_class: arm.medium
steps:
- checkout
- install-deps
- configure
- build
- test
arm-cares:
machine:
image: ubuntu-2004:2024.01.1
resource_class: arm.medium
steps:
- checkout
- install-deps
- install-cares
- configure-cares-debug
- build
- test
macos-arm-normal:
macos:
xcode: 15.0.0
resource_class: macos.m1.medium.gen1
steps:
- checkout
- install-deps-brew
- configure-macos-normal
- build-macos
- test-macos
macos-arm-debug:
macos:
xcode: 15.0.0
resource_class: macos.m1.medium.gen1
steps:
- checkout
- install-deps-brew
- configure-macos-debug
- build-macos
- test-macos
macos-arm-libssh2:
macos:
xcode: 15.0.0
resource_class: macos.m1.medium.gen1
steps:
- checkout
- install-deps-brew
- configure-macos-libssh2
- build-macos
- test-macos
macos-arm-libssh-c-ares:
macos:
xcode: 15.0.0
resource_class: macos.m1.medium.gen1
steps:
- checkout
- install-deps-brew
- configure-macos-libssh-c-ares
- build-macos
- test-macos
macos-arm-libssh:
macos:
xcode: 15.0.0
resource_class: macos.m1.medium.gen1
steps:
- checkout
- install-deps-brew
- configure-macos-libssh
- build-macos
- test-macos
macos-arm-c-ares:
macos:
xcode: 15.0.0
resource_class: macos.m1.medium.gen1
steps:
- checkout
- install-deps-brew
- configure-macos-c-ares
- build-macos
- test-macos
macos-arm-http-only:
macos:
xcode: 15.0.0
resource_class: macos.m1.medium.gen1
steps:
- checkout
- install-deps-brew
- configure-macos-http-only
- build-macos
- test-macos
macos-arm-http-securetransport-http2:
macos:
xcode: 15.0.0
resource_class: macos.m1.medium.gen1
steps:
- checkout
- install-deps-brew
- configure-macos-securetransport-http2
- build-macos
- test-macos
macos-arm-http-openssl-http2:
macos:
xcode: 15.0.0
resource_class: macos.m1.medium.gen1
steps:
- checkout
- install-deps-brew
- configure-macos-openssl-http2
- build-macos
- test-macos
macos-arm-http-libressl-http2:
macos:
xcode: 15.0.0
resource_class: macos.m1.medium.gen1
steps:
- checkout
- install-deps-brew
- configure-macos-libressl-http2
- build-macos
- test-macos
macos-arm-http-torture:
macos:
xcode: 15.0.0
resource_class: macos.m1.medium.gen1
steps:
- checkout
- install-deps-brew
- configure-macos-torture
- build-macos
- test-torture
macos-arm-http-torture-ftp:
macos:
xcode: 15.0.0
resource_class: macos.m1.medium.gen1
steps:
- checkout
- install-deps-brew
- configure-macos-torture-ftp
- build-macos
- test-torture-ftp
workflows:
x86-openssl:
jobs:
- basic
openssl-c-ares:
jobs:
- cares
openssl-libssh:
jobs:
- libssh
openssl-no-proxy:
jobs:
- no-proxy
openssl-no-verbose:
jobs:
- no-verbose
wolfssl-wolfssh:
jobs:
- wolfssh
arm-openssl:
jobs:
- arm
arm-openssl-c-ares:
jobs:
- arm-cares
macos-arm-normal:
jobs:
- macos-arm-normal
macos-arm-debug:
jobs:
- macos-arm-debug
macos-arm-libssh2:
jobs:
- macos-arm-libssh2
macos-arm-libssh-c-ares:
jobs:
- macos-arm-libssh-c-ares
macos-arm-libssh:
jobs:
- macos-arm-libssh
macos-arm-c-ares:
jobs:
- macos-arm-c-ares
macos-arm-http-only:
jobs:
- macos-arm-http-only
macos-arm-http-securetransport-http2:
jobs:
- macos-arm-http-securetransport-http2
macos-arm-http-openssl-http2:
jobs:
- macos-arm-http-openssl-http2
# There are problem linking with LibreSSL on the CI boxes that prevent this
# from working.
# macos-arm-http-libressl-http2:
# jobs:
# - macos-arm-http-libressl-http2
macos-arm-http-torture:
jobs:
- macos-arm-http-torture
macos-arm-http-torture-ftp:
jobs:
- macos-arm-http-torture-ftp