From 558ddea80bd73a5a82a39da276165c186e966fab Mon Sep 17 00:00:00 2001 From: Space-Banane Date: Mon, 6 Apr 2026 23:13:56 +0200 Subject: [PATCH] refactor: enhance execution testing for batch.py with output monitoring and timeout handling --- .gitea/workflows/python-syntax.yml | 49 +++++++++++++++++++++++++++++- 1 file changed, 48 insertions(+), 1 deletion(-) diff --git a/.gitea/workflows/python-syntax.yml b/.gitea/workflows/python-syntax.yml index 7fbb2d3..b2fb672 100644 --- a/.gitea/workflows/python-syntax.yml +++ b/.gitea/workflows/python-syntax.yml @@ -47,7 +47,54 @@ jobs: files=$(git ls-files '*.py') for file in $files; do echo "Testing execution of $file..." - # Try to run the file with a 5-second timeout + + # Special-case: run `batch.py` and watch its output for the marker + if [ "$file" = "batch.py" ]; then + tmp=$(mktemp) + # Run the script with line-buffered output to a temp file + stdbuf -oL python "$file" >"$tmp" 2>&1 & + pid=$! + + # Start a monitor that follows the temp file and kills the process when pattern seen + ( stdbuf -oL tail -F "$tmp" 2>/dev/null | stdbuf -oL grep -m1 --line-buffered ' yt-dlp batch' && kill $pid ) & + monitor_pid=$! + + # Wait up to 5s for the process to exit (or be killed by the monitor) + timeout 5s wait $pid 2>/dev/null || true + status=$? + + # Stop the monitor and cleanup + kill $monitor_pid 2>/dev/null || true + wait $monitor_pid 2>/dev/null || true + + # If the marker was seen in the temp output, treat as success + if grep -q ' yt-dlp batch' "$tmp"; then + echo "Marker seen in $file output — considered working" + rm -f "$tmp" + continue + fi + + rm -f "$tmp" + + # If process exited successfully, continue; otherwise fall back to compile check + if [ $status -eq 0 ]; then + continue + fi + + if [ $status -eq 124 ]; then + echo "Timed out without marker for $file" + fi + + python -m py_compile "$file" + status2=$? + if [ $status2 -ne 0 ]; then + echo "Execution or compile failed for $file (exit $status or $status2)" + exit $status2 + fi + continue + fi + + # Default behavior for other files: try --version with a 5s timeout timeout 5s python "$file" --version status=$?