# Wine-based Gitea Actions runner: builds Windows binaries on a Linux host. # # Jobs run in "host" mode inside this container, where a Windows CPython 3.12 # (running under Wine) plus PyInstaller produce the .exe. Node.js and git are # included so the stock JS actions (actions/checkout, actions/upload-artifact) # work as-is. FROM debian:bookworm-slim ENV DEBIAN_FRONTEND=noninteractive \ WINEPREFIX=/root/.wine \ WINEDEBUG=-all \ WINEDLLOVERRIDES="mscoree,mshtml=" \ PYTHON_VERSION=3.12.8 # Wine (64-bit), node + git for JS actions, and build/package tooling. RUN apt-get update && apt-get install -y --no-install-recommends \ ca-certificates curl wget unzip zip \ wine wine64 xvfb winetricks cabextract \ nodejs git \ && apt-get clean && rm -rf /var/lib/apt/lists/* # Gitea Actions runner (linux-amd64 binary). RUN wget -qO /usr/local/bin/act_runner \ "https://gitea.com/gitea/act_runner/releases/download/v0.6.1/act_runner-0.6.1-linux-amd64" \ && chmod +x /usr/local/bin/act_runner # Windows CPython 3.12, silent install into C:\Python312. RUN wget -qO /tmp/python-installer.exe \ "https://www.python.org/ftp/python/${PYTHON_VERSION}/python-${PYTHON_VERSION}-amd64.exe" \ && xvfb-run -a wine /tmp/python-installer.exe \ /quiet InstallAllUsers=1 PrependPath=1 Include_test=0 Include_launcher=0 Shortcuts=0 \ && rm -f /tmp/python-installer.exe \ && wine "C:\\Python312\\python.exe" --version # MSVC runtime required by PySide6's Qt DLLs. RUN xvfb-run -a winetricks --unattended vcrun2022 # Convenience wrapper: winpython -> wine C:\Python312\python.exe RUN printf '#!/bin/sh\nexec wine "C:\\Python312\\python.exe" "$@"\n' > /usr/local/bin/winpython \ && chmod +x /usr/local/bin/winpython # Pre-install the Windows build deps so CI jobs start fast. COPY requirements-build.txt /tmp/requirements-build.txt RUN winpython -m pip install --upgrade pip \ && winpython -m pip install -r /tmp/requirements-build.txt \ && rm -f /tmp/requirements-build.txt COPY runner/entrypoint.sh /usr/local/bin/entrypoint.sh RUN chmod +x /usr/local/bin/entrypoint.sh WORKDIR /data ENTRYPOINT ["/usr/local/bin/entrypoint.sh"]