aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorRobert U <[email protected]>2024-12-20 15:19:56 -0500
committerGitHub <[email protected]>2024-12-20 15:19:56 -0500
commit3f6841c95ff9a82658576828895ebcba1b0a5f86 (patch)
tree2601df6349ee7b2c48ccbfd6d893f4fe3cfcf202
parent2f172f63c2d78a88041589633ce21259de6177fc (diff)
downloadzmk-3f6841c95ff9a82658576828895ebcba1b0a5f86.tar.gz
zmk-3f6841c95ff9a82658576828895ebcba1b0a5f86.zip
chore: Allow running tests from anywhere and support EXTRA_MODULES (#2725)HEADmain
* Allow running tests from anywhere in the workspace * Trigger test workflow if run-test.sh changes
-rw-r--r--.github/workflows/test.yml2
-rwxr-xr-xapp/run-test.sh56
2 files changed, 43 insertions, 15 deletions
diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml
index 0df1f0c640..cbd4473786 100644
--- a/.github/workflows/test.yml
+++ b/.github/workflows/test.yml
@@ -4,12 +4,14 @@ on:
push:
paths:
- ".github/workflows/test.yml"
+ - "app/run-test.sh"
- "app/tests/**"
- "app/src/**"
- "app/include/**"
pull_request:
paths:
- ".github/workflows/test.yml"
+ - "app/run-test.sh"
- "app/tests/**"
- "app/src/**"
- "app/include/**"
diff --git a/app/run-test.sh b/app/run-test.sh
index b0b6f73b49..1b10ed930a 100755
--- a/app/run-test.sh
+++ b/app/run-test.sh
@@ -3,6 +3,15 @@
# Copyright (c) 2020 The ZMK Contributors
# SPDX-License-Identifier: MIT
+##
+# Optional environment variables, paths can be absolute or relative to $(pwd):
+# ZMK_SRC_DIR: Path to zmk/app (default is ./)
+# ZMK_BUILD_DIR: Path to build directory (default is $ZMK_SRC_DIR/build)
+# ZMK_EXTRA_MODULES: Path to at most one module (in addition to any in west.yml)
+# ZMK_TESTS_VERBOSE: Be more verbose
+# ZMK_TESTS_AUTO_ACCEPT: Replace snapshot files with new key events
+# J: Number of parallel jobs (default is 4)
+
if [ -z "$1" ]; then
echo "Usage: ./run-test.sh <path to testcase>"
exit 1
@@ -10,45 +19,62 @@ fi
path="$1"
if [ $path = "all" ]; then
- path="tests"
+ path="${ZMK_SRC_DIR-.}/tests"
fi
+ZMK_BUILD_DIR=${ZMK_BUILD_DIR:-${ZMK_SRC_DIR:-.}/build}
+mkdir -p ${ZMK_BUILD_DIR}/tests
+
testcases=$(find $path -name native_posix_64.keymap -exec dirname \{\} \;)
num_cases=$(echo "$testcases" | wc -l)
if [ $num_cases -gt 1 ] || [ "$testcases" != "$path" ]; then
- echo "" > ./build/tests/pass-fail.log
- echo "$testcases" | xargs -L 1 -P ${J:-4} ./run-test.sh
+ echo "" >${ZMK_BUILD_DIR}/tests/pass-fail.log
+ echo "$testcases" | xargs -L 1 -P ${J:-4} ${0}
err=$?
- sort -k2 ./build/tests/pass-fail.log
+ sort -k2 ${ZMK_BUILD_DIR}/tests/pass-fail.log
exit $err
fi
-testcase="$path"
+testcase=$(realpath $path | sed -n -e "s|.*/tests/||p")
echo "Running $testcase:"
-west build -d build/$testcase -b native_posix_64 -- -DCONFIG_ASSERT=y -DZMK_CONFIG="$(pwd)/$testcase" > /dev/null 2>&1
+build_cmd="west build ${ZMK_SRC_DIR:+-s $ZMK_SRC_DIR} -d ${ZMK_BUILD_DIR}/tests/$testcase \
+ -b native_posix_64 -p -- -DCONFIG_ASSERT=y -DZMK_CONFIG="$(realpath $path)" \
+ ${ZMK_EXTRA_MODULES:+-DZMK_EXTRA_MODULES="$(realpath ${ZMK_EXTRA_MODULES})"}"
+
+if [ -z ${ZMK_TESTS_VERBOSE} ]; then
+ $build_cmd >/dev/null 2>&1
+else
+ echo "ZMK_SRC_DIR: ${ZMK_SRC_DIR:-.}"
+ echo "ZMK_BUILD_DIR: $ZMK_BUILD_DIR"
+ $build_cmd
+fi
+
if [ $? -gt 0 ]; then
- echo "FAILED: $testcase did not build" | tee -a ./build/tests/pass-fail.log
+ echo "FAILED: $testcase did not build" | tee -a ${ZMK_BUILD_DIR}/tests/pass-fail.log
exit 1
fi
-./build/$testcase/zephyr/zmk.exe | sed -e "s/.*> //" | tee build/$testcase/keycode_events_full.log | sed -n -f $testcase/events.patterns > build/$testcase/keycode_events.log
-diff -auZ $testcase/keycode_events.snapshot build/$testcase/keycode_events.log
+${ZMK_BUILD_DIR}/tests/$testcase/zephyr/zmk.exe |
+ sed -e "s/.*> //" |
+ tee ${ZMK_BUILD_DIR}/tests/$testcase/keycode_events_full.log |
+ sed -n -f $path/events.patterns >${ZMK_BUILD_DIR}/tests/$testcase/keycode_events.log
+
+diff -auZ $path/keycode_events.snapshot ${ZMK_BUILD_DIR}/tests/$testcase/keycode_events.log
if [ $? -gt 0 ]; then
- if [ -f $testcase/pending ]; then
- echo "PENDING: $testcase" | tee -a ./build/tests/pass-fail.log
+ if [ -f $path/pending ]; then
+ echo "PENDING: $testcase" | tee -a ${ZMK_BUILD_DIR}/tests/pass-fail.log
exit 0
fi
-
if [ -n "${ZMK_TESTS_AUTO_ACCEPT}" ]; then
echo "Auto-accepting failure for $testcase"
- cp build/$testcase/keycode_events.log $testcase/keycode_events.snapshot
+ cp ${ZMK_BUILD_DIR}/tests/$testcase/keycode_events.log $path/keycode_events.snapshot
else
- echo "FAILED: $testcase" | tee -a ./build/tests/pass-fail.log
+ echo "FAILED: $testcase" | tee -a ${ZMK_BUILD_DIR}/tests/pass-fail.log
exit 1
fi
fi
-echo "PASS: $testcase" | tee -a ./build/tests/pass-fail.log
+echo "PASS: $testcase" | tee -a ${ZMK_BUILD_DIR}/tests/pass-fail.log
exit 0