Files
Atomizer/run_script.bat
Antoine b3162aa78d Tier 2 dev workflow: Windows test runner + result sync
- run_tests.bat: double-click test runner with JSON result capture
- run_script.bat: run any script with output capture
- test_results/ folder for Syncthing-based result sharing
- Auto-mark NX-dependent tests for --quick mode
- pytest-json-report for structured results
2026-03-07 14:07:32 +00:00

92 lines
2.5 KiB
Batchfile

@echo off
REM ============================================================================
REM Atomizer Script Runner — Run any Python script with result capture
REM ============================================================================
REM Usage:
REM run_script.bat path\to\script.py [args...]
REM
REM Results sync back to Mario via Syncthing in test_results/
REM ============================================================================
setlocal enabledelayedexpansion
set "ATOMIZER_ROOT=%~dp0"
set "RESULTS_DIR=%ATOMIZER_ROOT%test_results"
set "SCRIPT=%~1"
if "%SCRIPT%"=="" (
echo Usage: run_script.bat path\to\script.py [args...]
pause
exit /b 1
)
REM Timestamp
for /f %%i in ('python -c "from datetime import datetime; print(datetime.now().strftime('%%Y-%%m-%%d_%%H-%%M-%%S'))"') do set "TIMESTAMP=%%i"
set "LOG_FILE=%RESULTS_DIR%\script_%TIMESTAMP%.log"
set "RUN_FILE=%RESULTS_DIR%\script_%TIMESTAMP%.json"
if not exist "%RESULTS_DIR%" mkdir "%RESULTS_DIR%"
echo.
echo ============================================================================
echo Running: %SCRIPT%
echo %date% %time%
echo ============================================================================
echo.
cd /d "%ATOMIZER_ROOT%"
REM Shift past first arg to get remaining args
set "EXTRA_ARGS="
shift
:argloop
if not "%~1"=="" (
set "EXTRA_ARGS=!EXTRA_ARGS! %~1"
shift
goto argloop
)
REM Run the script
python "%SCRIPT%" %EXTRA_ARGS% > "%LOG_FILE%" 2>&1
set "EXIT_CODE=!errorlevel!"
REM Also echo to console
type "%LOG_FILE%"
echo.
echo ============================================================================
echo Exit code: %EXIT_CODE%
REM Generate result JSON
python -c "
import json, os
from datetime import datetime
with open(r'%LOG_FILE%', 'r', encoding='utf-8', errors='replace') as f:
log = f.read()
# Grab last 50 lines for quick review
lines = log.strip().split('\n')
tail = lines[-50:] if len(lines) > 50 else lines
result = {
'timestamp': datetime.now().isoformat(),
'type': 'script',
'script': '%SCRIPT%',
'args': '%EXTRA_ARGS%'.strip(),
'exit_code': int('%EXIT_CODE%'),
'status': 'OK' if int('%EXIT_CODE%') == 0 else 'ERROR',
'output_tail': tail,
'log_file': os.path.basename(r'%LOG_FILE%'),
'total_lines': len(lines)
}
with open(r'%RUN_FILE%', 'w') as f:
json.dump(result, f, indent=2)
"
echo Results saved. Will sync to Mario via Syncthing.
echo ============================================================================
pause