From b36746c90e8fade41d323ebdd89d9e41546e099b Mon Sep 17 00:00:00 2001 From: Frantisek Sumsal Date: Sun, 7 Jun 2020 14:05:20 +0200 Subject: travis: check build with various compiler options In the past we occasionally stumbled upon a build issue which could be reproduced only with specific optimization level or other compilation option. Let's try to build the current revision with several most common compiler options causing such issues to catch them early. --- travis-ci/managers/fedora.sh | 76 ++++++++++++++++++++++++++++++++++++++++---- 1 file changed, 70 insertions(+), 6 deletions(-) (limited to 'travis-ci') diff --git a/travis-ci/managers/fedora.sh b/travis-ci/managers/fedora.sh index b0f431aac9..b3c85ebd09 100755 --- a/travis-ci/managers/fedora.sh +++ b/travis-ci/managers/fedora.sh @@ -29,10 +29,34 @@ ADDITIONAL_DEPS=(dnf-plugins-core openssl-devel p11-kit-devel) -function info() { +info() { echo -e "\033[33;1m$1\033[0m" } +error() { + echo >&2 -e "\033[31;1m$1\033[0m" +} + +success() { + echo >&2 -e "\033[32;1m$1\033[0m" +} + +# Simple wrapper which retries given command up to five times +_retry() { + local EC=1 + + for i in {1..5}; do + if "$@"; then + EC=0 + break + fi + + sleep $((i * 5)) + done + + return $EC +} + set -e source "$(dirname $0)/travis_wait.bash" @@ -52,11 +76,11 @@ for phase in "${PHASES[@]}"; do # running following dnf commands during the initializing/starting # (early/late bootup) phase, which caused nasty race conditions $DOCKER_EXEC bash -c 'systemctl is-system-running --wait || :' - $DOCKER_EXEC dnf makecache + _retry $DOCKER_EXEC dnf makecache # Install necessary build/test requirements - $DOCKER_EXEC dnf -y --exclude selinux-policy\* upgrade - $DOCKER_EXEC dnf -y install "${ADDITIONAL_DEPS[@]}" - $DOCKER_EXEC dnf -y builddep systemd + _retry $DOCKER_EXEC dnf -y --exclude selinux-policy\* upgrade + _retry $DOCKER_EXEC dnf -y install "${ADDITIONAL_DEPS[@]}" + _retry $DOCKER_EXEC dnf -y builddep systemd ;; RUN) info "Run phase" @@ -86,13 +110,53 @@ for phase in "${PHASES[@]}"; do -t $CONT_NAME \ meson test --timeout-multiplier=3 -C ./build/ --print-errorlogs ;; + RUN_BUILD_CHECK_GCC|RUN_BUILD_CHECK_CLANG) + ARGS=( + "--optimization=0" + "--optimization=2" + "--optimization=3" + "--optimization=s" + "-Db_lto=true" + "-Db_ndebug=true" + ) + + if [[ "$phase" = "RUN_BUILD_CHECK_CLANG" ]]; then + ENV_VARS="-e CC=clang -e CXX=clang++" + $DOCKER_EXEC clang --version + else + $DOCKER_EXEC gcc --version + fi + + for args in "${ARGS[@]}"; do + SECONDS=0 + info "Checking build with $args" + # Redirect meson/ninja logs into separate files, otherwise we + # would trip over Travis' log size limit + if ! docker exec $ENV_VARS -it $CONT_NAME meson --werror $args build &> meson.log; then + cat meson.log + error "meson failed with $args" + exit 1 + fi + + if ! $DOCKER_EXEC ninja -v -C build &> ninja.log; then + cat ninja.log + error "ninja failed with $args" + exit 1 + fi + + $DOCKER_EXEC rm -fr build + rm -f meson.log ninja.log + success "Build with $args passed in $SECONDS seconds" + done + + ;; CLEANUP) info "Cleanup phase" docker stop $CONT_NAME docker rm -f $CONT_NAME ;; *) - echo >&2 "Unknown phase '$phase'" + error "Unknown phase '$phase'" exit 1 esac done -- cgit v1.2.1