CI: Add Alpine Linux and old Ubuntu (#667)

Alpine linux doesn't use glibc but instead musl c, so provides a good alternative test bed. We are also adding the oldest non-EOL ubuntu version so we can test against older linux variants to prevent surprises.

This patch also migrates more tests to use cmake and ninja in order to reduce overall build times as we seem to run out of credits on Cirrus-CI pretty quickly.

Fix By: Brad House (@bradh352)
pull/669/head
Brad House 1 year ago committed by GitHub
parent d186f11ddd
commit 7aa6763641
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
  1. 63
      .cirrus.yml
  2. 10
      ci/build.sh
  3. 8
      ci/test.sh

@ -3,7 +3,8 @@
env:
CIRRUS_CLONE_DEPTH: 1
CMAKE_FLAGS: "-DCMAKE_BUILD_TYPE=DEBUG -DCARES_STATIC=ON -DCARES_STATIC_PIC=ON -DCARES_BUILD_TESTS=ON"
CMAKE_FLAGS: "-DCMAKE_BUILD_TYPE=DEBUG -DCARES_STATIC=ON -DCARES_STATIC_PIC=ON -G Ninja"
CMAKE_TEST_FLAGS: "-DCARES_BUILD_TESTS=ON"
task:
matrix:
@ -21,6 +22,26 @@ task:
TEST_SYMBOL_VISIBILITY: "yes"
container:
image: debian:latest
- name: "Alpine amd64"
env:
DIST: "ALPINE"
LC_ALL: "C"
SCAN_BUILD: "scan-build"
MAKE: "make"
BUILD_ASAN: "yes"
BUILD_UBSAN: "yes"
BUILD_VALGRIND: "yes"
BUILD_ANALYZE: "yes"
TEST_SYMBOL_VISIBILITY: "yes"
container:
image: alpine:latest
- name: "Ubuntu OLD amd64"
env:
DIST: "UBUNTU"
LC_ALL: "C"
MAKE: "make"
container:
image: ubuntu:20.04
- name: "Debian arm64"
env:
DIST: "DEBIAN-ARM"
@ -55,7 +76,8 @@ task:
env:
DIST: "iOS"
MAKE: "make"
CMAKE_FLAGS: "-DCMAKE_BUILD_TYPE=DEBUG -DCARES_STATIC=ON -DCARES_STATIC_PIC=ON -DCARES_BUILD_TESTS=OFF -DCMAKE_OSX_DEPLOYMENT_TARGET=10.0 -DCMAKE_OSX_ARCHITECTURES=armv7;armv7s;arm64"
CMAKE_FLAGS: "-DCMAKE_BUILD_TYPE=DEBUG -DCARES_STATIC=ON -DCARES_STATIC_PIC=ON -DCMAKE_OSX_DEPLOYMENT_TARGET=10.0 -DCMAKE_OSX_ARCHITECTURES=armv7;armv7s;arm64 -G Ninja"
CMAKE_TEST_FLAGS: "-DCARES_BUILD_TESTS=OFF"
CFLAGS: "-arch armv7 -arch armv7s -arch arm64 -miphoneos-version-min=10.0"
CONFIG_OPTS: "--host=arm-apple-darwin10 --disable-tests"
macos_instance:
@ -68,7 +90,7 @@ task:
only_if: $TEST_SYMBOL_VISIBILITY == 'yes'
env:
BUILD_TYPE: "cmake"
CMAKE_FLAGS: "-DCMAKE_BUILD_TYPE=DEBUG -DCARES_STATIC=OFF -DCARES_BUILD_TESTS=ON -DCARES_SYMBOL_HIDING=ON"
CMAKE_FLAGS: "-DCMAKE_BUILD_TYPE=DEBUG -DCARES_STATIC=OFF -DCARES_SYMBOL_HIDING=ON -G Ninja"
- name: "AUTOTOOLS"
env:
BUILD_TYPE: "autotools"
@ -82,7 +104,7 @@ task:
CONFIG_OPTS: "--enable-debug"
CFLAGS: "-fsanitize=address"
CXXFLAGS: "-fsanitize=address"
LDFLAGS: "-fsanitize=address -lpthread"
LDFLAGS: "-fsanitize=address"
- name: "UBSAN"
# FreeBSD just hangs trying to run tests, think it may be trying to run leak sanitizer
only_if: $BUILD_UBSAN == 'yes'
@ -92,7 +114,7 @@ task:
CONFIG_OPTS: "--enable-debug"
CFLAGS: "-fsanitize=undefined -fno-sanitize-recover"
CXXFLAGS: "-fsanitize=undefined -fno-sanitize-recover"
LDFLAGS: "-fsanitize=undefined -lpthread"
LDFLAGS: "-fsanitize=undefined"
- name: "ANALYZE"
only_if: $BUILD_ANALYZE == 'yes'
env:
@ -100,6 +122,7 @@ task:
CC: "clang"
SCAN_WRAP: "${SCAN_BUILD} -v --status-bugs"
CONFIG_OPTS: "--enable-debug --disable-tests"
CMAKE_TEST_FLAGS: "-DCARES_BUILD_TESTS=OFF"
- name: "VALGRIND"
# FreeBSD just hangs trying to run tests, think it may be trying to run leak sanitizer
only_if: $BUILD_VALGRIND == 'yes'
@ -122,21 +145,39 @@ task:
install_script:
- |
case "${DIST}" in
DEBIAN*)
ALPINE)
apk add cmake samurai gtest-dev autoconf autoconf-archive automake libtool pkgconf make
case "${BUILD_TYPE}" in
asan|lsan|ubsan)
apk add clang17 compiler-rt
;;
analyze)
apk add clang17 clang17-analyzer compiler-rt
;;
valgrind)
apk add gcc g++ valgrind
;;
*)
apk add gcc g++
;;
esac
;;
UBUNTU|DEBIAN*)
export DEBIAN_FRONTEND=noninteractive && \
apt-get update && \
apt-get install -y cmake ninja-build autoconf automake libtool g++ pip libgmock-dev pkg-config
apt-get install -y cmake ninja-build autoconf automake libtool g++ libgmock-dev pkg-config
case "${BUILD_TYPE}" in
asan|lsan|ubsan)
apt-get install -y clang
apt-get install -yq clang
;;
analyze)
apt-get install -y clang clang-tools
apt-get install -yq clang clang-tools
;;
valgrind)
apt-get install -y valgrind
apt-get install -yq valgrind
;;
coverage)
apt-get install -y lcov git
apt-get install -yq lcov git pip
pip3 install --break-system-packages --user cpp-coveralls
;;
esac

