summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFrantisek Sumsal <frantisek@sumsal.cz>2020-06-07 14:05:20 +0200
committerFrantisek Sumsal <frantisek@sumsal.cz>2020-06-09 21:27:07 +0200
commitb36746c90e8fade41d323ebdd89d9e41546e099b (patch)
tree6ad3d4fab5560527765ee665897afed635a383f5
parent8b8ae7959d212c51ada4c1f13df5fb573461d024 (diff)
downloadsystemd-b36746c90e8fade41d323ebdd89d9e41546e099b.tar.gz
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.
-rw-r--r--.travis.yml42
-rwxr-xr-xtravis-ci/managers/fedora.sh76
2 files changed, 112 insertions, 6 deletions
diff --git a/.travis.yml b/.travis.yml
index 78cf5bc6f2..e57c199077 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -11,6 +11,9 @@ env:
- REPO_ROOT="$TRAVIS_BUILD_DIR"
stages:
+ - name: Build check
+ if: type != cron
+
- name: Build & test
if: type != cron
@@ -20,6 +23,45 @@ stages:
jobs:
include:
+ - stage: Build check
+ name: Fedora Rawhide (gcc)
+ language: bash
+ env:
+ - FEDORA_RELEASE="rawhide"
+ - CONT_NAME="systemd-fedora-$FEDORA_RELEASE"
+ - DOCKER_EXEC="docker exec -ti $CONT_NAME"
+ before_install:
+ - sudo apt-get -y -o Dpkg::Options::="--force-confnew" install docker-ce
+ - docker --version
+ install:
+ - $CI_MANAGERS/fedora.sh SETUP
+ script:
+ - set -e
+ # Build systemd
+ - $CI_MANAGERS/fedora.sh RUN_BUILD_CHECK_GCC
+ - set +e
+ after_script:
+ - $CI_MANAGERS/fedora.sh CLEANUP
+
+ - name: Fedora Rawhide (clang)
+ language: bash
+ env:
+ - FEDORA_RELEASE="rawhide"
+ - CONT_NAME="systemd-fedora-$FEDORA_RELEASE"
+ - DOCKER_EXEC="docker exec -ti $CONT_NAME"
+ before_install:
+ - sudo apt-get -y -o Dpkg::Options::="--force-confnew" install docker-ce
+ - docker --version
+ install:
+ - $CI_MANAGERS/fedora.sh SETUP
+ script:
+ - set -e
+ # Build systemd
+ - $CI_MANAGERS/fedora.sh RUN_BUILD_CHECK_CLANG
+ - set +e
+ after_script:
+ - $CI_MANAGERS/fedora.sh CLEANUP
+
- stage: Build & test
name: Debian Testing
language: bash
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