Skip to content

Commit aa90805

Browse files
committed
adding ci files
1 parent 2d20ef4 commit aa90805

File tree

6 files changed

+304
-18
lines changed

6 files changed

+304
-18
lines changed

.github/workflows/test.yml

Lines changed: 165 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,165 @@
1+
name: bpf-ci
2+
3+
on:
4+
pull_request:
5+
6+
concurrency:
7+
group: ci-test-${{ github.head_ref }}
8+
cancel-in-progress: true
9+
10+
jobs:
11+
llvm-toolchain:
12+
runs-on: ubuntu-latest
13+
outputs:
14+
llvm: ${{ steps.llvm-toolchain-impl.outputs.version }}
15+
steps:
16+
- id: llvm-version
17+
uses: libbpf/ci/get-llvm-version@master
18+
- id: llvm-toolchain-impl
19+
shell: bash
20+
run: echo "::set-output name=version::llvm-${{ steps.llvm-version.outputs.version }}"
21+
set-matrix:
22+
needs: llvm-toolchain
23+
runs-on: ubuntu-latest
24+
outputs:
25+
build-matrix: ${{ steps.set-matrix-impl.outputs.build_matrix }}
26+
test-matrix: ${{ steps.set-matrix-impl.outputs.test_matrix }}
27+
steps:
28+
- id: set-matrix-impl
29+
shell: python3 -I {0}
30+
run: |
31+
from json import dumps
32+
33+
matrix = [
34+
{"kernel": "LATEST", "runs_on": ["ubuntu-latest", "self-hosted"], "arch": "x86_64", "toolchain": "gcc"},
35+
{"kernel": "LATEST", "runs_on": ["ubuntu-latest", "self-hosted"], "arch": "x86_64", "toolchain": "${{ needs.llvm-toolchain.outputs.llvm }}"},
36+
{"kernel": "LATEST", "runs_on": ["z15", "self-hosted"], "arch": "s390x", "toolchain": "gcc"},
37+
]
38+
39+
if "${{ github.repository_owner }}" != "kernel-patches":
40+
# Outside of kernel-patches, remove the self-hosted label and skip
41+
# any testing on s390x, as no suitable runners will be available.
42+
for idx in range(len(matrix) - 1, -1, -1):
43+
if "z15" in matrix[idx]["runs_on"]:
44+
del matrix[idx]
45+
else:
46+
matrix[idx]["runs_on"].remove("self-hosted")
47+
48+
build_matrix = {"include": matrix}
49+
print(f"::set-output name=build_matrix::{dumps(build_matrix)}")
50+
51+
tests = ["test_progs", "test_progs_no_alu32", "test_maps", "test_verifier"]
52+
test_matrix = {"include": [{**config, **{"test": test}}
53+
for config in matrix
54+
for test in tests]}
55+
print(f"::set-output name=test_matrix::{dumps(test_matrix)}")
56+
build:
57+
name: build for ${{ matrix.arch }} with ${{ matrix.toolchain }}
58+
needs: set-matrix
59+
runs-on: ${{ matrix.runs_on }}
60+
timeout-minutes: 100
61+
strategy:
62+
fail-fast: false
63+
matrix: ${{ fromJSON(needs.set-matrix.outputs.build-matrix) }}
64+
env:
65+
KERNEL: ${{ matrix.kernel }}
66+
REPO_ROOT: ${{ github.workspace }}
67+
REPO_PATH: ""
68+
steps:
69+
- uses: actions/checkout@v2
70+
- if: ${{ github.repository == 'kernel-patches/vmtest' }}
71+
name: Download bpf-next tree
72+
uses: libbpf/ci/get-linux-source@master
73+
with:
74+
dest: '.kernel'
75+
- if: ${{ github.repository == 'kernel-patches/vmtest' }}
76+
name: Move linux source in place
77+
shell: bash
78+
run: |
79+
rm -rf .kernel/.git
80+
cp -rf .kernel/. .
81+
rm -rf .kernel
82+
- uses: libbpf/ci/patch-kernel@master
83+
with:
84+
patches-root: '${{ github.workspace }}/travis-ci/diffs'
85+
repo-root: '${{ github.workspace }}'
86+
- name: Setup build environment
87+
uses: libbpf/ci/setup-build-env@master
88+
- name: Build kernel image
89+
uses: libbpf/ci/build-linux@master
90+
with:
91+
arch: ${{ matrix.arch }}
92+
toolchain: ${{ matrix.toolchain }}
93+
- name: Build selftests
94+
uses: libbpf/ci/build-selftests@master
95+
with:
96+
vmlinux_btf: ${{ github.workspace }}/vmlinux
97+
toolchain: ${{ matrix.toolchain }}
98+
- name: Build samples
99+
uses: libbpf/ci/build-samples@master
100+
with:
101+
vmlinux_btf: ${{ github.workspace }}/vmlinux
102+
toolchain: ${{ matrix.toolchain }}
103+
- name: Tar artifacts
104+
run: |
105+
file_list=""
106+
if [ "${{ github.repository }}" == "kernel-patches/vmtest" ]; then
107+
# Package up a bunch of additional infrastructure to support running
108+
# 'make kernelrelease' and bpf tool checks later on.
109+
file_list="$(find . -iname Makefile | xargs) \
110+
scripts/ \
111+
tools/testing/selftests/bpf/ \
112+
tools/include/ \
113+
tools/bpf/bpftool/";
114+
fi
115+
116+
tar -czf vmlinux-${{ matrix.arch }}-${{ matrix.toolchain }}.tar.gz \
117+
.config \
118+
arch/*/boot/bzImage \
119+
include/config/auto.conf \
120+
include/generated/autoconf.h \
121+
${file_list} \
122+
--exclude '*.h' \
123+
selftests/bpf/ \
124+
vmlinux
125+
- uses: actions/upload-artifact@v3
126+
with:
127+
name: vmlinux-${{ matrix.arch }}-${{ matrix.toolchain }}
128+
if-no-files-found: error
129+
path: vmlinux-${{ matrix.arch }}-${{ matrix.toolchain }}.tar.gz
130+
test:
131+
name: ${{ matrix.test }} on ${{ matrix.arch }} with ${{ matrix.toolchain }}
132+
needs: [set-matrix, build]
133+
strategy:
134+
fail-fast: false
135+
matrix: ${{ fromJSON(needs.set-matrix.outputs.test-matrix) }}
136+
runs-on: ${{ matrix.runs_on }}
137+
timeout-minutes: 100
138+
env:
139+
KERNEL: ${{ matrix.kernel }}
140+
REPO_ROOT: ${{ github.workspace }}
141+
REPO_PATH: ""
142+
steps:
143+
- uses: actions/checkout@main
144+
- uses: actions/download-artifact@v3
145+
with:
146+
name: vmlinux-${{ matrix.arch }}-${{ matrix.toolchain }}
147+
path: .
148+
- name: Untar artifacts
149+
run: tar -xzf vmlinux-${{ matrix.arch }}-${{ matrix.toolchain }}.tar.gz
150+
- name: Prepare rootfs
151+
uses: libbpf/ci/prepare-rootfs@master
152+
with:
153+
project-name: 'libbpf'
154+
arch: ${{ matrix.arch }}
155+
kernel: ${{ matrix.kernel }}
156+
kernel-root: '.'
157+
image-output: '/tmp/root.img'
158+
test: ${{ matrix.test }}
159+
- name: Run selftests
160+
uses: libbpf/ci/run-qemu@master
161+
with:
162+
arch: ${{ matrix.arch}}
163+
img: '/tmp/root.img'
164+
vmlinuz: '${{ github.workspace }}/vmlinuz'
165+
kernel-root: '.'

README

Lines changed: 0 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -1,18 +0,0 @@
1-
Linux kernel
2-
============
3-
4-
There are several guides for kernel developers and users. These guides can
5-
be rendered in a number of formats, like HTML and PDF. Please read
6-
Documentation/admin-guide/README.rst first.
7-
8-
In order to build the documentation, use ``make htmldocs`` or
9-
``make pdfdocs``. The formatted documentation can also be read online at:
10-
11-
https://www.kernel.org/doc/html/latest/
12-
13-
There are various text files in the Documentation/ subdirectory,
14-
several of them using the Restructured Text markup notation.
15-
16-
Please read the Documentation/process/changes.rst file, as it contains the
17-
requirements for building and running the kernel, and information about
18-
the problems which may result by upgrading your kernel.

travis-ci/vmtest/configs/DENYLIST

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
# TEMPORARY
2+
btf_dump/btf_dump: syntax
3+
kprobe_multi_test/bench_attach
4+
core_reloc/enum64val
5+
core_reloc/size___diff_sz
6+
core_reloc/type_based___diff_sz
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
tc_redirect/tc_redirect_dtime # very flaky
2+
lru_bug # not yet in bpf-next denylist
3+
usdt/basic # failing verifier due to bounds check after LLVM update
4+
usdt/multispec # same as above

travis-ci/vmtest/helpers.sh

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
# $1 - start or end
2+
# $2 - fold identifier, no spaces
3+
# $3 - fold section description
4+
foldable() {
5+
local YELLOW='\033[1;33m'
6+
local NOCOLOR='\033[0m'
7+
if [ $1 = "start" ]; then
8+
line="::group::$2"
9+
if [ ! -z "${3:-}" ]; then
10+
line="$line - ${YELLOW}$3${NOCOLOR}"
11+
fi
12+
else
13+
line="::endgroup::"
14+
fi
15+
echo -e "$line"
16+
}
17+
18+
__print() {
19+
local TITLE=""
20+
if [[ -n $2 ]]; then
21+
TITLE=" title=$2"
22+
fi
23+
echo "::$1${TITLE}::$3"
24+
}
25+
26+
# $1 - title
27+
# $2 - message
28+
print_error() {
29+
__print error $1 $2
30+
}
31+
32+
# $1 - title
33+
# $2 - message
34+
print_notice() {
35+
__print notice $1 $2
36+
}

travis-ci/vmtest/run_selftests.sh

Lines changed: 93 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,93 @@
1+
#!/bin/bash
2+
3+
set -euo pipefail
4+
5+
source $(cd $(dirname $0) && pwd)/helpers.sh
6+
7+
ARCH=$(uname -m)
8+
9+
STATUS_FILE=/exitstatus
10+
11+
read_lists() {
12+
(for path in "$@"; do
13+
if [[ -s "$path" ]]; then
14+
cat "$path"
15+
fi;
16+
done) | cut -d'#' -f1 | sed -e 's/^[[:space:]]*//' -e 's/[[:space:]]*$//' | tr -s '\n' ','
17+
}
18+
19+
TEST_PROGS_ARGS=""
20+
# Disabled due to issue
21+
# if [[ "$(nproc)" -gt 2 ]]; then
22+
# TEST_PROGS_ARGS="-j"
23+
# fi
24+
25+
test_progs() {
26+
foldable start test_progs "Testing test_progs"
27+
# "&& true" does not change the return code (it is not executed
28+
# if the Python script fails), but it prevents exiting on a
29+
# failure due to the "set -e".
30+
./test_progs ${DENYLIST:+-d"$DENYLIST"} ${ALLOWLIST:+-a"$ALLOWLIST"} ${TEST_PROGS_ARGS} && true
31+
echo "test_progs:$?" >>"${STATUS_FILE}"
32+
foldable end test_progs
33+
}
34+
35+
test_progs_no_alu32() {
36+
foldable start test_progs-no_alu32 "Testing test_progs-no_alu32"
37+
./test_progs-no_alu32 ${DENYLIST:+-d"$DENYLIST"} ${ALLOWLIST:+-a"$ALLOWLIST"} ${TEST_PROGS_ARGS} && true
38+
echo "test_progs-no_alu32:$?" >>"${STATUS_FILE}"
39+
foldable end test_progs-no_alu32
40+
}
41+
42+
test_maps() {
43+
foldable start test_maps "Testing test_maps"
44+
taskset 0xF ./test_maps && true
45+
echo "test_maps:$?" >>"${STATUS_FILE}"
46+
foldable end test_maps
47+
}
48+
49+
test_verifier() {
50+
foldable start test_verifier "Testing test_verifier"
51+
./test_verifier && true
52+
echo "test_verifier:$?" >>"${STATUS_FILE}"
53+
foldable end test_verifier
54+
}
55+
56+
foldable end vm_init
57+
58+
foldable start kernel_config "Kconfig"
59+
60+
zcat /proc/config.gz
61+
62+
foldable end kernel_config
63+
64+
configs_path=${PROJECT_NAME}/selftests/bpf
65+
local_configs_path=${PROJECT_NAME}/vmtest/configs
66+
DENYLIST=$(read_lists \
67+
"$configs_path/DENYLIST" \
68+
"$configs_path/DENYLIST.${ARCH}" \
69+
"$local_configs_path/DENYLIST" \
70+
"$local_configs_path/DENYLIST.${ARCH}" \
71+
)
72+
ALLOWLIST=$(read_lists \
73+
"$configs_path/ALLOWLIST" \
74+
"$configs_path/ALLOWLIST.${ARCH}" \
75+
"$local_configs_path/ALLOWLIST" \
76+
"$local_configs_path/ALLOWLIST.${ARCH}" \
77+
)
78+
79+
echo "DENYLIST: ${DENYLIST}"
80+
echo "ALLOWLIST: ${ALLOWLIST}"
81+
82+
cd ${PROJECT_NAME}/selftests/bpf
83+
84+
if [ $# -eq 0 ]; then
85+
test_progs
86+
test_progs_no_alu32
87+
test_maps
88+
test_verifier
89+
else
90+
for test_name in "$@"; do
91+
"${test_name}"
92+
done
93+
fi

0 commit comments

Comments
 (0)