py_func, lua_func and the run item now reach host binaries through `flatpak-spawn --host` instead of trying to load them under the sandbox runtime (which fails with a glibc ABI mismatch). Adds `--talk-name=org.freedesktop.Flatpak` to the manifest, stages the /app/lib/testium tree under /tmp so the host can read it, and drops the dead `_FLATPAK_HOST_DIRS` / lib-injection code paths that the new approach makes obsolete. Validation suite gains a `--mode source|wheel|pyinstaller|flatpak| appimage` flag so the same item set can run against every packaging channel; per-mode report file names avoid clobbering. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
132 lines
4.1 KiB
Batchfile
132 lines
4.1 KiB
Batchfile
@echo off
|
|
SETLOCAL EnableExtensions EnableDelayedExpansion
|
|
|
|
REM Runs the testium validation suite against any installable channel of
|
|
REM testium on Windows (source, wheel, pyinstaller).
|
|
REM
|
|
REM Usage:
|
|
REM test\validation\run.bat [clean] [--mode MODE] [extra testium args]
|
|
REM
|
|
REM clean remove the validation venv before recreating it
|
|
REM (must be the first argument; useful after a Python upgrade)
|
|
REM
|
|
REM --mode MODE which testium build to validate. One of:
|
|
REM source (default) project's run.bat (src\testium)
|
|
REM wheel dist\testium-<v>-py3-none-any.whl
|
|
REM pyinstaller dist\testium-<v>.exe (or dist\testium-<v>)
|
|
REM
|
|
REM Every test-execution subprocess runs in a dedicated host venv under
|
|
REM %TEMP%\testium-validation-venv (created with --system-site-packages,
|
|
REM then junit-xml is pip-installed for post_execution.py).
|
|
REM
|
|
REM The report file is suffixed with the mode so consecutive runs in
|
|
REM different modes don't overwrite each other.
|
|
|
|
SET "SCRIPT_DIR=%~dp0"
|
|
IF "%SCRIPT_DIR:~-1%"=="\" SET "SCRIPT_DIR=%SCRIPT_DIR:~0,-1%"
|
|
SET "PROJECT_DIR=%SCRIPT_DIR%\..\.."
|
|
SET /P VERSION=<"%PROJECT_DIR%\src\VERSION"
|
|
|
|
REM ---------- arg parsing ----------------------------------------------------
|
|
|
|
SET "MODE=source"
|
|
SET "CLEAN=0"
|
|
IF /I "%~1"=="clean" (
|
|
SET "CLEAN=1"
|
|
SHIFT
|
|
)
|
|
|
|
SET "EXTRA="
|
|
:PARSE_ARGS
|
|
IF "%~1"=="" GOTO ARGS_DONE
|
|
IF /I "%~1"=="--mode" (
|
|
SET "MODE=%~2"
|
|
SHIFT
|
|
SHIFT
|
|
GOTO PARSE_ARGS
|
|
)
|
|
SET "EXTRA=!EXTRA! "%~1""
|
|
SHIFT
|
|
GOTO PARSE_ARGS
|
|
:ARGS_DONE
|
|
|
|
REM ---------- locate host python ---------------------------------------------
|
|
|
|
SET "PYTHON_EXE="
|
|
py --version >nul 2>&1
|
|
IF %ERRORLEVEL% EQU 0 (
|
|
SET "PYTHON_EXE=py"
|
|
GOTO PYTHON_FOUND
|
|
)
|
|
python --version >nul 2>&1
|
|
IF %ERRORLEVEL% EQU 0 (
|
|
SET "PYTHON_EXE=python"
|
|
GOTO PYTHON_FOUND
|
|
)
|
|
echo ERROR: Python could not be found on this system.
|
|
exit /b 1
|
|
:PYTHON_FOUND
|
|
|
|
REM ---------- validation venv -------------------------------------------------
|
|
|
|
SET "VENV_DIR=%TEMP%\testium-validation-venv"
|
|
IF "%CLEAN%"=="1" IF EXIST "%VENV_DIR%" rmdir /s /q "%VENV_DIR%"
|
|
|
|
IF NOT EXIST "%VENV_DIR%" (
|
|
echo Creating validation venv at %VENV_DIR%
|
|
%PYTHON_EXE% -m venv --system-site-packages "%VENV_DIR%"
|
|
IF !ERRORLEVEL! NEQ 0 (
|
|
echo ERROR while creating the validation venv.
|
|
exit /b 1
|
|
)
|
|
call "%VENV_DIR%\Scripts\pip" install --quiet --upgrade pip
|
|
call "%VENV_DIR%\Scripts\pip" install --quiet junit-xml
|
|
)
|
|
SET "VENV_PYTHON=%VENV_DIR%\Scripts\python.exe"
|
|
|
|
REM ---------- shared "tail" forwarded to every launcher -----------------------
|
|
REM Reports are stamped with the mode so successive runs don't clobber each other.
|
|
|
|
SET "TAIL=-b -d "python_bin=%VENV_PYTHON%" -d "validation_report_file=validation-%MODE%" -- "%SCRIPT_DIR%\main.tum"%EXTRA%"
|
|
|
|
REM ---------- per-mode launcher ----------------------------------------------
|
|
|
|
echo -- validation mode: %MODE%
|
|
|
|
IF /I "%MODE%"=="source" GOTO MODE_SOURCE
|
|
IF /I "%MODE%"=="wheel" GOTO MODE_WHEEL
|
|
IF /I "%MODE%"=="pyinstaller" GOTO MODE_PYI
|
|
echo ERROR: unknown --mode '%MODE%'. Expected: source ^| wheel ^| pyinstaller.
|
|
exit /b 1
|
|
|
|
:MODE_SOURCE
|
|
call "%PROJECT_DIR%\run.bat" %TAIL%
|
|
exit /b %ERRORLEVEL%
|
|
|
|
:MODE_WHEEL
|
|
SET "WHEEL=%PROJECT_DIR%\dist\testium-%VERSION%-py3-none-any.whl"
|
|
IF NOT EXIST "%WHEEL%" (
|
|
echo ERROR: wheel not found at %WHEEL% -- run build_all.sh first.
|
|
exit /b 1
|
|
)
|
|
SET "WHEEL_VENV=%TEMP%\testium-wheel-venv-%VERSION%"
|
|
IF "%CLEAN%"=="1" IF EXIST "%WHEEL_VENV%" rmdir /s /q "%WHEEL_VENV%"
|
|
IF NOT EXIST "%WHEEL_VENV%" (
|
|
echo Creating wheel venv at %WHEEL_VENV%
|
|
%PYTHON_EXE% -m venv --system-site-packages "%WHEEL_VENV%"
|
|
call "%WHEEL_VENV%\Scripts\pip" install --quiet --upgrade pip
|
|
call "%WHEEL_VENV%\Scripts\pip" install --quiet "%WHEEL%"
|
|
)
|
|
"%WHEEL_VENV%\Scripts\python.exe" -m testium %TAIL%
|
|
exit /b %ERRORLEVEL%
|
|
|
|
:MODE_PYI
|
|
SET "PYI_BIN=%PROJECT_DIR%\dist\testium-%VERSION%.exe"
|
|
IF NOT EXIST "%PYI_BIN%" SET "PYI_BIN=%PROJECT_DIR%\dist\testium-%VERSION%"
|
|
IF NOT EXIST "%PYI_BIN%" (
|
|
echo ERROR: PyInstaller binary not found in %PROJECT_DIR%\dist -- run build_all.sh first.
|
|
exit /b 1
|
|
)
|
|
"%PYI_BIN%" %TAIL%
|
|
exit /b %ERRORLEVEL%
|