# 自動更新

Oleafly 如何建置、簽署、驗證並發布跨平台的更新摘要來源（feed）。

Oleafly 使用 Tauri 的更新外掛。啟動時，應用程式會檢查最新的 GitHub 發行版本，有新版本時會開啟自己的更新視窗。使用者也可以從應用程式選單或 **關於 → 檢查更新** 手動檢查。

## 發行摘要來源（feed）

每個平台的建置都會產生簽署過的更新產出檔和一份 `latest.json` 片段。發行工作流程會讓這些片段保持分開，直到四個建置全部完成，再把各目標所擁有的項目合併成一份標準的資訊清單。

最終的資訊清單必須包含 macOS Apple Silicon、Windows x64、Linux x64 和 Linux ARM64 的項目。在維護者執行有防護的發布工作流程之前，它會一直附在草稿發行版本上。已安裝的應用程式看不到草稿。

應用程式從 GitHub Releases 下載 `latest.json`。安裝之前，Tauri 會用內嵌在 `src-tauri/tauri.conf.json` 中的公開金鑰驗證更新程式的簽章。缺少、未簽署或遭到竄改的產出檔都會被拒絕。

版本資訊取自 `CHANGELOG.md` 中對應的章節。工作流程會擷取該章節，同時用於 GitHub 發行版本的內文和更新視窗。

## 簽署金鑰

公開的更新金鑰提交在 `src-tauri/tauri.conf.json` 中。私密金鑰只能放在 GitHub Actions 的機密中：

- `TAURI_SIGNING_PRIVATE_KEY`
- `TAURI_SIGNING_PRIVATE_KEY_PASSWORD`

絕對不要提交私密金鑰。如果它外洩，請產生新的金鑰組，更新儲存庫機密，並替換內嵌的公開金鑰。既有的安裝會信任它們內嵌的金鑰，因此更換金鑰需要事先規劃好的手動更新途徑。

作業系統的簽署與更新程式的簽署是兩回事。有發行機密時，macOS 的建置會使用 Apple 程式碼簽署與公證。有憑證時，Windows 的建置會使用 Azure Artifact Signing。

## 失敗與回復

檢查或下載失敗時，已安裝的應用程式不會有任何變動。簽章驗證失敗會阻擋安裝。只有在驗證過的下載成功安裝之後，應用程式才會重新啟動。

Oleafly 不會自動回復已完成的更新。要回到較早的版本，請關閉應用程式，備份重要的專案，下載較早的官方安裝程式並驗證，然後安裝在目前的版本上。

草稿與發布的流程，請參閱 [發行 Oleafly](/docs/engineering/releasing/)。
