mirror of
https://github.com/Minidoracat/mcp-feedback-enhanced.git
synced 2025-07-27 02:22:26 +08:00
225 lines
7.3 KiB
Markdown
225 lines
7.3 KiB
Markdown
# 桌面應用構建和發佈流程改進
|
||
|
||
## 🎯 改進目標
|
||
|
||
確保 GitHub Actions 能夠健全地構建所有平台的桌面應用執行檔,並在發佈流程中正確使用這些構建產物。
|
||
|
||
## 🔧 主要改進
|
||
|
||
### 1. 增強桌面構建工作流程 (`.github/workflows/build-desktop.yml`)
|
||
|
||
#### 新增功能:
|
||
- **平台特定依賴安裝**:為 Linux 平台自動安裝必要的系統依賴
|
||
- **詳細構建驗證**:檢查二進制文件存在性、大小和類型
|
||
- **錯誤處理改進**:如果找不到構建產物則立即失敗
|
||
- **構建摘要增強**:提供詳細的構建狀態報告和下一步指導
|
||
|
||
#### 技術改進:
|
||
```yaml
|
||
# 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`)
|
||
|
||
#### 新增功能:
|
||
- **智能桌面構建檢測**:自動查找最新成功的桌面構建
|
||
- **健壯的產物下載**:改進錯誤處理和產物驗證
|
||
- **多平台二進制處理**:統一的平台映射和文件重命名
|
||
- **詳細驗證步驟**:確保所有平台的二進制文件都有效
|
||
|
||
#### 技術改進:
|
||
```yaml
|
||
# 智能構建檢測
|
||
- 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](../../actions/workflows/build-and-release.yml)
|
||
2. 點擊 "Run workflow"
|
||
3. 選擇版本類型或輸入自定義版本
|
||
4. 選擇要構建的平台(默認:all)
|
||
5. 可選:勾選 "只構建桌面應用,不進行發佈"
|
||
|
||
### 4. 工作流程驗證腳本 (`scripts/validate_workflows.py`)
|
||
|
||
#### 功能:
|
||
- **YAML 語法驗證**:確保所有工作流程文件語法正確
|
||
- **結構完整性檢查**:驗證必需字段和配置
|
||
- **特定工作流程驗證**:針對桌面構建和發佈流程的專項檢查
|
||
|
||
#### 使用方式:
|
||
```bash
|
||
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-dev` 與 `libappindicator3-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. **檢查工作流程配置**:
|
||
```bash
|
||
python scripts/validate_workflows.py
|
||
```
|
||
|
||
2. **查看構建日誌**:
|
||
- 前往 GitHub Actions 頁面
|
||
- 檢查失敗步驟的詳細日誌
|
||
|
||
3. **驗證產物**:
|
||
- 下載 Artifacts 手動檢查
|
||
- 確認文件大小和執行權限
|
||
|
||
## 📈 效果評估
|
||
|
||
### 改進前的問題
|
||
- ❌ 跨平台編譯在本地環境失敗
|
||
- ❌ 發佈流程缺少桌面應用驗證
|
||
- ❌ 錯誤處理不夠健壯
|
||
- ❌ 缺少統一的構建發佈流程
|
||
|
||
### 改進後的優勢
|
||
- ✅ 所有平台在原生環境構建
|
||
- ✅ 完整的產物驗證和錯誤處理
|
||
- ✅ 自動化的端到端流程
|
||
- ✅ 詳細的狀態報告和故障排除指導
|
||
- ✅ 靈活的構建和發佈選項
|
||
|
||
## 🎯 下一步
|
||
|
||
1. **測試新工作流程**:
|
||
- 觸發桌面構建測試所有平台
|
||
- 驗證發佈流程包含桌面應用
|
||
|
||
2. **監控和優化**:
|
||
- 收集構建時間數據
|
||
- 根據實際使用情況調整配置
|
||
|
||
3. **文檔更新**:
|
||
- 更新用戶指南
|
||
- 添加更多故障排除案例
|