mirror of
https://github.com/netdata/libbpf.git
synced 2026-03-26 11:19:06 +08:00
Run kernel selftests in vmtest with the goal to test libbpf backward compatibility with older kernels. The list of kernels should be specified in .travis.yml config in `jobs` section, e.g. KERNEL=5.5.0. Enlisted kernel releases - 5.5.0 # built from main - 5.5.0-rc6 # built from bpf-next - LATEST The kernel specified as 'LATEST' in .travis.yml is built from bpf-next kernel tree, the rest of the kernels are downloaded from the specified in INDEX file. The kernel sources from bpf-next are manually patched with [1] from bpf tree to fix ranqslower build. This workaround should be removed after the patch is merged from bpf to bpf-next tree. Due to kernel sources being checked out the duration of the LATEST kernel test is ~30m. bpf selftests are built from tools/testing/selftests/bpf/ of bpf-next tree with HEAD revision set to CHECKPOINT-COMMIT specified in libbpf so selftests and libbpf are in sync. Currently only programs are tested with test_progs program, test_maps and test_verifier should follow. test_progs are run with blacklist required due to: - some features, e.g. fentry/fexit are not supported in older kernels - environment limitations, e.g an absence of the recent pahole in Debian - incomplete disk image The blacklist is passed to test_progs with -b option as specified in [2] patch set. Most of the preceeding tests are disabled due to incomplete disk image currenly lacking proper networking settings. For the LATEST kernel fome fentry/fexit tests are disabled due to pahole v1.16 is not abailible in Debian yet. Next steps are resolving issues with blacklisted tests, enabling maps and verifier testing, expanding the list of tested kernels. [1] https://lore.kernel.org/bpf/908498f794661c44dca54da9e09dc0c382df6fcb.1580425879.git.hex@fb.com/t.mbox.gz [2] https://www.spinics.net/lists/netdev/msg625192.html
212 lines
8.5 KiB
YAML
212 lines
8.5 KiB
YAML
sudo: required
|
|
language: bash
|
|
dist: bionic
|
|
services:
|
|
- docker
|
|
|
|
env:
|
|
global:
|
|
- PROJECT_NAME='libbpf'
|
|
- 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"
|
|
- GIT_FETCH_DEPTH=64
|
|
- VMTEST_SETUPCMD="PROJECT_NAME=${PROJECT_NAME} ./${PROJECT_NAME}/travis-ci/vmtest/run_selftests.sh"
|
|
jobs:
|
|
# 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:
|
|
apt:
|
|
packages:
|
|
- qemu-kvm
|
|
- zstd
|
|
- binutils-dev
|
|
- elfutils
|
|
- libcap-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
|
|
- if [[ "${KERNEL}" = 'LATEST' ]]; then ${VMTEST_ROOT}/build_latest_kernel.sh travis-ci/vmtest/bpf-next; fi
|
|
- ${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:
|
|
# Run Coverity periodically instead of for each PR for following reasons:
|
|
# 1) Coverity jobs are heavily rate-limited
|
|
# 2) Due to security restrictions of encrypted environment variables
|
|
# in Travis CI, pull requests made from forks can't access encrypted
|
|
# env variables, making Coverity unusable
|
|
# See: https://docs.travis-ci.com/user/pull-requests#pull-requests-and-security-restrictions
|
|
- name: Coverity
|
|
if: type = cron
|
|
|
|
jobs:
|
|
include:
|
|
- stage: Build & test
|
|
name: Debian Testing
|
|
language: bash
|
|
env:
|
|
- DEBIAN_RELEASE="testing"
|
|
- CONT_NAME="libbpf-debian-$DEBIAN_RELEASE"
|
|
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)
|
|
language: bash
|
|
env:
|
|
- DEBIAN_RELEASE="testing"
|
|
- CONT_NAME="libbpf-debian-$DEBIAN_RELEASE"
|
|
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)
|
|
language: bash
|
|
env:
|
|
- DEBIAN_RELEASE="testing"
|
|
- CONT_NAME="libbpf-debian-$DEBIAN_RELEASE"
|
|
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)
|
|
language: bash
|
|
env:
|
|
- DEBIAN_RELEASE="testing"
|
|
- CONT_NAME="libbpf-debian-$DEBIAN_RELEASE"
|
|
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)
|
|
language: bash
|
|
env:
|
|
- DEBIAN_RELEASE="testing"
|
|
- CONT_NAME="libbpf-debian-$DEBIAN_RELEASE"
|
|
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)
|
|
language: bash
|
|
env:
|
|
- DEBIAN_RELEASE="testing"
|
|
- CONT_NAME="libbpf-debian-$DEBIAN_RELEASE"
|
|
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
|
|
language: bash
|
|
before_script: true
|
|
script:
|
|
- sudo $CI_MANAGERS/ubuntu.sh || travis_terminate
|
|
|
|
- name: Ubuntu Bionic (arm)
|
|
arch: arm64
|
|
language: bash
|
|
before_script: true
|
|
script:
|
|
- sudo $CI_MANAGERS/ubuntu.sh || travis_terminate
|
|
|
|
- name: Ubuntu Bionic (s390x)
|
|
arch: s390x
|
|
language: bash
|
|
before_script: true
|
|
script:
|
|
- sudo $CI_MANAGERS/ubuntu.sh || travis_terminate
|
|
|
|
- name: Ubuntu Bionic (ppc64le)
|
|
arch: ppc64le
|
|
language: bash
|
|
before_script: true
|
|
script:
|
|
- sudo $CI_MANAGERS/ubuntu.sh || travis_terminate
|
|
|
|
- stage: Coverity
|
|
language: bash
|
|
env:
|
|
# Coverity configuration
|
|
# COVERITY_SCAN_TOKEN=xxx
|
|
# Encrypted using `travis encrypt --repo libbpf/libbpf COVERITY_SCAN_TOKEN=xxx`
|
|
- secure: "I9OsMRHbb82IUivDp+I+w/jEQFOJgBDAqYqf1ollqCM1QhocxMcS9bwIAgfPhdXi2hohV7sRrVMZstahY67FAvJLGxNopi4tAPDIAaIFxgO0yDxMhaTMx5xDfMwlIm2FOP/9gB9BQsd6M7CmoQZgXYwBIv7xd1ooxoQrh2rOK1YrRl7UQu3+c3zPTjDfIYZzR3bFttMqZ9/c4U0v8Ry5IFXrel3hCshndHA1TtttJrUSrILlZcmVc1ch7JIy6zCbCU/2lGv0B/7rWXfF8MT7O9jPtFOhJ1DEcd2zhw2n4j9YT3a8OhtnM61LA6ask632mwCOsxpFLTun7AzuR1Cb5mdPHsxhxnCHcXXARa2mJjem0QG1NhwxwJE8sbRDapojexxCvweYlEN40ofwMDSnj/qNt95XIcrk0tiIhGFx0gVNWvAdmZwx+N4mwGPMTAN0AEOFjpgI+ZdB89m+tL/CbEgE1flc8QxUxJhcp5OhH6yR0z9qYOp0nXIbHsIaCiRvt/7LqFRQfheifztWVz4mdQlCdKS9gcOQ09oKicPevKO1L0Ue3cb7Ug7jOpMs+cdh3XokJtUeYEr1NijMHT9+CTAhhO5RToWXIZRon719z3fwoUBNDREATwVFMlVxqSO/pbYgaKminigYbl785S89YYaZ6E5UvaKRHM6KHKMDszs="
|
|
- COVERITY_SCAN_PROJECT_NAME="libbpf"
|
|
- COVERITY_SCAN_NOTIFICATION_EMAIL="${AUTHOR_EMAIL}"
|
|
- COVERITY_SCAN_BRANCH_PATTERN="$TRAVIS_BRANCH"
|
|
# Note: `make -C src/` as a BUILD_COMMAND will not work here
|
|
- COVERITY_SCAN_BUILD_COMMAND_PREPEND="cd src/"
|
|
- COVERITY_SCAN_BUILD_COMMAND="make"
|
|
install:
|
|
- sudo echo 'deb-src http://archive.ubuntu.com/ubuntu/ bionic main restricted universe multiverse' >>/etc/apt/sources.list
|
|
- sudo apt-get update
|
|
- sudo apt-get -y build-dep libelf-dev
|
|
- sudo apt-get install -y libelf-dev pkg-config
|
|
# Override before_script: so VMTEST before_script commands are not executed.
|
|
before_script: true
|
|
script:
|
|
- scripts/coverity.sh || travis_terminate
|