name: Build Windows EXE with Full Image on: push: # 推荐:只在打标签时触发 Release tags: - 'v*' # 例如推送 v1.0.0, v2.1.3 等标签时触发 # 如果你想在每次推送时都创建,也可以保留 branches,但通常会打 tag branches: ["main"] jobs: build: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 # 步骤1:下载 Python 3.9.9 安装包(保持文件名一致) - name: Download Python 3.9.9 installer run: | wget https://mirrors.tuna.tsinghua.edu.cn/python/3.9.9/python-3.9.9-amd64.exe ls -lh python-3.9.9-amd64.exe # 验证文件完整性 file python-3.9.9-amd64.exe - name: Reset Wine environment (clean slate) run: | echo "=== 备份并删除旧的 Wine 配置目录 ===" # 如果 ~/.wine 目录存在,先重命名备份(或直接删除) if [ -d "$HOME/.wine" ]; then mv "$HOME/.wine" "$HOME/.wine.bak.$(date +%s)" echo "Old .wine directory backed up." fi echo "=== 初始化一个新的干净的Wine环境 ===" # 初始化Wine环境,使用 xvfb-run 避免任何图形界面问题 # 设置 WINEARCH 为 win64 以支持64位 export WINEARCH=win64 xvfb-run wineboot -u echo "=== 验证新环境 ===" # 等待几秒让环境初始化完成 sleep 5 wine --version xvfb-run wine cmd /c "echo Wine environment is ready" # 步骤3:安装 Python(使用正确的文件名) - name: Install Python in Wine run: | echo "Current directory: $(pwd)" ls -lah if [ ! -f python-3.9.9-amd64.exe ]; then echo "Installer not found!" exit 1 fi # 直接用 wine 运行 xvfb-run -a wine python-3.9.9-amd64.exe /quiet InstallAllUsers=1 PrependPath=1 Include_test=0 # 等待安装 sleep 20 # 步骤4:更彻底地查找 Python - name: Find and verify Python run: | echo "=== Searching all possible Python locations ===" # 查找所有 python.exe find /root/.wine/drive_c -name "python.exe" 2>/dev/null | while read path; do echo "Found: $path" echo "Version info:" wine "$path" --version 2>/dev/null || echo "Cannot run $path" done # 尝试常见路径 COMMON_PATHS=( "/root/.wine/drive_c/Python39/python.exe" "/root/.wine/drive_c/Python39-32/python.exe" "/root/.wine/drive_c/Program Files/Python39/python.exe" "/root/.wine/drive_c/users/runner/AppData/Local/Programs/Python/Python39/python.exe" ) for path in "${COMMON_PATHS[@]}"; do if [ -f "$path" ]; then echo "Found Python at standard location: $path" PYTHON_EXE="$path" break fi done if [ -z "$PYTHON_EXE" ]; then echo "Python not found in standard locations" exit 1 fi echo "PYTHON_EXE=$PYTHON_EXE" >> $GITHUB_ENV wine "$PYTHON_EXE" --version # 步骤5:安装依赖 - name: Install dependencies run: | # 先配置 pip 使用清华源(或其他国内源) wine "$PYTHON_EXE" -m pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple wine "$PYTHON_EXE" -m pip config set install.trusted-host pypi.tuna.tsinghua.edu.cn # 升级 pip wine "$PYTHON_EXE" -m pip install --upgrade pip # 安装包 wine "$PYTHON_EXE" -m pip install pyinstaller keyboard pywin32 # 步骤6:构建 EXE - name: Build EXE run: | wine "$PYTHON_EXE" -m PyInstaller --onefile --windowed --name Shortcut_Sync_PotPlayer main.py # 步骤7:上传构建产物(修复版本) - name: Upload Artifact uses: christopherhx/gitea-upload-artifact@v4 # 关键修复! with: name: Shortcut_Sync_PotPlayer path: dist/Shortcut_Sync_PotPlayer.exe - name: Create Release and Upload Asset # 使用专门为 Gitea 开发的 release action # 这是一个在 Gitea 生态中广泛使用的版本 [citation:2][citation:5] uses: https://gitea.com/actions/release-action@main with: # 文件路径:指向你 PyInstaller 生成的 EXE 文件 files: dist/Shortcut_Sync_PotPlayer.exe # API 密钥:使用 Gitea 自动提供的 token,用于认证 api_key: '${{ secrets.GITHUB_TOKEN }}' # 可选:设置 Release 的标题,默认会使用 tag 名称 name: 'Release ${{ github.ref_name }}' # 可选:是否为草稿 (true/false) draft: false # 可选:是否为预发布 (true/false) prerelease: false