62 lines
2.6 KiB
Docker
62 lines
2.6 KiB
Docker
# 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 (32-bit + 64-bit: winetricks/regedit needs the 32-bit parts),
|
|
# node + git for JS actions, and build/package tooling.
|
|
RUN dpkg --add-architecture i386 \
|
|
&& apt-get update \
|
|
&& apt-get install -y --no-install-recommends \
|
|
ca-certificates curl wget unzip zip \
|
|
wine wine64 wine32 xvfb xauth cabextract \
|
|
nodejs git \
|
|
&& apt-get clean && rm -rf /var/lib/apt/lists/*
|
|
|
|
# winetricks (standalone script; not packaged in Debian main).
|
|
RUN wget -qO /usr/local/bin/winetricks \
|
|
"https://raw.githubusercontent.com/Winetricks/winetricks/master/src/winetricks" \
|
|
&& chmod +x /usr/local/bin/winetricks
|
|
|
|
# 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
|
|
|
|
# MSVC runtime required by PySide6's Qt DLLs (also initializes the Wine prefix).
|
|
RUN xvfb-run -a winetricks --unattended vcrun2022
|
|
|
|
# Windows CPython 3.12 (full installer: bundles pip + OpenSSL; needs wine32 for
|
|
# the 32-bit installer bootstrap, which is installed above).
|
|
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 TargetDir=C:\\Python312 Include_test=0 Include_launcher=0 Shortcuts=0 \
|
|
&& rm -f /tmp/python-installer.exe \
|
|
&& wine "C:\\Python312\\python.exe" --version
|
|
|
|
# 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"]
|