ci: clean up .travis.yaml

Clean up Travis CI config, extract multi-step initializations into scripts.
Also, move kernel-building tests to happen last to not block lightweight
Debian and Ubuntu tests.

Signed-off-by: Andrii Nakryiko <andriin@fb.com>
This commit is contained in:
Andrii Nakryiko
2020-02-20 12:28:46 -08:00
committed by Andrii Nakryiko
parent e287979374
commit 17c26b7da6
4 changed files with 89 additions and 137 deletions

View File

@@ -8,16 +8,9 @@ env:
global: global:
- PROJECT_NAME='libbpf' - PROJECT_NAME='libbpf'
- AUTHOR_EMAIL="$(git log -1 --pretty=\"%aE\")" - AUTHOR_EMAIL="$(git log -1 --pretty=\"%aE\")"
- CI_MANAGERS="$TRAVIS_BUILD_DIR/travis-ci/managers"
- VMTEST_ROOT="$TRAVIS_BUILD_DIR/travis-ci/vmtest"
- REPO_ROOT="$TRAVIS_BUILD_DIR" - REPO_ROOT="$TRAVIS_BUILD_DIR"
- VMTEST_SETUPCMD="PROJECT_NAME=${PROJECT_NAME} ./${PROJECT_NAME}/travis-ci/vmtest/run_selftests.sh" - CI_ROOT="$REPO_ROOT/travis-ci"
jobs: - VMTEST_ROOT="$CI_ROOT/vmtest"
# Setup command override.
# 5.5.0-rc6 is built from bpf-next; TODO(hex@): remove when pahole v1.16 is available
- KERNEL=5.5.0-rc6
- KERNEL=5.5.0
- KERNEL=LATEST
addons: addons:
apt: apt:
@@ -28,25 +21,6 @@ addons:
- elfutils - elfutils
- libcap-dev - libcap-dev
- libelf-dev - libelf-dev
install: sudo adduser "${USER}" kvm
before_script:
- wget -O - https://apt.llvm.org/llvm-snapshot.gpg.key | sudo apt-key add -
- echo "deb http://apt.llvm.org/bionic/ llvm-toolchain-bionic-10 main" | sudo tee -a /etc/apt/sources.list
- echo "deb http://archive.ubuntu.com/ubuntu eoan main restricted universe multiverse" | sudo tee -a /etc/apt/sources.list
- sudo apt-get -qq update
- sudo apt-get -y install dwarves=1.15-1
- sudo apt-get -qq -y install clang-10 lld-10 llvm-10
- KERNEL="${KERNEL}" ${VMTEST_ROOT}/prepare_selftests.sh travis-ci/vmtest/bpf-next
# Escape whitespace characters.
- setup_cmd=$(sed 's/\([[:space:]]\)/\\\1/g' <<< "${VMTEST_SETUPCMD}")
- if [[ "${KERNEL}" = 'LATEST' ]]; then
sudo -E sudo -E -u "${USER}" "${VMTEST_ROOT}/run.sh" -b travis-ci/vmtest/bpf-next -o -d ~ -s "${setup_cmd}" ~/root.img;
else
sudo -E sudo -E -u "${USER}" "${VMTEST_ROOT}/run.sh" -k "${KERNEL}*" -o -d ~ -s "${setup_cmd}" ~/root.img;
fi; exitstatus=$?
- test $exitstatus -le 1
script:
- test $exitstatus -eq 0
stages: stages:
# Run Coverity periodically instead of for each PR for following reasons: # Run Coverity periodically instead of for each PR for following reasons:
@@ -60,130 +34,79 @@ stages:
jobs: jobs:
include: include:
- stage: Build & test - stage: Build
name: Debian Testing name: Debian Build
language: bash language: bash
env: install: $CI_ROOT/managers/debian.sh SETUP
- DEBIAN_RELEASE="testing" script: $CI_ROOT/managers/debian.sh RUN || travis_terminate
- CONT_NAME="libbpf-debian-$DEBIAN_RELEASE" after_script: $CI_ROOT/managers/debian.sh CLEANUP
before_install:
- sudo apt-get -y -o Dpkg::Options::="--force-confnew" install docker-ce
- docker --version
install:
- $CI_MANAGERS/debian.sh SETUP
# Override before_script: so VMTEST before_install commands are not executed.
before_script: true
script:
- $CI_MANAGERS/debian.sh RUN || travis_terminate
after_script:
- $CI_MANAGERS/debian.sh CLEANUP
- name: Debian Testing (ASan+UBSan) - name: Debian Build (ASan+UBSan)
language: bash language: bash
env: install: $CI_ROOT/managers/debian.sh SETUP
- DEBIAN_RELEASE="testing" script: $CI_ROOT/managers/debian.sh RUN_ASAN || travis_terminate
- CONT_NAME="libbpf-debian-$DEBIAN_RELEASE" after_script: $CI_ROOT/managers/debian.sh CLEANUP
before_install:
- sudo apt-get -y -o Dpkg::Options::="--force-confnew" install docker-ce
- docker --version
install:
- $CI_MANAGERS/debian.sh SETUP
before_script: true
script:
- $CI_MANAGERS/debian.sh RUN_ASAN || travis_terminate
after_script:
- $CI_MANAGERS/debian.sh CLEANUP
- name: Debian Testing (clang) - name: Debian Build (clang)
language: bash language: bash
env: install: $CI_ROOT/managers/debian.sh SETUP
- DEBIAN_RELEASE="testing" script: $CI_ROOT/managers/debian.sh RUN_CLANG || travis_terminate
- CONT_NAME="libbpf-debian-$DEBIAN_RELEASE" after_script: $CI_ROOT/managers/debian.sh CLEANUP
before_install:
- sudo apt-get -y -o Dpkg::Options::="--force-confnew" install docker-ce
- docker --version
install:
- $CI_MANAGERS/debian.sh SETUP
before_script: true
script:
- $CI_MANAGERS/debian.sh RUN_CLANG || travis_terminate
after_script:
- $CI_MANAGERS/debian.sh CLEANUP
- name: Debian Testing (clang ASan+UBSan) - name: Debian Build (clang ASan+UBSan)
language: bash language: bash
env: install: $CI_ROOT/managers/debian.sh SETUP
- DEBIAN_RELEASE="testing" script: $CI_ROOT/managers/debian.sh RUN_CLANG_ASAN || travis_terminate
- CONT_NAME="libbpf-debian-$DEBIAN_RELEASE" after_script: $CI_ROOT/managers/debian.sh CLEANUP
before_install:
- sudo apt-get -y -o Dpkg::Options::="--force-confnew" install docker-ce
- docker --version
install:
- $CI_MANAGERS/debian.sh SETUP
before_script: true
script:
- $CI_MANAGERS/debian.sh RUN_CLANG_ASAN || travis_terminate
after_script:
- $CI_MANAGERS/debian.sh CLEANUP
- name: Debian Testing (gcc-8) - name: Debian Build (gcc-8)
language: bash language: bash
env: install: $CI_ROOT/managers/debian.sh SETUP
- DEBIAN_RELEASE="testing" script: $CI_ROOT/managers/debian.sh RUN_GCC8 || travis_terminate
- CONT_NAME="libbpf-debian-$DEBIAN_RELEASE" after_script: $CI_ROOT/managers/debian.sh CLEANUP
before_install:
- sudo apt-get -y -o Dpkg::Options::="--force-confnew" install docker-ce
- docker --version
install:
- $CI_MANAGERS/debian.sh SETUP
before_script: true
script:
- $CI_MANAGERS/debian.sh RUN_GCC8 || travis_terminate
after_script:
- $CI_MANAGERS/debian.sh CLEANUP
- name: Debian Testing (gcc-8 ASan+UBSan) - name: Debian Build (gcc-8 ASan+UBSan)
language: bash language: bash
env: install: $CI_ROOT/managers/debian.sh SETUP
- DEBIAN_RELEASE="testing" script: $CI_ROOT/managers/debian.sh RUN_GCC8_ASAN || travis_terminate
- CONT_NAME="libbpf-debian-$DEBIAN_RELEASE" after_script: $CI_ROOT/managers/debian.sh CLEANUP
before_install:
- sudo apt-get -y -o Dpkg::Options::="--force-confnew" install docker-ce
- docker --version
install:
- $CI_MANAGERS/debian.sh SETUP
before_script: true
script:
- $CI_MANAGERS/debian.sh RUN_GCC8_ASAN || travis_terminate
after_script:
- $CI_MANAGERS/debian.sh CLEANUP
- name: Ubuntu Bionic - name: Ubuntu Bionic Build
language: bash language: bash
before_script: true script: sudo $CI_ROOT/managers/ubuntu.sh || travis_terminate
script:
- sudo $CI_MANAGERS/ubuntu.sh || travis_terminate
- name: Ubuntu Bionic (arm) - name: Ubuntu Bionic Build (arm)
arch: arm64 arch: arm64
language: bash language: bash
before_script: true script: sudo $CI_ROOT/managers/ubuntu.sh || travis_terminate
script:
- sudo $CI_MANAGERS/ubuntu.sh || travis_terminate
- name: Ubuntu Bionic (s390x) - name: Ubuntu Bionic Build (s390x)
arch: s390x arch: s390x
language: bash language: bash
before_script: true script: sudo $CI_ROOT/managers/ubuntu.sh || travis_terminate
script:
- sudo $CI_MANAGERS/ubuntu.sh || travis_terminate
- name: Ubuntu Bionic (ppc64le) - name: Ubuntu Bionic Build (ppc64le)
arch: ppc64le arch: ppc64le
language: bash language: bash
before_script: true script: sudo $CI_ROOT/managers/ubuntu.sh || travis_terminate
script:
- sudo $CI_MANAGERS/ubuntu.sh || travis_terminate - stage: Build & Test
name: Kernel 5.5.0 + selftests
language: bash
env: KERNEL=5.5.0
script: $CI_ROOT/vmtest/run_vmtest.sh || travis_terminate
# 5.5.0-rc6 is built from bpf-next; TODO(hex@): remove when pahole v1.16 is available
- name: Kernel 5.5.0-rc6 (pahole 1.16) + selftests
language: bash
env: KERNEL=5.5.0-rc6
install: sudo adduser "${USER}" kvm
script: $CI_ROOT/vmtest/run_vmtest.sh || travis_terminate
- name: Kernel LATEST + selftests
language: bash
env: KERNEL=LATEST
script: $CI_ROOT/vmtest/run_vmtest.sh || travis_terminate
- stage: Coverity - stage: Coverity
language: bash language: bash
@@ -203,7 +126,5 @@ jobs:
- sudo apt-get update - sudo apt-get update
- sudo apt-get -y build-dep libelf-dev - sudo apt-get -y build-dep libelf-dev
- sudo apt-get install -y libelf-dev pkg-config - sudo apt-get install -y libelf-dev pkg-config
# Override before_script: so VMTEST before_script commands are not executed.
before_script: true
script: script:
- scripts/coverity.sh || travis_terminate - scripts/coverity.sh || travis_terminate

