From 32da1e8ee117698b03b0c7a5f008e39a9bf2e3a5 Mon Sep 17 00:00:00 2001 From: Daniel Dybing Date: Wed, 11 Mar 2026 16:14:08 +0100 Subject: [PATCH] Workflow: Use xvfb-run for headless Windows Python installation in Docker --- .gitea/workflows/build.yml | 29 ++++++++++++++++------------- 1 file changed, 16 insertions(+), 13 deletions(-) diff --git a/.gitea/workflows/build.yml b/.gitea/workflows/build.yml index e89351e..0c13e5c 100644 --- a/.gitea/workflows/build.yml +++ b/.gitea/workflows/build.yml @@ -35,41 +35,43 @@ jobs: steps: - uses: actions/checkout@v4 - - name: Build Windows executable (True Cross-Compile) + - name: Build Windows executable (Headless Cross-Compile) run: | - # 1. Create a local Dockerfile that installs Windows Python under Wine + # 1. Create a local Dockerfile with xvfb for headless UI support cat < Dockerfile.win FROM python:3.10-slim - # Install Wine and dependencies + ENV WINEDEBUG=-all + ENV DEBIAN_FRONTEND=noninteractive + RUN dpkg --add-architecture i386 && apt-get update && \ - apt-get install -y wine wine32 wine64 wget && \ + apt-get install -y wine wine32 wine64 wget xvfb && \ apt-get clean - # Install Windows Python inside Wine + # Install Windows Python using xvfb-run to provide a dummy display RUN wget https://www.python.org/ftp/python/3.10.11/python-3.10.11-amd64.exe && \ - wine python-3.10.11-amd64.exe /quiet InstallAllUsers=1 PrependPath=1 && \ + xvfb-run wine python-3.10.11-amd64.exe /quiet InstallAllUsers=1 PrependPath=1 && \ rm python-3.10.11-amd64.exe - # Install dependencies inside Windows Python - RUN wine python -m pip install --upgrade pip - RUN wine python -m pip install pyinstaller requests questionary rich python-dotenv + # Install dependencies + RUN xvfb-run wine python -m pip install --upgrade pip + RUN xvfb-run wine python -m pip install pyinstaller requests questionary rich python-dotenv WORKDIR /src EOF # 2. Build local image - docker build -t true-win-builder -f Dockerfile.win . + docker build -t headless-win-builder -f Dockerfile.win . # 3. Use unique container name CONTAINER_NAME="win-build-${{ github.run_id }}" - # 4. Run build using the Windows Python interpreter - docker create --name $CONTAINER_NAME true-win-builder wine python -m PyInstaller --onefile --name tamigo-cli tamigo.py + # 4. Run build + docker create --name $CONTAINER_NAME headless-win-builder xvfb-run wine python -m PyInstaller --onefile --name tamigo-cli tamigo.py docker cp . $CONTAINER_NAME:/src docker start -a $CONTAINER_NAME - # 5. Extract and cleanup + # 5. Extract results mkdir -p win_dist docker cp $CONTAINER_NAME:/src/dist/. ./win_dist/ docker rm $CONTAINER_NAME @@ -80,6 +82,7 @@ jobs: ls -R win_dist/ || echo "No win_dist folder" find . -name "*.exe" + # Downgrade to v3 for Gitea compatibility - name: Upload Windows Artifact uses: actions/upload-artifact@v3 with: