Skip to content

Commit 0bd818d

Browse files
committed
adding/updating ci files
1 parent 54a118f commit 0bd818d

File tree

6 files changed

+318
-18
lines changed

6 files changed

+318
-18
lines changed

.github/workflows/test.yml

Lines changed: 177 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,177 @@
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 "version=llvm-${{ steps.llvm-version.outputs.version }}" >> $GITHUB_OUTPUT
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+
import os
33+
34+
def set_output(name, value):
35+
"""Write an output variable to the GitHub output file."""
36+
with open(os.getenv("GITHUB_OUTPUT"), "a") as f:
37+
f.write(f"{name}={value}\n")
38+
39+
matrix = [
40+
{"kernel": "LATEST", "runs_on": ["ubuntu-latest", "self-hosted"], "arch": "x86_64", "toolchain": "gcc"},
41+
{"kernel": "LATEST", "runs_on": ["ubuntu-latest", "self-hosted"], "arch": "x86_64", "toolchain": "${{ needs.llvm-toolchain.outputs.llvm }}"},
42+
{"kernel": "LATEST", "runs_on": ["z15", "self-hosted"], "arch": "s390x", "toolchain": "gcc"},
43+
]
44+
self_hosted_repos = [
45+
"kernel-patches/bpf",
46+
"kernel-patches/vmtest",
47+
]
48+
49+
# Only a few repository within "kernel-patches" use self-hosted runners.
50+
if "${{ github.repository_owner }}" != "kernel-patches" or "${{ github.repository }}" not in self_hosted_repos:
51+
# Outside of those repositories, remove the self-hosted label and skip
52+
# any testing on s390x, as no suitable runners will be available.
53+
for idx in range(len(matrix) - 1, -1, -1):
54+
if "z15" in matrix[idx]["runs_on"]:
55+
del matrix[idx]
56+
else:
57+
matrix[idx]["runs_on"].remove("self-hosted")
58+
59+
build_matrix = {"include": matrix}
60+
set_output("build_matrix", dumps(build_matrix))
61+
62+
tests = ["test_progs", "test_progs_no_alu32", "test_maps", "test_verifier"]
63+
test_matrix = {"include": [{**config, **{"test": test}}
64+
for config in matrix
65+
for test in tests]}
66+
set_output("test_matrix", dumps(test_matrix))
67+
build:
68+
name: build for ${{ matrix.arch }} with ${{ matrix.toolchain }}
69+
needs: set-matrix
70+
runs-on: ${{ matrix.runs_on }}
71+
timeout-minutes: 100
72+
strategy:
73+
fail-fast: false
74+
matrix: ${{ fromJSON(needs.set-matrix.outputs.build-matrix) }}
75+
env:
76+
KERNEL: ${{ matrix.kernel }}
77+
REPO_ROOT: ${{ github.workspace }}
78+
REPO_PATH: ""
79+
steps:
80+
- uses: actions/checkout@v3
81+
- if: ${{ github.repository == 'kernel-patches/vmtest' }}
82+
name: Download bpf-next tree
83+
uses: libbpf/ci/get-linux-source@master
84+
with:
85+
dest: '.kernel'
86+
- if: ${{ github.repository == 'kernel-patches/vmtest' }}
87+
name: Move linux source in place
88+
shell: bash
89+
run: |
90+
rm -rf .kernel/.git
91+
cp -rf .kernel/. .
92+
rm -rf .kernel
93+
- uses: libbpf/ci/patch-kernel@master
94+
with:
95+
patches-root: '${{ github.workspace }}/ci/diffs'
96+
repo-root: '${{ github.workspace }}'
97+
- name: Setup build environment
98+
uses: libbpf/ci/setup-build-env@master
99+
- name: Build kernel image
100+
uses: libbpf/ci/build-linux@master
101+
with:
102+
arch: ${{ matrix.arch }}
103+
toolchain: ${{ matrix.toolchain }}
104+
- name: Build selftests
105+
uses: libbpf/ci/build-selftests@master
106+
with:
107+
vmlinux_btf: ${{ github.workspace }}/vmlinux
108+
toolchain: ${{ matrix.toolchain }}
109+
- name: Build samples
110+
uses: libbpf/ci/build-samples@master
111+
with:
112+
vmlinux_btf: ${{ github.workspace }}/vmlinux
113+
toolchain: ${{ matrix.toolchain }}
114+
- name: Tar artifacts
115+
run: |
116+
file_list=""
117+
if [ "${{ github.repository }}" == "kernel-patches/vmtest" ]; then
118+
# Package up a bunch of additional infrastructure to support running
119+
# 'make kernelrelease' and bpf tool checks later on.
120+
file_list="$(find . -iname Makefile | xargs) \
121+
scripts/ \
122+
tools/testing/selftests/bpf/ \
123+
tools/include/ \
124+
tools/bpf/bpftool/";
125+
fi
126+
# zstd is installed by default in the runner images.
127+
tar -cf - \
128+
.config \
129+
arch/*/boot/bzImage \
130+
include/config/auto.conf \
131+
include/generated/autoconf.h \
132+
${file_list} \
133+
--exclude '*.h' \
134+
selftests/bpf/ \
135+
vmlinux | zstd -T0 -19 -o vmlinux-${{ matrix.arch }}-${{ matrix.toolchain }}.tar.zst
136+
- uses: actions/upload-artifact@v3
137+
with:
138+
name: vmlinux-${{ matrix.arch }}-${{ matrix.toolchain }}
139+
if-no-files-found: error
140+
path: vmlinux-${{ matrix.arch }}-${{ matrix.toolchain }}.tar.zst
141+
test:
142+
name: ${{ matrix.test }} on ${{ matrix.arch }} with ${{ matrix.toolchain }}
143+
needs: [set-matrix, build]
144+
strategy:
145+
fail-fast: false
146+
matrix: ${{ fromJSON(needs.set-matrix.outputs.test-matrix) }}
147+
runs-on: ${{ matrix.runs_on }}
148+
timeout-minutes: 100
149+
env:
150+
KERNEL: ${{ matrix.kernel }}
151+
REPO_ROOT: ${{ github.workspace }}
152+
REPO_PATH: ""
153+
steps:
154+
- uses: actions/checkout@v3
155+
- uses: actions/download-artifact@v3
156+
with:
157+
name: vmlinux-${{ matrix.arch }}-${{ matrix.toolchain }}
158+
path: .
159+
- name: Untar artifacts
160+
# zstd is installed by default in the runner images.
161+
run: zstd -d -T0 vmlinux-${{ matrix.arch }}-${{ matrix.toolchain }}.tar.zst --stdout | tar -xf -
162+
- name: Prepare rootfs
163+
uses: libbpf/ci/prepare-rootfs@master
164+
with:
165+
project-name: 'libbpf'
166+
arch: ${{ matrix.arch }}
167+
kernel: ${{ matrix.kernel }}
168+
kernel-root: '.'
169+
image-output: '/tmp/root.img'
170+
test: ${{ matrix.test }}
171+
- name: Run selftests
172+
uses: libbpf/ci/run-qemu@master
173+
with:
174+
arch: ${{ matrix.arch}}
175+
img: '/tmp/root.img'
176+
vmlinuz: '${{ github.workspace }}/vmlinuz'
177+
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.

ci/vmtest/configs/DENYLIST

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
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
7+
verify_pkcs7_sig

ci/vmtest/configs/DENYLIST.s390x

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

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+
}

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)