1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768 |
- #!/bin/bash
- # Test the current package under a different kernel.
- # Requires virtme and qemu to be installed.
- set -eu
- set -o pipefail
- if [[ "${1:-}" = "--in-vm" ]]; then
- shift
- readonly home="$(mktemp --directory)"
- mount -t bpf bpf /sys/fs/bpf
- export CGO_ENABLED=0
- export HOME="$home"
- echo Running tests...
- /usr/local/bin/go test -mod=vendor -coverprofile="$1/coverage.txt" -covermode=atomic -v ./...
- touch "$1/success"
- exit 0
- fi
- # Force Go modules, so that vendoring and building are easier.
- export GO111MODULE=on
- # Pull all dependencies, so that we can run tests without the
- # vm having network access.
- go mod vendor
- # Use sudo if /dev/kvm isn't accessible by the current user.
- sudo=""
- if [[ ! -r /dev/kvm || ! -w /dev/kvm ]]; then
- sudo="sudo"
- fi
- readonly sudo
- readonly kernel_version="${1:-}"
- if [[ -z "${kernel_version}" ]]; then
- echo "Expecting kernel version as first argument"
- exit 1
- fi
- readonly kernel="linux-${kernel_version}.bz"
- readonly output="$(mktemp -d)"
- readonly tmp_dir="$(mktemp -d)"
- test -e "${tmp_dir}/${kernel}" || {
- echo Fetching ${kernel}
- curl --fail -L "https://github.com/newtools/ci-kernels/blob/master/${kernel}?raw=true" -o "${tmp_dir}/${kernel}"
- }
- echo Testing on ${kernel_version}
- $sudo virtme-run --kimg "${tmp_dir}/${kernel}" --memory 256M --pwd --rwdir=/run/output="${output}" --script-sh "$(realpath "$0") --in-vm /run/output"
- if [[ ! -e "${output}/success" ]]; then
- echo "Test failed on ${kernel_version}"
- exit 1
- else
- echo "Test successful on ${kernel_version}"
- if [[ -v CODECOV_TOKEN ]]; then
- curl --fail -s https://codecov.io/bash > "${tmp_dir}/codecov.sh"
- chmod +x "${tmp_dir}/codecov.sh"
- "${tmp_dir}/codecov.sh" -f "${output}/coverage.txt"
- fi
- fi
- $sudo rm -r "${output}"
|