diff --git a/travis-ci/vmtest/build_pahole.sh b/travis-ci/vmtest/build_pahole.sh index 043c8b8..159dcb6 100755 --- a/travis-ci/vmtest/build_pahole.sh +++ b/travis-ci/vmtest/build_pahole.sh @@ -1,6 +1,10 @@ #!/bin/bash -set -eux +set -eu + +source $(cd $(dirname $0) && pwd)/helpers.sh + +travis_fold start build_pahole "Building pahole" CWD=$(pwd) REPO_PATH=$1 @@ -23,3 +27,4 @@ export LD_LIBRARY_PATH=${LD_LIBRARY_PATH:-}:/usr/local/lib ldd $(which pahole) pahole --version +travis_fold end build_pahole diff --git a/travis-ci/vmtest/build_selftests.sh b/travis-ci/vmtest/build_selftests.sh index bd3e104..7f688e5 100755 --- a/travis-ci/vmtest/build_selftests.sh +++ b/travis-ci/vmtest/build_selftests.sh @@ -1,6 +1,10 @@ #!/bin/bash -set -euxo pipefail +set -euo pipefail + +source $(cd $(dirname $0) && pwd)/helpers.sh + +travis_fold start prepare_selftests "Building selftests" LLVM_VER=12 LIBBPF_PATH="${REPO_ROOT}" @@ -33,3 +37,5 @@ rm selftests/bpf/.gitignore git add selftests git add "${VMTEST_ROOT}/configs/blacklist" + +travis_fold end prepare_selftests diff --git a/travis-ci/vmtest/checkout_latest_kernel.sh b/travis-ci/vmtest/checkout_latest_kernel.sh index 5e8c03a..d199588 100755 --- a/travis-ci/vmtest/checkout_latest_kernel.sh +++ b/travis-ci/vmtest/checkout_latest_kernel.sh @@ -1,6 +1,8 @@ #!/bin/bash -set -eux +set -eu + +source $(cd $(dirname $0) && pwd)/helpers.sh CWD=$(pwd) LIBBPF_PATH=$(pwd) @@ -14,6 +16,9 @@ echo REPO_PATH = ${REPO_PATH} echo LINUX_SHA = ${LINUX_SHA} if [ ! -d "${REPO_PATH}" ]; then + echo + travis_fold start pull_kernel_srcs "Fetching kernel sources" + mkdir -p $(dirname "${REPO_PATH}") cd $(dirname "${REPO_PATH}") # attempt to fetch desired bpf-next repo snapshot @@ -34,4 +39,6 @@ if [ ! -d "${REPO_PATH}" ]; then fi git reset --hard ${LINUX_SHA} fi + + travis_fold end pull_kernel_srcs fi diff --git a/travis-ci/vmtest/helpers.sh b/travis-ci/vmtest/helpers.sh new file mode 100644 index 0000000..c6be1a0 --- /dev/null +++ b/travis-ci/vmtest/helpers.sh @@ -0,0 +1,12 @@ +# $1 - start or end +# $2 - fold identifier, no spaces +# $3 - fold section description +travis_fold() { + local YELLOW='\033[1;33m' + local NOCOLOR='\033[0m' + echo travis_fold:$1:$2 + if [ ! -z "${3:-}" ]; then + echo -e "${YELLOW}$3${NOCOLOR}" + fi + echo +} diff --git a/travis-ci/vmtest/prepare_selftests.sh b/travis-ci/vmtest/prepare_selftests.sh index 5d4692e..1c74e5c 100755 --- a/travis-ci/vmtest/prepare_selftests.sh +++ b/travis-ci/vmtest/prepare_selftests.sh @@ -1,6 +1,8 @@ #!/bin/bash -set -eux +set -eu + +source $(cd $(dirname $0) && pwd)/helpers.sh REPO_PATH=$1 @@ -8,7 +10,11 @@ ${VMTEST_ROOT}/checkout_latest_kernel.sh ${REPO_PATH} cd ${REPO_PATH} if [[ "${KERNEL}" = 'LATEST' ]]; then + travis_fold start build_kernel "Kernel build" + cp ${VMTEST_ROOT}/configs/latest.config .config make -j $((4*$(nproc))) olddefconfig all + + travis_fold end build_kernel fi diff --git a/travis-ci/vmtest/run.sh b/travis-ci/vmtest/run.sh index df339dd..4538d1a 100755 --- a/travis-ci/vmtest/run.sh +++ b/travis-ci/vmtest/run.sh @@ -3,6 +3,8 @@ set -uo pipefail trap 'exit 2' ERR +source $(cd $(dirname $0) && pwd)/helpers.sh + usage () { USAGE_STRING="usage: $0 [-k KERNELRELEASE|-b DIR] [[-r ROOTFSVERSION] [-fo]|-I] [-Si] [-d DIR] IMG $0 [-k KERNELRELEASE] -l @@ -275,6 +277,10 @@ if [[ $SKIPIMG -eq 0 && ! -v ROOTFSVERSION ]]; then fi echo "Kernel release: $KERNELRELEASE" >&2 +echo + +travis_fold start vmlinux_setup "Preparing Linux image" + if (( SKIPIMG )); then echo "Not extracting root filesystem" >&2 else @@ -366,11 +372,15 @@ else sudo chmod 644 "$vmlinux" fi +travis_fold end vmlinux_setup + LIBBPF_PATH="${REPO_ROOT}" \ REPO_PATH="travis-ci/vmtest/bpf-next" \ VMTEST_ROOT="${VMTEST_ROOT}" \ VMLINUX_BTF=${vmlinux} ${VMTEST_ROOT}/build_selftests.sh +travis_fold start vm_init "Starting virtual machine..." + if (( SKIPSOURCE )); then echo "Not copying source files..." >&2 else @@ -415,13 +425,15 @@ sudo chmod 755 "$mnt/etc/rcS.d/S50-run-tests" poweroff_script="#!/bin/sh +echo travis_fold:start:shutdown +echo -e '\033[1;33mShutdown\033[0m\n' + poweroff" echo "${poweroff_script}" | sudo tee "$mnt/etc/rcS.d/S99-poweroff" > /dev/null sudo chmod 755 "$mnt/etc/rcS.d/S99-poweroff" sudo umount "$mnt" -echo "Starting virtual machine..." >&2 qemu-system-x86_64 -nodefaults -display none -serial mon:stdio \ -cpu kvm64 -enable-kvm -smp "$(nproc)" -m 2G \ -drive file="$IMG",format=raw,index=1,media=disk,if=virtio,cache=none \ @@ -435,4 +447,7 @@ else exitstatus=1 fi sudo umount "$mnt" + +travis_fold end shutdown + exit "$exitstatus" diff --git a/travis-ci/vmtest/run_selftests.sh b/travis-ci/vmtest/run_selftests.sh index 2e8a4c0..762cb43 100755 --- a/travis-ci/vmtest/run_selftests.sh +++ b/travis-ci/vmtest/run_selftests.sh @@ -1,27 +1,35 @@ #!/bin/bash -set -euxo pipefail +set -euo pipefail + +source $(cd $(dirname $0) && pwd)/helpers.sh test_progs() { if [[ "${KERNEL}" != '4.9.0' ]]; then - echo TEST_PROGS + travis_fold start test_progs "Testing test_progs" ./test_progs ${BLACKLIST:+-b$BLACKLIST} ${WHITELIST:+-t$WHITELIST} + travis_fold end test_progs fi - echo TEST_PROGS-NO_ALU32 + travis_fold start test_progs-no_alu32 "Testing test_progs-no_alu32" ./test_progs-no_alu32 ${BLACKLIST:+-b$BLACKLIST} ${WHITELIST:+-t$WHITELIST} + travis_fold end test_progs-no_alu32 } test_maps() { - echo TEST_MAPS + travis_fold start test_maps "Testing test_maps" ./test_maps + travis_fold end test_maps } test_verifier() { - echo TEST_VERIFIER + travis_fold start test_verifier "Testing test_verifier" ./test_verifier + travis_fold end test_verifier } +travis_fold end vm_init + configs_path='libbpf/travis-ci/vmtest/configs' blacklist_path="$configs_path/blacklist/BLACKLIST-${KERNEL}" if [[ -s "${blacklist_path}" ]]; then diff --git a/travis-ci/vmtest/run_vmtest.sh b/travis-ci/vmtest/run_vmtest.sh index 4ddf458..f828dc0 100755 --- a/travis-ci/vmtest/run_vmtest.sh +++ b/travis-ci/vmtest/run_vmtest.sh @@ -1,20 +1,27 @@ #!/bin/bash -set -eux +set -eu + +source $(cd $(dirname $0) && pwd)/helpers.sh VMTEST_SETUPCMD="PROJECT_NAME=${PROJECT_NAME} ./${PROJECT_NAME}/travis-ci/vmtest/run_selftests.sh" echo "KERNEL: $KERNEL" +echo # Build latest pahole ${VMTEST_ROOT}/build_pahole.sh travis-ci/vmtest/pahole +travis_fold start install_clang "Installing Clang/LLVM" + # 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 main" | sudo tee -a /etc/apt/sources.list sudo apt-get update sudo apt-get -y install clang-12 lld-12 llvm-12 +travis_fold end install_clang + # Build selftests (and latest kernel, if necessary) KERNEL="${KERNEL}" ${VMTEST_ROOT}/prepare_selftests.sh travis-ci/vmtest/bpf-next