diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 50ec84e..9aac3cd 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -9,7 +9,8 @@ permissions: contents: write jobs: - build-and-release: + # Phase 1: Build in parallel and output artifacts + build: name: Build ${{ matrix.platform }} runs-on: ${{ matrix.os }} strategy: @@ -19,12 +20,15 @@ jobs: - os: macos-latest platform: darwin/amd64 artifact_name: GoNavi-mac-amd64 + asset_ext: .dmg - os: macos-latest platform: darwin/arm64 artifact_name: GoNavi-mac-arm64 + asset_ext: .dmg - os: windows-latest platform: windows/amd64 artifact_name: GoNavi-windows-amd64 + asset_ext: .exe steps: - name: Checkout code @@ -49,36 +53,26 @@ jobs: run: | wails build -platform ${{ matrix.platform }} -clean -o ${{ matrix.artifact_name }} - - name: Package macOS Application + # macOS Packaging + - name: Package macOS DMG if: contains(matrix.platform, 'darwin') run: | - # Install create-dmg brew install create-dmg - cd build/bin - echo "📂 列出 build/bin 目录内容:" - ls -F - # Find .app bundle APP_PATH=$(find . -maxdepth 1 -name "*.app" | head -n 1) - if [ -z "$APP_PATH" ]; then echo "❌ 未找到 .app 应用包!" exit 1 fi - - # Get pure name (e.g. GoNavi.app) APP_NAME=$(basename "$APP_PATH") - # Ad-hoc codesign to prevent "Damaged" error (requires user to allow anyway, but valid structure) echo "🔏 正在进行 Ad-hoc 签名..." codesign --force --options runtime --deep --sign - "$APP_NAME" DMG_NAME="${{ matrix.artifact_name }}.dmg" - echo "📦 正在生成 DMG: $DMG_NAME..." - # Create DMG create-dmg \ --volname "GoNavi Installer" \ --window-pos 200 120 \ @@ -90,24 +84,19 @@ jobs: "$DMG_NAME" \ "$APP_NAME" - # Move DMG to root for upload - mv "$DMG_NAME" "../../$DMG_NAME" + mv "$DMG_NAME" ../../ - - name: Package Windows Executable + # Windows Packaging + - name: Prepare Windows Exe if: contains(matrix.platform, 'windows') shell: bash run: | cd build/bin - echo "📂 列出 build/bin 目录内容:" - ls -F - TARGET="${{ matrix.artifact_name }}" if [ -f "$TARGET.exe" ]; then - echo "✅ 找到 $TARGET.exe" FINAL_EXE="$TARGET.exe" elif [ -f "$TARGET" ]; then - echo "⚠️ 找到无后缀文件 $TARGET,正在添加 .exe 后缀..." mv "$TARGET" "$TARGET.exe" FINAL_EXE="$TARGET.exe" else @@ -116,12 +105,38 @@ jobs: fi echo "📦 正在移动 $FINAL_EXE 到根目录..." - mv "$FINAL_EXE" "../../${{ matrix.artifact_name }}.exe" + mv "$FINAL_EXE" "../../$FINAL_EXE" - - name: Upload Release Asset + # Upload to Actions Artifacts (Temporary Storage) + - name: Upload Artifact + uses: actions/upload-artifact@v4 + with: + name: build-artifacts-${{ strategy.job-index }} # Unique name per job + path: GoNavi-*${{ matrix.asset_ext }} + retention-days: 1 + + # Phase 2: Collect all artifacts and Publish Release (Single Job) + release: + name: Publish Release + needs: build + runs-on: ubuntu-latest + steps: + - name: Download All Artifacts + uses: actions/download-artifact@v4 + with: + path: release-assets + pattern: build-artifacts-* + merge-multiple: true + + - name: List Assets + run: ls -R release-assets + + - name: Create Release uses: softprops/action-gh-release@v2 if: startsWith(github.ref, 'refs/tags/') with: - files: ${{ matrix.artifact_name }}* + files: release-assets/* + draft: true + make_latest: true env: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} \ No newline at end of file + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}