Windows-Build / windows-exe (push) Failing after 2m20s
Ein Test hing auf dem Runner fast eine Stunde in einem Systemaufruf, wo der Tk-Watchdog der GUI-Tests nicht greift. pytest-timeout bricht ab und gibt den Aufrufstapel aus. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
61 lines
2.7 KiB
Bash
Executable File
61 lines
2.7 KiB
Bash
Executable File
#!/usr/bin/env bash
|
||
# Baut die Windows-.exe mit Windows-Python unter Wine (z. B. im Container tobix/pywine:3.12).
|
||
# Ergebnis: dist/Provisionsmanager95.exe und dist/Provisionsmanager95-<version>.zip
|
||
set -euo pipefail
|
||
cd "$(dirname "$0")/.."
|
||
|
||
export WINEDEBUG=-all
|
||
export LANG=C.UTF-8 LC_ALL=C.UTF-8 # sonst kann Wine keine Umlaute in Dateinamen abbilden
|
||
export WINEPREFIX="${WINEPREFIX:-/opt/wineprefix}"
|
||
PY="wine python"
|
||
|
||
# Ein virtueller Bildschirm für den GANZEN Build – vor dem ersten Wine-Aufruf starten!
|
||
# Wine bindet seinen Hintergrundprozess (wineserver/Desktop) an das DISPLAY des ersten Aufrufs.
|
||
# Läuft z. B. „pip install“ ohne Bildschirm und die GUI-Tests später mit, scheitert Tk unter
|
||
# Wine mit „Failed to create the menu window“.
|
||
wineserver -k 2>/dev/null || true
|
||
ANZEIGE=":$((90 + RANDOM % 9))"
|
||
Xvfb "$ANZEIGE" -screen 0 1280x800x24 -nolisten tcp >/dev/null 2>&1 &
|
||
XVFB_PID=$!
|
||
trap 'wineserver -k 2>/dev/null || true; kill $XVFB_PID 2>/dev/null || true' EXIT
|
||
export DISPLAY="$ANZEIGE"
|
||
sleep 1
|
||
|
||
$PY --version
|
||
$PY -m pip install --disable-pip-version-check -q -r requirements-dev.txt
|
||
|
||
echo "== Tests inkl. Oberfläche (Windows-Python unter Wine) =="
|
||
# PROVTOOL_GUI_TESTS=1: fehlt der Bildschirm, ist das ein Fehler (nicht „übersprungen“)
|
||
# -v: im Log ist live sichtbar, welcher Test läuft; timeout: Obergrenze für alle Tests zusammen
|
||
PROVTOOL_GUI_TESTS=1 timeout 900 $PY -m pytest -v -p no:cacheprovider
|
||
|
||
echo "== Version =="
|
||
VERSION=$($PY build/version_info.py | tr -d '\r')
|
||
echo "Version $VERSION"
|
||
|
||
echo "== PyInstaller =="
|
||
$PY -m PyInstaller --noconfirm --clean --distpath dist --workpath build/tmp build/provisionsmanager.spec
|
||
|
||
test -f dist/Provisionsmanager95.exe
|
||
|
||
echo "== Selbsttest der fertigen .exe =="
|
||
rm -f selbsttest.txt
|
||
set +e
|
||
timeout 300 wine dist/Provisionsmanager95.exe --selbsttest selbsttest.txt
|
||
CODE=$?
|
||
set -e
|
||
cat selbsttest.txt 2>/dev/null || echo "(keine Ergebnisdatei – die .exe ist vermutlich gar nicht gestartet)"
|
||
if [ "$CODE" -ne 0 ] || ! head -1 selbsttest.txt 2>/dev/null | tr -d '\r' | grep -qx OK; then
|
||
echo "Selbsttest der .exe FEHLGESCHLAGEN (Exit-Code $CODE)"
|
||
exit 1
|
||
fi
|
||
echo "Selbsttest bestanden"
|
||
cp README.md dist/LIESMICH.md 2>/dev/null || true
|
||
( cd dist && rm -f Provisionsmanager95-*.zip && \
|
||
python3 -c "import zipfile,sys; z=zipfile.ZipFile(sys.argv[1],'w',zipfile.ZIP_DEFLATED); [z.write(f) for f in sys.argv[2:]]; z.close()" \
|
||
"Provisionsmanager95-${VERSION}.zip" Provisionsmanager95.exe LIESMICH.md 2>/dev/null \
|
||
|| $PY -c "import zipfile,sys; z=zipfile.ZipFile(sys.argv[1],'w',zipfile.ZIP_DEFLATED); [z.write(f) for f in sys.argv[2:]]; z.close()" \
|
||
"Provisionsmanager95-${VERSION}.zip" Provisionsmanager95.exe LIESMICH.md )
|
||
echo "$VERSION" > dist/VERSION
|
||
ls -la dist
|