2021-12-12 22:27:04 +03:00
#!/usr/bin/env bash
2021-10-01 13:10:22 +03:00
# SPDX-License-Identifier: LGPL-2.1-or-later
2021-01-05 13:52:46 +03:00
2021-09-29 20:55:24 +03:00
# shellcheck disable=SC2206
2021-01-05 13:52:46 +03:00
PHASES = ( ${ @ :- SETUP RUN RUN_ASAN_UBSAN CLEANUP } )
RELEASE = " $( lsb_release -cs) "
ADDITIONAL_DEPS = (
clang
expect
fdisk
2021-05-19 16:45:47 +03:00
jekyll
2022-01-16 11:32:17 +03:00
libbpf-dev
2021-01-05 13:52:46 +03:00
libfdisk-dev
libfido2-dev
libp11-kit-dev
libpwquality-dev
libqrencode-dev
libssl-dev
libtss2-dev
2022-01-16 18:30:22 +03:00
libxkbcommon-dev
2021-01-05 13:52:46 +03:00
libzstd-dev
perl
python3-libevdev
python3-pyparsing
2022-03-03 22:30:43 +03:00
rpm
2021-01-05 13:52:46 +03:00
zstd
)
function info( ) {
echo -e " \033[33;1m $1 \033[0m "
}
2022-01-13 10:01:17 +03:00
function run_meson( ) {
if ! meson " $@ " ; then
find . -type f -name meson-log.txt -exec cat '{}' +
return 1
fi
}
2021-01-05 13:52:46 +03:00
set -ex
2021-12-01 14:50:01 +03:00
MESON_ARGS = ( -Dcryptolib= ${ CRYPTOLIB :- auto } )
2021-01-05 13:52:46 +03:00
for phase in " ${ PHASES [@] } " ; do
case $phase in
SETUP)
info "Setup phase"
bash -c " echo 'deb-src http://archive.ubuntu.com/ubuntu/ $RELEASE main restricted universe multiverse' >>/etc/apt/sources.list "
# PPA with some newer build dependencies
add-apt-repository -y ppa:upstream-systemd-ci/systemd-ci
apt-get -y update
apt-get -y build-dep systemd
apt-get -y install " ${ ADDITIONAL_DEPS [@] } "
2022-01-13 20:36:56 +03:00
pip3 install -r .github/workflows/requirements.txt --require-hashes
2021-01-05 13:52:46 +03:00
; ;
RUN| RUN_GCC| RUN_CLANG)
if [ [ " $phase " = "RUN_CLANG" ] ] ; then
export CC = clang
export CXX = clang++
2021-09-27 14:24:48 +03:00
# The docs build is slow and is not affected by compiler/flags, so do it just once
MESON_ARGS += ( -Dman= true )
2021-01-05 13:52:46 +03:00
fi
2022-04-28 04:26:04 +03:00
# The install_tag feature introduced in 0.60 causes meson to fail with fatal-meson-warnings
# "Project targeting '>= 0.53.2' but tried to use feature introduced in '0.60.0': install_tag arg in custom_target"
# It can be safely removed from the CI since it isn't actually used anywhere to test anything.
find . -type f -name meson.build -exec sed -i '/install_tag/d' '{}' '+'
MESON_ARGS += ( --fatal-meson-warnings)
2022-04-27 12:54:14 +03:00
run_meson -Dnobody-group= nogroup --werror -Dtests= unsafe -Dslow-tests= true -Dfuzz-tests= true " ${ MESON_ARGS [@] } " build
2021-01-05 13:52:46 +03:00
ninja -C build -v
2021-09-29 11:37:21 +03:00
meson test -C build --print-errorlogs
2021-01-05 13:52:46 +03:00
; ;
2022-02-22 14:02:44 +03:00
RUN_ASAN_UBSAN| RUN_GCC_ASAN_UBSAN| RUN_CLANG_ASAN_UBSAN| RUN_CLANG_ASAN_UBSAN_NO_DEPS)
2021-01-13 23:48:36 +03:00
MESON_ARGS = ( --optimization= 1)
2022-02-22 14:02:44 +03:00
if [ [ " $phase " = ~ ^RUN_CLANG_ASAN_UBSAN ] ] ; then
2021-01-05 13:52:46 +03:00
export CC = clang
export CXX = clang++
# Build fuzzer regression tests only with clang (for now),
# see: https://github.com/systemd/systemd/pull/15886#issuecomment-632689604
# -Db_lundef=false: See https://github.com/mesonbuild/meson/issues/764
2021-01-13 23:48:36 +03:00
MESON_ARGS += ( -Db_lundef= false -Dfuzz-tests= true )
2022-02-22 14:02:44 +03:00
if [ [ " $phase " = = "RUN_CLANG_ASAN_UBSAN_NO_DEPS" ] ] ; then
MESON_ARGS += ( -Dskip-deps= true )
fi
2021-01-05 13:52:46 +03:00
fi
2022-04-28 04:26:04 +03:00
# The install_tag feature introduced in 0.60 causes meson to fail with fatal-meson-warnings
# "Project targeting '>= 0.53.2' but tried to use feature introduced in '0.60.0': install_tag arg in custom_target"
# It can be safely removed from the CI since it isn't actually used anywhere to test anything.
find . -type f -name meson.build -exec sed -i '/install_tag/d' '{}' '+'
MESON_ARGS += ( --fatal-meson-warnings)
2022-04-27 12:54:14 +03:00
run_meson -Dnobody-group= nogroup --werror -Dtests= unsafe -Db_sanitize= address,undefined " ${ MESON_ARGS [@] } " build
2021-01-05 13:52:46 +03:00
ninja -C build -v
export ASAN_OPTIONS = strict_string_checks = 1:detect_stack_use_after_return= 1:check_initialization_order= 1:strict_init_order= 1
# Never remove halt_on_error from UBSAN_OPTIONS. See https://github.com/systemd/systemd/commit/2614d83aa06592aedb.
export UBSAN_OPTIONS = print_stacktrace = 1:print_summary= 1:halt_on_error= 1
2021-01-13 23:42:13 +03:00
# FIXME
# For some strange reason the GH Actions VM stops responding after
# executing first ~150 tests, _unless_ there's something producing
# output (either running `meson test` in verbose mode, or something
# else in background). Despite my efforts so far I haven't been able
# to identify the culprit (since the issue is not reproducible
# during debugging, wonderful), so let's at least keep a workaround
# here to make the builds stable for the time being.
( set +x; while :; do echo -ne " \n[WATCHDOG] $( date) \n " ; sleep 30; done ) &
2021-09-29 11:37:21 +03:00
meson test --timeout-multiplier= 3 -C build --print-errorlogs
2021-01-05 13:52:46 +03:00
; ;
CLEANUP)
info "Cleanup phase"
; ;
*)
echo >& 2 " Unknown phase ' $phase ' "
exit 1
esac
done