@ -15,7 +15,7 @@ if [ "$DIST" = "iOS" ] ; then
SYSROOT="${XCODE_PATH}/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk/"
fi
if [ "$BUILD_TYPE" != "cmake" -a "$BUILD_TYPE" != "valgrind" ]; then
if [ "$BUILD_TYPE" = "autotools" -o "$BUILD_TYPE" = "coverage" ]; then
autoreconf -fi
mkdir atoolsbld
cd atoolsbld
@ -27,12 +27,10 @@ if [ "$BUILD_TYPE" != "cmake" -a "$BUILD_TYPE" != "valgrind" ]; then
$SCAN_WRAP ../configure --disable-symbol-hiding --enable-expose-statics --enable-maintainer-mode --enable-debug $CONFIG_OPTS
$SCAN_WRAP make
else
# Use cmake for valgrind to prevent libtool script wrapping of tests that interfere with valgrind
mkdir cmakebld
cd cmakebld
# Use cmake for everything else
if [ "$DIST" = "iOS" ] ; then
CMAKE_FLAGS="${CMAKE_FLAGS} -DCMAKE_OSX_SYSROOT=${SYSROOT}"
fi
cmake ${CMAKE_FLAGS} ..
make
$SCAN_WRAP cmake ${CMAKE_FLAGS} ${CMAKE_TEST_FLAGS} -Bcmakebld .
$SCAN_WRAP cmake --build cmakebld
fi

@ -22,12 +22,12 @@ fi
PWD=`pwd`
TESTDIR="${PWD}/test"
if [ "$BUILD_TYPE" = "cmake" -o "$BUILD_TYPE" = "valgrind" ] ; then
TOOLSBIN="${PWD}/cmakebld/bin"
TESTSBIN="${PWD}/cmakebld/bin"
else
if [ "$BUILD_TYPE" = "autotools" -o "$BUILD_TYPE" = "coverage" ]; then
TOOLSBIN="${PWD}/atoolsbld/src/tools"
TESTSBIN="${PWD}/atoolsbld/test"
else
TOOLSBIN="${PWD}/cmakebld/bin"
TESTSBIN="${PWD}/cmakebld/bin"
fi
$TEST_WRAP "${TOOLSBIN}/adig" www.google.com

Loading…
Cancel
Save