2018-11-06 11:04:10 +03:00
#!/bin/bash
# Run this script from the root of the systemd's git repository
# or set REPO_ROOT to a correct path.
#
# Example execution on Fedora:
2018-11-06 19:16:45 +03:00
# dnf install docker
2018-11-06 11:04:10 +03:00
# systemctl start docker
# export CONT_NAME="my-fancy-container"
# travis-ci/managers/fedora.sh SETUP RUN CLEANUP
2018-11-08 01:01:27 +03:00
PHASES = ( ${ @ :- SETUP RUN RUN_ASAN CLEANUP } )
2018-11-06 11:04:10 +03:00
FEDORA_RELEASE = " ${ FEDORA_RELEASE :- rawhide } "
CONT_NAME = " ${ CONT_NAME :- fedora - $FEDORA_RELEASE - $RANDOM } "
DOCKER_EXEC = " ${ DOCKER_EXEC :- docker exec -it $CONT_NAME } "
DOCKER_RUN = " ${ DOCKER_RUN :- docker run } "
REPO_ROOT = " ${ REPO_ROOT :- $PWD } "
2019-05-10 11:33:37 +03:00
ADDITIONAL_DEPS = ( dnf-plugins-core
2019-10-29 22:07:15 +03:00
jq iputils
2019-05-10 11:33:37 +03:00
hostname libasan
python3-pyparsing
python3-evdev
libubsan
clang
llvm
perl)
2018-11-06 11:04:10 +03:00
function info( ) {
echo -e " \033[33;1m $1 \033[0m "
}
set -e
2018-11-14 12:38:59 +03:00
source " $( dirname $0 ) /travis_wait.bash "
2018-11-06 11:04:10 +03:00
for phase in " ${ PHASES [@] } " ; do
case $phase in
SETUP)
info "Setup phase"
info " Using Fedora $FEDORA_RELEASE "
# Pull a Docker image and start a new container
docker pull fedora:$FEDORA_RELEASE
info " Starting container $CONT_NAME "
$DOCKER_RUN -v $REPO_ROOT :/build:rw \
-w /build --privileged= true --name $CONT_NAME \
-dit --net= host fedora:$FEDORA_RELEASE /sbin/init
2018-11-06 22:55:07 +03:00
# Beautiful workaround for Fedora's version of Docker
sleep 1
2018-11-06 11:04:10 +03:00
$DOCKER_EXEC dnf makecache
# Install necessary build/test requirements
2018-11-06 22:55:07 +03:00
$DOCKER_EXEC dnf -y --exclude selinux-policy\* upgrade
2018-11-06 11:04:10 +03:00
$DOCKER_EXEC dnf -y install " ${ ADDITIONAL_DEPS [@] } "
$DOCKER_EXEC dnf -y builddep systemd
; ;
RUN)
info "Run phase"
# Build systemd
2018-11-14 09:41:06 +03:00
$DOCKER_EXEC meson --werror -Dtests= unsafe -Dslow-tests= true build
2018-11-07 09:49:50 +03:00
$DOCKER_EXEC ninja -v -C build
2018-11-08 00:23:46 +03:00
$DOCKER_EXEC ninja -C build test
2018-11-08 01:01:27 +03:00
; ;
2018-12-01 02:45:35 +03:00
RUN_CLANG)
2019-05-09 14:26:57 +03:00
docker exec -e CC = clang -e CXX = clang++ -it $CONT_NAME meson --werror -Dtests= unsafe -Dslow-tests= true -Dman= true build
2018-12-01 02:45:35 +03:00
$DOCKER_EXEC ninja -v -C build
$DOCKER_EXEC ninja -C build test
; ;
2018-12-02 09:39:18 +03:00
RUN_ASAN| RUN_CLANG_ASAN)
if [ [ " $phase " = "RUN_CLANG_ASAN" ] ] ; then
ENV_VARS = "-e CC=clang -e CXX=clang++"
MESON_ARGS = "-Db_lundef=false" # See https://github.com/mesonbuild/meson/issues/764
fi
docker exec $ENV_VARS -it $CONT_NAME meson --werror -Dtests= unsafe -Db_sanitize= address,undefined $MESON_ARGS build
2018-11-08 00:23:46 +03:00
$DOCKER_EXEC ninja -v -C build
2018-11-08 03:28:11 +03:00
# Never remove halt_on_error from UBSAN_OPTIONS. See https://github.com/systemd/systemd/commit/2614d83aa06592aedb.
2018-11-16 17:49:02 +03:00
travis_wait docker exec --interactive= false \
-e UBSAN_OPTIONS = print_stacktrace = 1:print_summary= 1:halt_on_error= 1 \
-e ASAN_OPTIONS = strict_string_checks = 1:detect_stack_use_after_return= 1:check_initialization_order= 1:strict_init_order= 1 \
2018-11-20 17:47:11 +03:00
-e " TRAVIS= $TRAVIS " \
2018-11-16 17:49:02 +03:00
-t $CONT_NAME \
meson test --timeout-multiplier= 3 -C ./build/ --print-errorlogs
2018-11-06 11:04:10 +03:00
; ;
CLEANUP)
info "Cleanup phase"
docker stop $CONT_NAME
docker rm -f $CONT_NAME
; ;
*)
echo >& 2 " Unknown phase ' $phase ' "
exit 1
esac
done