View File

@@ -2,7 +2,7 @@
PHASES=(${@:-SETUP RUN RUN_ASAN CLEANUP}) PHASES=(${@:-SETUP RUN RUN_ASAN CLEANUP})
DEBIAN_RELEASE="${DEBIAN_RELEASE:-testing}" DEBIAN_RELEASE="${DEBIAN_RELEASE:-testing}"
CONT_NAME="${CONT_NAME:-debian-$DEBIAN_RELEASE-$RANDOM}" CONT_NAME="${CONT_NAME:-libbpf-debian-$DEBIAN_RELEASE}"
ENV_VARS="${ENV_VARS:-}" ENV_VARS="${ENV_VARS:-}"
DOCKER_RUN="${DOCKER_RUN:-docker run}" DOCKER_RUN="${DOCKER_RUN:-docker run}"
REPO_ROOT="${REPO_ROOT:-$PWD}" REPO_ROOT="${REPO_ROOT:-$PWD}"
@@ -30,6 +30,10 @@ for phase in "${PHASES[@]}"; do
SETUP) SETUP)
info "Setup phase" info "Setup phase"
info "Using Debian $DEBIAN_RELEASE" info "Using Debian $DEBIAN_RELEASE"
sudo apt-get -y -o Dpkg::Options::="--force-confnew" install docker-ce
docker --version
docker pull debian:$DEBIAN_RELEASE docker pull debian:$DEBIAN_RELEASE
info "Starting container $CONT_NAME" info "Starting container $CONT_NAME"
$DOCKER_RUN -v $REPO_ROOT:/build:rw \ $DOCKER_RUN -v $REPO_ROOT:/build:rw \
@@ -57,7 +61,7 @@ for phase in "${PHASES[@]}"; do
docker_exec mkdir build install docker_exec mkdir build install
docker_exec ${CC:-cc} --version docker_exec ${CC:-cc} --version
info "build" info "build"
docker_exec make CFLAGS="${CFLAGS}" -C ./src -B OBJDIR=../build docker_exec make -j$((4*$(nproc))) CFLAGS="${CFLAGS}" -C ./src -B OBJDIR=../build
info "ldd build/libbpf.so:" info "ldd build/libbpf.so:"
docker_exec ldd build/libbpf.so docker_exec ldd build/libbpf.so
if ! docker_exec ldd build/libbpf.so | grep -q libelf; then if ! docker_exec ldd build/libbpf.so | grep -q libelf; then
@@ -65,7 +69,7 @@ for phase in "${PHASES[@]}"; do
exit 1 exit 1
fi fi
info "install" info "install"
docker_exec make -C src OBJDIR=../build DESTDIR=../install install docker_exec make -j$((4*$(nproc))) -C src OBJDIR=../build DESTDIR=../install install
docker_exec rm -rf build install docker_exec rm -rf build install
;; ;;
CLEANUP) CLEANUP)

