# Baut die Windows-Version (Provisionsmanager95.exe) mit Windows-Python unter Wine. # - jeder Push / PR: Tests + .exe als Build-Artefakt # - Tag "v*" (z. B. v1.0.0): zusätzlich Gitea-Release mit .exe und .zip name: Windows-Build on: push: branches: [main] tags: ["v*"] pull_request: workflow_dispatch: jobs: windows-exe: # Label ggf. an euren Runner anpassen (Runner braucht Docker; Wine steckt im Container-Image). runs-on: ubuntu-latest timeout-minutes: 30 # normal ca. 5 Minuten – ein Hänger darf den Runner nicht stundenlang belegen container: image: tobix/pywine:3.12 env: WINEPREFIX: /opt/wineprefix steps: - name: Werkzeuge für Checkout/Upload installieren run: | apt-get update -qq apt-get install -y -qq --no-install-recommends git nodejs ca-certificates >/dev/null - uses: actions/checkout@v4 - name: Tests + Build (.exe) run: ./build/build_windows.sh - name: Build-Artefakt hochladen uses: actions/upload-artifact@v3 with: name: Provisionsmanager95 path: | dist/Provisionsmanager95.exe dist/Provisionsmanager95-*.zip - name: Release erstellen if: startsWith(github.ref, 'refs/tags/v') env: TOKEN: ${{ secrets.RELEASE_TOKEN || secrets.GITEA_TOKEN }} API: ${{ github.server_url }}/api/v1/repos/${{ github.repository }} TAG: ${{ github.ref_name }} run: | set -eu VERSION=$(cat dist/VERSION | tr -d '\r\n') if [ "v$VERSION" != "$TAG" ]; then echo "Tag $TAG passt nicht zu provtool/__init__.py (Version $VERSION)"; exit 1 fi resp=$(curl -sf -X POST "$API/releases" -H "Authorization: token $TOKEN" -H "Content-Type: application/json" \ -d "{\"tag_name\":\"$TAG\",\"name\":\"Provisions-Manager 95 $TAG\",\"body\":\"Windows-Version $VERSION – einfach die .exe herunterladen und starten.\"}") id=$(echo "$resp" | grep -o '"id":[0-9]*' | head -1 | cut -d: -f2) for f in dist/Provisionsmanager95.exe dist/Provisionsmanager95-$VERSION.zip; do curl -sf -X POST "$API/releases/$id/assets?name=$(basename "$f")" \ -H "Authorization: token $TOKEN" -F "attachment=@$f" >/dev/null echo "hochgeladen: $f" done