summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rwxr-xr-x.github/workflows/ubuntu-unit-tests.sh79
-rw-r--r--.github/workflows/unit_tests.yml24
-rw-r--r--.travis.yml22
3 files changed, 103 insertions, 22 deletions
diff --git a/.github/workflows/ubuntu-unit-tests.sh b/.github/workflows/ubuntu-unit-tests.sh
new file mode 100755
index 0000000000..831eab97f8
--- /dev/null
+++ b/.github/workflows/ubuntu-unit-tests.sh
@@ -0,0 +1,79 @@
+#!/bin/bash
+
+PHASES=(${@:-SETUP RUN RUN_ASAN_UBSAN CLEANUP})
+RELEASE="$(lsb_release -cs)"
+ADDITIONAL_DEPS=(
+ clang
+ expect
+ fdisk
+ libfdisk-dev
+ libfido2-dev
+ libp11-kit-dev
+ libpwquality-dev
+ libqrencode-dev
+ libssl-dev
+ libtss2-dev
+ libzstd-dev
+ perl
+ python3-libevdev
+ python3-pyparsing
+ zstd
+)
+
+function info() {
+ echo -e "\033[33;1m$1\033[0m"
+}
+
+set -ex
+
+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[@]}"
+ ;;
+ RUN|RUN_GCC|RUN_CLANG)
+ if [[ "$phase" = "RUN_CLANG" ]]; then
+ export CC=clang
+ export CXX=clang++
+ MESON_ARGS=(--optimization=1)
+ fi
+ meson --werror -Dtests=unsafe -Dslow-tests=true -Dfuzz-tests=true -Dman=true "${MESON_ARGS[@]}" build
+ ninja -C build -v
+ meson test -C build --print-errorlogs
+ ;;
+ RUN_ASAN_UBSAN|RUN_GCC_ASAN_UBSAN|RUN_CLANG_ASAN_UBSAN)
+ if [[ "$phase" = "RUN_CLANG_ASAN_UBSAN" ]]; then
+ 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
+ MESON_ARGS=(-Db_lundef=false -Dfuzz-tests=true --optimization=1)
+ fi
+ meson --werror -Dtests=unsafe -Db_sanitize=address,undefined "${MESON_ARGS[@]}" build
+ 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
+ # There's some weird stuff going on in GH Actions, where the following
+ # `meson test` command hangs after test #252 unless it's executed under
+ # unbuffer or there's something else producing output. So far it happens
+ # _only_ with ASAn (not with UBSan), both with gcc and clang. I'll
+ # need to take a closer look later...
+ unbuffer meson test --timeout-multiplier=3 -C build --print-errorlogs
+ ;;
+ CLEANUP)
+ info "Cleanup phase"
+ ;;
+ *)
+ echo >&2 "Unknown phase '$phase'"
+ exit 1
+ esac
+done
diff --git a/.github/workflows/unit_tests.yml b/.github/workflows/unit_tests.yml
new file mode 100644
index 0000000000..f63037fdb0
--- /dev/null
+++ b/.github/workflows/unit_tests.yml
@@ -0,0 +1,24 @@
+
+---
+# vi: ts=2 sw=2 et:
+#
+name: Unit tests
+on:
+ pull_request:
+ branches:
+ - master
+
+jobs:
+ build:
+ runs-on: ubuntu-20.04
+ strategy:
+ fail-fast: false
+ matrix:
+ run_phase: [GCC, GCC_ASAN_UBSAN, CLANG, CLANG_ASAN_UBSAN]
+ steps:
+ - name: Repository checkout
+ uses: actions/checkout@v1
+ - name: Install build dependencies
+ run: sudo -E .github/workflows/ubuntu-unit-tests.sh SETUP
+ - name: Build & test (${{ matrix.run_phase }})
+ run: sudo -E .github/workflows/ubuntu-unit-tests.sh RUN_${{ matrix.run_phase }}
diff --git a/.travis.yml b/.travis.yml
index 50f8e6a230..5f99e8df6a 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -12,34 +12,12 @@ env:
- CI_MANAGERS="$TRAVIS_BUILD_DIR/travis-ci/managers"
- CI_TOOLS="$TRAVIS_BUILD_DIR/travis-ci/tools"
- REPO_ROOT="$TRAVIS_BUILD_DIR"
- jobs:
- - DEBIAN_RELEASE=testing PHASE="RUN_GCC"
- - DEBIAN_RELEASE=testing PHASE="RUN_GCC_ASAN_UBSAN"
- - DEBIAN_RELEASE=testing PHASE="RUN_CLANG"
- - DEBIAN_RELEASE=testing PHASE="RUN_CLANG_ASAN_UBSAN"
stages:
- # 'Test' is the default stage (for matrix jobs)
- - name: Test
- if: type != cron
-
# Run Coverity periodically instead of for each commit/PR
- name: Coverity
if: type = cron
-# Matrix job definition - this is run for each combination of env variables
-# from the env.jobs array above
-before_install:
- - sudo apt-get -y -o Dpkg::Options::="--force-confnew" install docker-ce
- - docker --version
-install:
- - $CI_MANAGERS/debian.sh SETUP
-script:
- - $CI_MANAGERS/debian.sh $PHASE || travis_terminate 1
-after_script:
- - $CI_MANAGERS/debian.sh CLEANUP
-
-# Inject another (single) job into the matrix for Coverity
jobs:
include:
- stage: Coverity