mcp-feedback-enhanced/docs/DESKTOP_BUILD_IMPROVEMENTS.md
2025-06-15 19:43:05 +08:00

7.3 KiB
Raw Blame History

桌面應用構建和發佈流程改進

🎯 改進目標

確保 GitHub Actions 能夠健全地構建所有平台的桌面應用執行檔,並在發佈流程中正確使用這些構建產物。

🔧 主要改進

1. 增強桌面構建工作流程 (.github/workflows/build-desktop.yml)

新增功能:

  • 平台特定依賴安裝:為 Linux 平台自動安裝必要的系統依賴
  • 詳細構建驗證:檢查二進制文件存在性、大小和類型
  • 錯誤處理改進:如果找不到構建產物則立即失敗
  • 構建摘要增強:提供詳細的構建狀態報告和下一步指導

技術改進:

# Linux 依賴安裝
- name: Install platform-specific dependencies (Linux)
  if: matrix.os == 'ubuntu-latest'
  run: |
    sudo apt-get update
    sudo apt-get install -y \
      libwebkit2gtk-4.1-dev \
      libappindicator3-dev \
      librsvg2-dev \
      patchelf \
      libgtk-3-dev \
      libayatana-appindicator3-dev

# 增強的構建驗證
- name: Verify build output
  run: |
    BINARY_PATH="src-tauri/target/${{ matrix.target }}/release/${{ matrix.binary }}"
    if [ -f "$BINARY_PATH" ]; then
      echo "✅ 找到二進制文件: $BINARY_PATH"
      FILE_SIZE=$(stat -f%z "$BINARY_PATH" 2>/dev/null || stat -c%s "$BINARY_PATH" 2>/dev/null)
      echo "📏 文件大小: $FILE_SIZE bytes"
    else
      echo "❌ 二進制文件不存在: $BINARY_PATH"
      exit 1
    fi

2. 優化發佈工作流程 (.github/workflows/publish.yml)

新增功能:

  • 智能桌面構建檢測:自動查找最新成功的桌面構建
  • 健壯的產物下載:改進錯誤處理和產物驗證
  • 多平台二進制處理:統一的平台映射和文件重命名
  • 詳細驗證步驟:確保所有平台的二進制文件都有效

技術改進:

# 智能構建檢測
- name: Check desktop build availability
  run: |
    if [ -n "${{ github.event.inputs.desktop_build_run_id }}" ]; then
      echo "🎯 使用指定的構建 Run ID"
    else
      LATEST_RUN=$(curl -s -H "Authorization: Bearer ${{ secrets.GITHUB_TOKEN }}" \
        "https://api.github.com/repos/${{ github.repository }}/actions/workflows/build-desktop.yml/runs?status=success&per_page=1" \
        | jq -r '.workflow_runs[0].id // empty')
      echo "run_id=$LATEST_RUN" >> $GITHUB_OUTPUT
    fi

# 統一平台映射
declare -A PLATFORM_MAP=(
  ["desktop-windows"]="mcp-feedback-enhanced-desktop.exe"
  ["desktop-macos-intel"]="mcp-feedback-enhanced-desktop-macos-intel"
  ["desktop-macos-arm64"]="mcp-feedback-enhanced-desktop-macos-arm64"
  ["desktop-linux"]="mcp-feedback-enhanced-desktop-linux"
)

3. 新增一鍵構建發佈工作流程 (.github/workflows/build-and-release.yml)

功能特點:

  • 自動化整個流程:構建 → 驗證 → 發佈
  • 靈活的平台選擇:支援選擇特定平台或全平台構建
  • 可選發佈模式:可以只構建不發佈
  • 統一狀態報告:提供完整的流程摘要

使用方式:

  1. 前往 Build Desktop & Release
  2. 點擊 "Run workflow"
  3. 選擇版本類型或輸入自定義版本
  4. 選擇要構建的平台默認all
  5. 可選:勾選 "只構建桌面應用,不進行發佈"

4. 工作流程驗證腳本 (scripts/validate_workflows.py)

功能:

  • YAML 語法驗證:確保所有工作流程文件語法正確
  • 結構完整性檢查:驗證必需字段和配置
  • 特定工作流程驗證:針對桌面構建和發佈流程的專項檢查

