Files
Shortcut_Sync_PotPlayer/.github/workflows/build-exe.yml
2026-03-15 11:51:04 +08:00

136 lines
3.7 KiB
YAML

name: Build Windows EXE
on:
push:
workflow_dispatch:
permissions:
contents: write
env:
PYTHON_VERSION: "3.9.1"
PYTHON_DIR: 'C:\Python391'
PYTHON_EXE: 'C:\Python391\python.exe'
jobs:
build:
runs-on: ubuntu-22.04
outputs:
archive_name: ${{ steps.archive.outputs.archive_name }}
steps:
- name: Checkout repository
uses: actions/checkout@v4
- name: Setup Wine
shell: bash
run: |
WINEPREFIX="$RUNNER_TEMP/wine"
echo "WINEPREFIX=$WINEPREFIX" >> "$GITHUB_ENV"
echo "WINEDEBUG=-all" >> "$GITHUB_ENV"
export WINEPREFIX
export WINEDEBUG=-all
sudo dpkg --add-architecture i386
sudo apt-get update
sudo apt-get install -y --no-install-recommends \
wine64 \
wine32 \
curl \
ca-certificates \
xvfb \
zip
xvfb-run -a wine64 wineboot --init
wineserver -w
wine64 --version
- name: Install Windows Python
shell: bash
run: |
curl -fsSL \
"https://www.python.org/ftp/python/${PYTHON_VERSION}/python-${PYTHON_VERSION}-amd64.exe" \
-o /tmp/python-installer.exe
xvfb-run -a wine64 /tmp/python-installer.exe \
/quiet \
InstallAllUsers=1 \
PrependPath=1 \
Include_pip=1 \
Include_test=0 \
SimpleInstall=1 \
"TargetDir=${PYTHON_DIR}"
wineserver -w
rm -f /tmp/python-installer.exe
xvfb-run -a wine64 "${PYTHON_EXE}" --version
- name: Install Dependencies
shell: bash
run: |
xvfb-run -a wine64 "${PYTHON_EXE}" -m pip install --upgrade pip setuptools wheel
if [ -f requirements.txt ]; then
xvfb-run -a wine64 "${PYTHON_EXE}" -m pip install --no-cache-dir -r requirements.txt
fi
xvfb-run -a wine64 "${PYTHON_EXE}" -m pip install --no-cache-dir \
pyinstaller \
keyboard \
pywin32
xvfb-run -a wine64 "${PYTHON_EXE}" -c "import keyboard, win32api, win32gui; print('dependencies ok')"
- name: Build EXE
shell: bash
run: |
xvfb-run -a wine64 "${PYTHON_EXE}" -m PyInstaller \
--noconfirm \
--clean \
--onefile \
--windowed \
--name Shortcut_Sync_PotPlayer \
main.py
test -f dist/Shortcut_Sync_PotPlayer.exe
- name: Package artifact
id: archive
shell: bash
run: |
if [[ "$GITHUB_REF" == refs/tags/* ]]; then
version="$GITHUB_REF_NAME"
else
version="run-${GITHUB_RUN_NUMBER}"
fi
archive_name="Shortcut_Sync_PotPlayer-${version}-windows-x64.zip"
zip -j "dist/${archive_name}" "dist/Shortcut_Sync_PotPlayer.exe"
echo "archive_name=${archive_name}" >> "$GITHUB_OUTPUT"
- name: Upload Artifact
uses: actions/upload-artifact@v4
with:
name: windows-exe-package
path: dist/${{ steps.archive.outputs.archive_name }}
retention-days: 30
if-no-files-found: error
release:
if: startsWith(github.ref, 'refs/tags/')
needs: build
runs-on: ubuntu-22.04
steps:
- name: Download packaged artifact
uses: actions/download-artifact@v4
with:
name: windows-exe-package
path: release-assets
- name: Create GitHub Release
uses: softprops/action-gh-release@v2
with:
files: release-assets/${{ needs.build.outputs.archive_name }}
generate_release_notes: true