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 } "
2018-11-08 03:28:11 +03:00
ADDITIONAL_DEPS = ( dnf-plugins-core python2 iputils hostname libasan python3-pyparsing python3-evdev libubsan)
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
; ;
RUN_ASAN)
2018-11-08 00:23:46 +03:00
$DOCKER_EXEC git clean -dxff
2018-11-14 09:41:06 +03:00
$DOCKER_EXEC meson --werror -Dtests= unsafe -Db_sanitize= address,undefined 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 \
-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