View File

@@ -17,11 +17,11 @@ cd $REPO_ROOT
CFLAGS="-g -O2 -Werror -Wall -fsanitize=address,undefined" CFLAGS="-g -O2 -Werror -Wall -fsanitize=address,undefined"
mkdir build install mkdir build install
cc --version cc --version
make CFLAGS="${CFLAGS}" -C ./src -B OBJDIR=../build make -j$((4*$(nproc))) CFLAGS="${CFLAGS}" -C ./src -B OBJDIR=../build
ldd build/libbpf.so ldd build/libbpf.so
if ! ldd build/libbpf.so | grep -q libelf; then if ! ldd build/libbpf.so | grep -q libelf; then
echo "FAIL: No reference to libelf.so in libbpf.so!" echo "FAIL: No reference to libelf.so in libbpf.so!"
exit 1 exit 1
fi fi
make -C src OBJDIR=../build DESTDIR=../install install make -j$((4*$(nproc))) -C src OBJDIR=../build DESTDIR=../install install
rm -rf build install rm -rf build install

27
travis-ci/vmtest/run_vmtest.sh Executable file
View File

@@ -0,0 +1,27 @@
#!/bin/bash
set -eux
VMTEST_SETUPCMD="PROJECT_NAME=${PROJECT_NAME} ./${PROJECT_NAME}/travis-ci/vmtest/run_selftests.sh"
echo "KERNEL: $KERNEL"
# Install required packages
wget -O - https://apt.llvm.org/llvm-snapshot.gpg.key | sudo apt-key add -
echo "deb http://apt.llvm.org/bionic/ llvm-toolchain-bionic-10 main" | sudo tee -a /etc/apt/sources.list
echo "deb http://archive.ubuntu.com/ubuntu eoan main restricted universe multiverse" | sudo tee -a /etc/apt/sources.list
sudo apt-get -qq update
sudo apt-get -y install dwarves=1.15-1
sudo apt-get -qq -y install clang-10 lld-10 llvm-10
# Build selftests (and latest kernel, if necessary)
KERNEL="${KERNEL}" ${VMTEST_ROOT}/prepare_selftests.sh travis-ci/vmtest/bpf-next
# Escape whitespace characters.
setup_cmd=$(sed 's/\([[:space:]]\)/\\\1/g' <<< "${VMTEST_SETUPCMD}")
if [[ "${KERNEL}" = 'LATEST' ]]; then
sudo -E sudo -E -u "${USER}" "${VMTEST_ROOT}/run.sh" -b travis-ci/vmtest/bpf-next -o -d ~ -s "${setup_cmd}" ~/root.img;
else
sudo -E sudo -E -u "${USER}" "${VMTEST_ROOT}/run.sh" -k "${KERNEL}*" -o -d ~ -s "${setup_cmd}" ~/root.img;
fi