使用方式:

python scripts/validate_workflows.py

🚀 使用指南

方案 1使用一鍵構建發佈推薦

  1. 觸發 "Build Desktop & Release" 工作流程
  2. 系統自動構建所有平台
  3. 構建成功後自動發佈

方案 2分步執行

  1. 先觸發 "Build Desktop Applications" 工作流程
  2. 等待所有平台構建完成
  3. 記錄 Run ID
  4. 觸發 "Auto Release to PyPI" 工作流程
  5. 設置 include_desktop: true 和對應的 Run ID

🔍 驗證清單

構建階段

  • Windows x64 構建成功
  • macOS Intel 構建成功
  • macOS ARM64 構建成功
  • Linux x64 構建成功
  • 所有二進制文件大小 > 1MB
  • Artifacts 正確上傳

發佈階段

  • 桌面構建產物正確下載
  • 所有平台二進制文件正確重命名
  • 執行權限正確設置
  • PyPI 包包含桌面應用
  • GitHub Release 創建成功

🛠️ 故障排除

常見問題

  1. Windows 平台 PowerShell 語法錯誤

    • 問題Missing '(' after 'if' in if statement
    • 原因:在 Windows 上使用了 bash 語法
    • 解決方案:為所有 shell 腳本添加 shell: bash 指定
  2. Linux 依賴包衝突

    • 問題libayatana-appindicator3-devlibappindicator3-dev 衝突
    • 原因Ubuntu 24.04 中兩個包不能同時安裝
    • 解決方案:優先嘗試 ayatana 版本,失敗時回退到傳統版本
  3. Linux 構建失敗

    • 檢查系統依賴是否正確安裝
    • 確認 GTK 和 WebKit 版本兼容性
    • 檢查 appindicator 依賴是否正確安裝
  4. macOS 構建失敗

    • 檢查 Xcode 命令行工具
    • 確認 target 配置正確
    • 驗證 Rust 工具鏈是否支援目標架構
  5. 桌面產物下載失敗

    • 確認指定的 Run ID 存在且成功
    • 檢查 Artifacts 保留期限30天
    • 驗證工作流程權限設置
  6. 發佈包缺少桌面應用

    • 驗證 include_desktop 設置為 true
    • 檢查桌面應用驗證步驟是否通過
    • 確認平台選擇邏輯正確執行
  7. 部分平台構建失敗導致發佈被阻擋

    • 問題:只有部分平台構建成功(例如 2/4 個平台)
    • 原因:發佈流程要求所有 4 個平台都必須成功
    • 解決方案
      • 重新運行桌面構建工作流程,確保所有平台成功
      • 檢查失敗平台的構建日誌
      • 或者設置 include_desktop=false 僅發佈 Web 版本
  8. 多平台完整性要求

    • 必須平台Windows x64、macOS Intel、macOS Apple Silicon、Linux x64
    • 驗證標準:每個平台的二進制文件必須 > 1MB
    • 失敗處理:任何平台缺失或無效都會阻擋發佈

調試步驟

  1. 檢查工作流程配置

    python scripts/validate_workflows.py
    
  2. 查看構建日誌

    • 前往 GitHub Actions 頁面
    • 檢查失敗步驟的詳細日誌
  3. 驗證產物

    • 下載 Artifacts 手動檢查
    • 確認文件大小和執行權限

📈 效果評估

改進前的問題

  • 跨平台編譯在本地環境失敗
  • 發佈流程缺少桌面應用驗證
  • 錯誤處理不夠健壯
  • 缺少統一的構建發佈流程

改進後的優勢

  • 所有平台在原生環境構建
  • 完整的產物驗證和錯誤處理
  • 自動化的端到端流程
  • 詳細的狀態報告和故障排除指導
  • 靈活的構建和發佈選項

🎯 下一步

  1. 測試新工作流程

    • 觸發桌面構建測試所有平台
    • 驗證發佈流程包含桌面應用
  2. 監控和優化

    • 收集構建時間數據
    • 根據實際使用情況調整配置
  3. 文檔更新

    • 更新用戶指南
    • 添加更多故障排除案例