summaryrefslogtreecommitdiff
path: root/.github/workflows/run-tests.yml
diff options
context:
space:
mode:
authorDenys Fedoryshchenko <denys.f@collabora.com>2026-05-02 15:06:44 +0300
committerDenys Fedoryshchenko <denys.f@collabora.com>2026-05-02 15:07:57 +0300
commit8ee09f05d15276b295ea199f08fb3bc2e2d16121 (patch)
tree58d8c41582dc6652aaccdc69cc6455cbe0080994 /.github/workflows/run-tests.yml
parentca68d8c427d6654a73e018ab85d6191d6bfb191e (diff)
downloadaccel-ppp-8ee09f05d15276b295ea199f08fb3bc2e2d16121.tar.gz
accel-ppp-8ee09f05d15276b295ea199f08fb3bc2e2d16121.zip
ci: fail workflows on kernel issues found in dmesg
Recently i wasted several hours searching bug in workflows/userspace. Turned out in dmesg we had highly visible WARNING that we dont watch. After each test run, dump dmesg and grep for canonical kernel-issue markers (WARNING, BUG, Oops, kernel panic, GPF, KASAN, kernel UBSAN, soft/hard lockup, hung tasks, bad page state, invalid opcode). Fail the job if any are present, with a GitHub Actions error annotation. Until now, kernel WARNs from out-of-tree drivers (e.g. vlan_mon tripping the new ETH_P_ALL ptype_head WARN_ON in 6.6+) were silently swallowed by the existing 'Display processes and dmesg after tests' steps -- visible only if a human inspected the log. The check runs with if: always() so it triggers both on test failure and on test completion. Applied to all four workflows that load kernel modules: run-tests-asan-ubsan.yml, run-tests.yml (Test-in-Qemu, Test-in-Alpine, Test-in-GH, Test-in-GH-Coverage), run-tests-32bit.yml, and run-tests-bigendian.yml. P.S. Some whitespace churn included. Signed-off-by: Denys Fedoryshchenko <denys.f@collabora.com>
Diffstat (limited to '.github/workflows/run-tests.yml')
-rw-r--r--.github/workflows/run-tests.yml44
1 files changed, 40 insertions, 4 deletions
diff --git a/.github/workflows/run-tests.yml b/.github/workflows/run-tests.yml
index af7b5727..6db3574c 100644
--- a/.github/workflows/run-tests.yml
+++ b/.github/workflows/run-tests.yml
@@ -170,14 +170,23 @@ jobs:
- name: Run tests (all)
timeout-minutes: 5
run: >
- ssh -i ssh-key -p2222 user@localhost "cd accel-ppp/tests &&
+ ssh -i ssh-key -p2222 user@localhost "cd accel-ppp/tests &&
sudo python3 -m pytest -Wall --order-dependencies -v"
- name: Display processes and dmesg after tests
if: ${{ always() }}
run: >
- ssh -i ssh-key -p2222 user@localhost "ps aux | grep accel- &&
+ ssh -i ssh-key -p2222 user@localhost "ps aux | grep accel- &&
sudo dmesg"
+ - name: Check dmesg for kernel issues
+ if: ${{ always() }}
+ run: |
+ ssh -i ssh-key -p2222 user@localhost "sudo dmesg" > /tmp/dmesg.log
+ if grep -E 'WARNING:|BUG:|Oops:|kernel panic|general protection fault|KASAN|UBSAN:|soft lockup|hard LOCKUP|INFO: task .+ blocked|Bad page state|invalid opcode' /tmp/dmesg.log; then
+ echo "::error::Kernel issues detected in dmesg"
+ exit 1
+ fi
+
Test-in-Alpine:
#if: ${{ false }} # disable for now
runs-on: ubuntu-24.04
@@ -299,14 +308,23 @@ jobs:
- name: Run tests (all)
timeout-minutes: 5
run: >
- ssh -i ssh-key -p2222 alpine@localhost "cd accel-ppp/tests &&
+ ssh -i ssh-key -p2222 alpine@localhost "cd accel-ppp/tests &&
doas python3 -m pytest -Wall --order-dependencies -v -m \"not chap_secrets\""
- name: Display processes and dmesg after tests
if: ${{ always() }}
run: >
- ssh -i ssh-key -p2222 alpine@localhost "ps aux | grep accel- &&
+ ssh -i ssh-key -p2222 alpine@localhost "ps aux | grep accel- &&
doas dmesg"
+ - name: Check dmesg for kernel issues
+ if: ${{ always() }}
+ run: |
+ ssh -i ssh-key -p2222 alpine@localhost "doas dmesg" > /tmp/dmesg.log
+ if grep -E 'WARNING:|BUG:|Oops:|kernel panic|general protection fault|KASAN|UBSAN:|soft lockup|hard LOCKUP|INFO: task .+ blocked|Bad page state|invalid opcode' /tmp/dmesg.log; then
+ echo "::error::Kernel issues detected in dmesg"
+ exit 1
+ fi
+
Test-in-GH:
#if: ${{ false }} # disable for now
@@ -363,6 +381,15 @@ jobs:
working-directory: ./tests
run: sudo python3 -m pytest -Wall --order-dependencies -v
+ - name: Check dmesg for kernel issues
+ if: ${{ always() }}
+ run: |
+ sudo dmesg | tee /tmp/dmesg.log
+ if grep -E 'WARNING:|BUG:|Oops:|kernel panic|general protection fault|KASAN|UBSAN:|soft lockup|hard LOCKUP|INFO: task .+ blocked|Bad page state|invalid opcode' /tmp/dmesg.log; then
+ echo "::error::Kernel issues detected in dmesg"
+ exit 1
+ fi
+
Test-in-GH-Coverage:
#if: ${{ false }} # disable for now
strategy:
@@ -419,6 +446,15 @@ jobs:
working-directory: ./tests
run: sudo python3 -m pytest -Wall --order-dependencies -v || exit 0
+ - name: Check dmesg for kernel issues
+ if: ${{ always() }}
+ run: |
+ sudo dmesg | tee /tmp/dmesg.log
+ if grep -E 'WARNING:|BUG:|Oops:|kernel panic|general protection fault|KASAN|UBSAN:|soft lockup|hard LOCKUP|INFO: task .+ blocked|Bad page state|invalid opcode' /tmp/dmesg.log; then
+ echo "::error::Kernel issues detected in dmesg"
+ exit 1
+ fi
+
- name: Generate coverage reports (default(txt), csv, html)
run: |
mkdir -p tests/report