# 7. 發佈與交付策略 ## 7.1 發佈通路(Q 決定:內部 Gitea / GitHub Releases) **決策**: - ✅ **內部 Gitea Releases**(首選) - ✅ **GitHub Releases**(備援 / 合作夥伴用) - ❌ **不上** Mac App Store、Microsoft Store、Snap Store、Flatpak **理由**: - 內部工具性質,不需要商店觸達 - 商店上架需要 sandbox(App Store)、開發者帳號 / 簽章(所有商店),均已被 Q2 排除 - Gitea / GitHub Releases 提供版本管理與下載追蹤即可 ## 7.2 發佈頻率 | 類型 | 頻率 | 觸發 | |------|------|------| | 主版本(1.0、2.0) | 1-2 次/年 | 重大功能加減 | | 次版本(1.1、1.2) | 1 次/月 | 新功能 / 重大改進 | | 修補版本(1.0.1)| 隨時 | Bug fix / 安全性 | ## 7.3 發佈產出物 每個 release 包含以下檔案: | 檔名 | 平台 | 格式 | 預計大小 | |------|------|------|---------| | `visionA-local-{version}-macos-x64.dmg` | macOS 14/15 x86_64 | `.dmg` | ~220 MB | | `visionA-local-{version}-windows-x64.exe` | Windows 10/11 x86_64 | Inno Setup `.exe` | ~200 MB | | `visionA-local-{version}-linux-x64.AppImage` | Ubuntu 22.04/24.04 x86_64 | `.AppImage` | ~200 MB | | `visionA-local-{version}-checksums.txt` | 全平台 | 文字 | < 1 KB(SHA256)| | `RELEASE_NOTES.md` | 全平台 | Markdown | 依版本而異 | **注意**:不提供 ARM 架構、不提供 `.deb` / `.rpm` / `.pkg`。 ## 7.4 發佈前檢查清單(Launch Checklist) 每次 release 前必須通過: ### 功能面 - [ ] 三平台安裝檔可於對應 OS 成功安裝(手動測試) - [ ] 三平台首次啟動可完成 First-Run 流程 - [ ] 三平台均可接 Kneron USB 並 connect 成功 - [ ] 三平台 Mock 模式可啟動並顯示假推論結果 - [ ] 三平台攝影機串流正常 - [ ] 三平台前端 cluster / relay / tray UI 已完全清除(**第三輪 Q-C 決策**,M1 必達) ### 效能面 - [ ] 安裝時間 ≤ 3 分鐘(測試機 SSD) - [ ] 首次推論時間 ≤ 15 秒 - [ ] Mock idle CPU ≤ 3%、RAM ≤ 400 MB - [ ] 安裝檔大小符合 6.2 節上限 ### 相容性 - [ ] macOS 14 + 15 各測試一次 - [ ] Windows 10 + 11 各測試一次 - [ ] Ubuntu 22.04 + 24.04 各測試一次 ### 文件 - [ ] RELEASE_NOTES.md 已撰寫 - [ ] 安裝指南更新(含 Gatekeeper / SmartScreen 警告處理) - [ ] 內部 Wiki / Slack 通知已準備好 ### 非需要項目(明確不做) - ~~程式碼簽章~~(Q2) - ~~notarization~~(Q2) - ~~法律文件(Terms / Privacy)~~(內部工具) - ~~商店審核~~ - ~~auto-update 清單~~(Q6) ## 7.5 發佈流程 ``` 1. 開發完成 → 合併到 main branch 2. 打 tag:git tag v1.0.0 && git push --tags 3. CI 觸發 → 三平台 build(GitHub Actions 或 self-hosted runner) ├─ macOS runner:wails build -platform darwin/amd64 → .dmg ├─ Windows runner:wails build -platform windows/amd64 → Inno Setup → .exe └─ Linux runner:wails build -platform linux/amd64 → appimagetool → .AppImage 4. 產生 checksums.txt 5. 人工執行 Launch Checklist 6. 上傳到 Gitea / GitHub Releases 7. 內部公告(Slack channel / Email): - 新版本號 - 主要變更 - 下載連結 - 升級說明(因為沒 auto-update,需手動下載) ``` ## 7.6 使用者升級路徑 因為 Q6 決定不做 auto-update: ``` 1. 使用者從 Slack / Email 得知有新版 2. 手動到 Gitea / GitHub Releases 下載新版安裝檔 3. 安裝新版(舊版 config / 模型資料保留在 OS 慣例資料目錄;macOS:`~/Library/Application Support/visiona-local/`) 4. 首次啟動新版會自動讀取舊 config ``` **舊版本相容性**: - config.json 結構必須向後相容(加欄位可以、改語意要寫 migration) - 模型檔案格式不變(.nef 為 Kneron 標準) - logs 目錄結構不變 ## 7.7 Rollback 策略 若新版本爆出重大問題: 1. 在 Gitea / GitHub Releases 將該版本標記為 pre-release 或刪除 2. 內部通知:「請暫停升級 vX.Y.Z,改用 vX.Y.Z-1」 3. 使用者已升級者:手動下載舊版重裝(config 資料保留) 因為無 auto-update,rollback 成本相對低。 ## 7.8 支援與回報 - **Bug 回報通路**:內部 Slack channel / Gitea Issues - **Feature Request**:同上 - **文件**:內部 Wiki - **無** SLA,best-effort 支援 ## 7.9 長期維護策略 visionA-local 的維護預算應與 edge-ai-platform 主線共用: - 核心業務邏輯(device / model / inference / camera)的修改同步從 edge-ai-platform cherry-pick - visionA-local 特有的部分(installer、payload、tray、wails shell)獨立維護 - 目標:visionA-local 的**獨有程式碼 < 30%**,其餘都能與 edge-ai-platform 共享 ## 7.10 非目標再次確認(發佈相關) 本章節再次強調發佈相關的非目標: - ❌ 不上任何商店(Mac App Store / Microsoft Store / Snap Store 等) - ❌ 不做程式碼簽章(macOS Developer ID / Windows EV cert) - ❌ 不做 notarization - ❌ 不做 auto-update - ❌ 不做 telemetry / crash report - ❌ 不做 license key - ❌ 不做法律文件(Terms / Privacy Policy)— 因為是內部工具 - ❌ 不支援 ARM 架構(未來再評估)