forked from zauberzeug/nicegui
-
Notifications
You must be signed in to change notification settings - Fork 0
/
test_startup.sh
executable file
·71 lines (62 loc) · 2.19 KB
/
test_startup.sh
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
#!/usr/bin/env bash
set -euo pipefail
run() {
pwd
output=$({ timeout 10 ./"$1" "${@:2}"; } 2>&1)
exitcode=$?
[[ $exitcode -eq 124 ]] && exitcode=0 # exitcode 124 is coming from "timeout command above"
echo "$output" | grep -qE "NiceGUI ready to go|Uvicorn running on http://127.0.0.1:8000" || exitcode=1
echo "$output" | grep -qE "Traceback|Error" && exitcode=1
if [[ $exitcode -ne 0 ]]; then
echo "Wrong exit code $exitcode. Output was:"
echo "$output"
return 1
fi
}
check() {
echo "Checking $1 ----------"
pushd "$(dirname "$1")" >/dev/null
max_attempts=3
for attempt in $(seq 1 $max_attempts); do
if run "$(basename "$1")" "${@:2}"; then
echo "OK --------"
popd > /dev/null
return 0
elif [ $attempt -eq $max_attempts ]; then
echo "FAILED after $max_attempts attempts -------"
popd > /dev/null
return 1
else
echo "Attempt $attempt failed. Retrying..."
fi
done
}
check main.py || exit 1
for path in examples/*
do
# Skip examples/sqlite_database for Python 3.11 and 3.12
if [[ $(python3 --version | cut -d' ' -f2 | cut -d'.' -f1,2) =~ ^3.1[12]$ ]] && [[ $path == "examples/sqlite_database" ]]; then
continue # until https://github.com/omnilib/aiosqlite/issues/241 is fixed
fi
# skip if path is examples/pyserial
if test $path = "examples/pyserial"; then
continue # because there is no serial port in github actions
fi
# install all requirements except nicegui
if test -f $path/requirements.txt; then
sed '/^nicegui/d' $path/requirements.txt > $path/requirements.tmp.txt || exit 1 # remove nicegui from requirements.txt
python3 -m pip install -r $path/requirements.tmp.txt || exit 1
rm $path/requirements.tmp.txt || exit 1
fi
# run start.sh or main.py
if test -f $path/start.sh; then
check $path/start.sh dev || exit 1
elif test -f $path/main.py; then
check $path/main.py || exit 1
fi
if pytest -q --collect-only $path >/dev/null 2>&1; then
echo "running tests for $path"
pytest $path || exit 1
fi
done
exit 0