From e59bc51fcacc66ef93b11fce30b225dbae9836e2 Mon Sep 17 00:00:00 2001 From: Hsdi Date: Sun, 15 Mar 2026 12:23:41 +0800 Subject: [PATCH] 3151223 --- .github/workflows/build-exe.yml | 130 +++++++++++++++++++++++--------- 1 file changed, 93 insertions(+), 37 deletions(-) diff --git a/.github/workflows/build-exe.yml b/.github/workflows/build-exe.yml index e95b61c..a6a2fa4 100644 --- a/.github/workflows/build-exe.yml +++ b/.github/workflows/build-exe.yml @@ -4,10 +4,9 @@ on: push: workflow_dispatch: -permissions: - contents: write - env: + APP_NAME: Shortcut_Sync_PotPlayer + PACKAGE_NAME: shortcut-sync-potplayer PYTHON_VERSION: "3.9.1" PYTHON_DIR: 'C:\Python391' PYTHON_EXE: 'C:\Python391\python.exe' @@ -15,12 +14,18 @@ env: jobs: build: runs-on: ubuntu-22.04 - outputs: - archive_name: ${{ steps.archive.outputs.archive_name }} steps: - - name: Checkout repository - uses: actions/checkout@v4 + - name: Verify workspace + shell: bash + run: | + pwd + ls -la + test -f main.py || { + echo "main.py not found in workspace." + echo "If your runner does not auto-check out the repository, add a local mirror for checkout or clone the repo before running this workflow." + exit 1 + } - name: Setup Wine shell: bash @@ -38,6 +43,7 @@ jobs: wine32 \ curl \ ca-certificates \ + jq \ xvfb \ zip @@ -65,7 +71,7 @@ jobs: rm -f /tmp/python-installer.exe xvfb-run -a wine64 "${PYTHON_EXE}" --version - - name: Install Dependencies + - name: Install dependencies shell: bash run: | xvfb-run -a wine64 "${PYTHON_EXE}" -m pip install --upgrade pip setuptools wheel @@ -89,47 +95,97 @@ jobs: --clean \ --onefile \ --windowed \ - --name Shortcut_Sync_PotPlayer \ + --name "${APP_NAME}" \ main.py - test -f dist/Shortcut_Sync_PotPlayer.exe + test -f "dist/${APP_NAME}.exe" - - name: Package artifact - id: archive + - name: Package build + id: package shell: bash run: | if [[ "$GITHUB_REF" == refs/tags/* ]]; then version="$GITHUB_REF_NAME" else - version="run-${GITHUB_RUN_NUMBER}" + version="run-${GITHUB_RUN_NUMBER}-${GITHUB_SHA::7}" fi - archive_name="Shortcut_Sync_PotPlayer-${version}-windows-x64.zip" - zip -j "dist/${archive_name}" "dist/Shortcut_Sync_PotPlayer.exe" + archive_name="${APP_NAME}-${version}-windows-x64.zip" + archive_path="dist/${archive_name}" + + zip -j "$archive_path" "dist/${APP_NAME}.exe" + + echo "version=${version}" >> "$GITHUB_OUTPUT" echo "archive_name=${archive_name}" >> "$GITHUB_OUTPUT" + echo "archive_path=${archive_path}" >> "$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 + - name: Upload package to Gitea Packages + id: publish_package + shell: bash + env: + ACTIONS_TOKEN: ${{ github.token }} + run: | + owner="${GITHUB_REPOSITORY%%/*}" + package_url="${GITHUB_SERVER_URL}/api/packages/${owner}/generic/${PACKAGE_NAME}/${{ steps.package.outputs.version }}/${{ steps.package.outputs.archive_name }}" - release: - if: startsWith(github.ref, 'refs/tags/') - needs: build - runs-on: ubuntu-22.04 + curl --fail-with-body --silent --show-error \ + -X PUT \ + -H "Authorization: token ${ACTIONS_TOKEN}" \ + -H "Content-Type: application/zip" \ + --upload-file "${{ steps.package.outputs.archive_path }}" \ + "$package_url" - steps: - - name: Download packaged artifact - uses: actions/download-artifact@v4 - with: - name: windows-exe-package - path: release-assets + echo "package_url=${package_url}" >> "$GITHUB_OUTPUT" + if [ -n "${GITHUB_STEP_SUMMARY:-}" ]; then + echo "Built package: ${package_url}" >> "$GITHUB_STEP_SUMMARY" + fi - - name: Create GitHub Release - uses: softprops/action-gh-release@v2 - with: - files: release-assets/${{ needs.build.outputs.archive_name }} - generate_release_notes: true + - name: Create release on tag + if: startsWith(github.ref, 'refs/tags/') + shell: bash + env: + ACTIONS_TOKEN: ${{ github.token }} + run: | + api_url="${GITHUB_API_URL:-${GITHUB_SERVER_URL}/api/v1}" + releases_url="${api_url}/repos/${GITHUB_REPOSITORY}/releases" + tag_name="${GITHUB_REF_NAME}" + release_name="${tag_name}" + body="Windows build package: ${{ steps.publish_package.outputs.package_url }}" + + existing_release_id="$( + curl --silent \ + -H "Authorization: token ${ACTIONS_TOKEN}" \ + "${releases_url}" | jq -r --arg tag "$tag_name" '.[] | select(.tag_name == $tag) | .id' | head -n 1 + )" + + if [ -n "$existing_release_id" ] && [ "$existing_release_id" != "null" ]; then + echo "Release already exists for ${tag_name}, skipping creation." + exit 0 + fi + + payload="$( + jq -n \ + --arg tag_name "$tag_name" \ + --arg target_commitish "$GITHUB_SHA" \ + --arg name "$release_name" \ + --arg body "$body" \ + '{ + tag_name: $tag_name, + target_commitish: $target_commitish, + name: $name, + body: $body, + draft: false, + prerelease: false + }' + )" + + curl --fail-with-body --silent --show-error \ + -X POST \ + -H "Authorization: token ${ACTIONS_TOKEN}" \ + -H "Content-Type: application/json" \ + -d "$payload" \ + "$releases_url" > /dev/null + + if [ -n "${GITHUB_STEP_SUMMARY:-}" ]; then + echo "Release created for ${tag_name}" >> "$GITHUB_STEP_SUMMARY" + fi