跳至內容

新聞稿

Tuist 使用持續發佈系統,每當有意義的變更合併到主分支時,系統就會自動發佈新版本。此方法可確保所做的改進能快速傳達給使用者,而無需維護人員的手動介入。

概述#

我們持續發佈三個主要元件:

  • Tuist CLI - 指令列工具
  • Tuist 伺服器 - 後端服務
  • Tuist 應用程式 - macOS 和 iOS 應用程式 (iOS 應用程式僅持續部署至 TestFlight,請參閱 此處)

每個元件都有自己的發行管道,每次推送到主分支時都會自動執行。

如何運作#

1.承諾慣例#

我們使用 Conventional Commits 來結構我們的提交訊息。這可讓我們的工具了解變更的性質、決定版本的升級,並產生適當的變更記錄。

格式:種類(範圍):描述

承諾類型及其影響#

類型 說明 版本影響 範例
功勋 新功能或能力 次要版本提升 (x.Y.z) feat(cli): 新增 Swift 6 支援
錯誤修正 修補程式版本提升 (x.y.Z) fix(app): 解決開啟專案時當機的問題
文件 文件變更 無發佈 說明文件:更新安裝指南
風格 程式碼樣式變更 無發佈 樣式:使用 swiftformat 格式化程式碼
重構 程式碼重整 無發佈 重構(server):簡化認證邏輯
敷衍 效能改善 補丁版本提升 perf(cli): 最佳化依賴解析
測試 測試新增/變更 無發佈 test: 新增快取的單元測試
苦差事 維護任務 無發佈 苦差事:更新相依性
ci CI/CD 變更 無發佈 CI:新增發行版本的工作流程

突破性變更#

破壞性變更會觸發主要版本提升 (X.0.0),並應在提交正文中註明:

plaintext
feat(cli): change default cache location
BREAKING CHANGE: The cache is now stored in ~/.tuist/cache instead of .tuist-cache.
Users will need to clear their old cache directory.

2.變更偵測#

每個元件使用 git cliff 來:

  • 分析自上次發行後的提交
  • 依範圍 (用戶端、應用程式、伺服器) 過濾提交內容
  • 確定是否有可釋放的變更
  • 自動產生更新記錄

3.釋放管線#

偵測到可釋放變更時:

  1. 版本計算 :流水線決定下一個版本號
  2. 變更日誌產生: git cliff 可從提交訊息建立變更日誌
  3. 建置流程 :元件已建立並測試
  4. 版本建立 :GitHub 發行版本與工件一起建立
  5. 發行 :更新會推送給套件管理員 (例如:Homebrew for CLI)

4.範圍過濾#

每個元件只有在有相關變更時才會釋放:

  • CLI: 提交範圍為(cli) 或無範圍
  • 應用程式 :與(app) 範圍的提交
  • 伺服器 :與(伺服器) 範圍的提交

撰寫良好的提交訊息#

由於提交訊息會直接影響發行說明,因此撰寫清楚、具說明性的訊息非常重要:

做:#

  • 使用現在式:「增加功能」而非「增加功能」。
  • 要簡潔但具描述性
  • 當變更為特定元件時,包含範圍
  • 適用時請參考問題:fix(cli):解決建立快取記憶體的問題 (#1234)

不要#

  • 使用含糊不清的訊息,例如「修正錯誤」或「更新程式碼」。
  • 在一次提交中混合多個不相關的變更
  • 忘記包含故障變更資訊

突破性變更#

如果是破壞性的變更,請在提交正文中包含BREAKING CHANGE:

plaintext
feat(cli): change cache directory structure
BREAKING CHANGE: Cache files are now stored in a new directory structure.
Users need to clear their cache after updating.

發佈工作流程#

發佈工作流程定義在

  • .github/workflows/cli-release.yml - CLI 發行版本
  • .github/workflows/app-release.yml - 應用程式版本
  • .github/workflows/server-release.yml - 伺服器版本

每個工作流程:

  • 在推到主機時運行
  • 可手動觸發
  • 使用 git cliff 檢測變更
  • 處理整個發行流程

監控釋放#

您可以透過以下方式監控釋出:

  • GitHub 發佈頁面
  • 工作流程執行的 GitHub 動作索引標籤
  • 各元件目錄中的變更日誌檔案

優點#

這種持續釋放的方式提供了

  • 快速交付 :合併變更後立即送達使用者
  • 減少瓶頸 :無須等待手動釋放
  • 清晰的溝通 :從提交訊息自動更新更新記錄
  • 一致的流程 :所有元件採用相同的發行流程
  • 品質保證 :僅發佈經過測試的變更

疑難排解#

如果釋放失敗:

  1. 檢查 GitHub Actions 日誌,找出失敗的工作流程
  2. 確保您的提交訊息遵循傳統格式
  3. 驗證所有測試都通過
  4. 檢查元件是否成功建立

用於需要立即釋放的緊急修復:

  1. 確保您的委託有明確的範圍
  2. 合併後,監控發行工作流程
  3. 如果需要,觸發手動釋放

App Store 發佈#

CLI 和 Server 遵循上述的持續釋出程序,而iOS 應用程式 則因 Apple 的 App Store 審核程序而例外:

  • 手動發佈: iOS 應用程式發佈需要手動提交至 App Store
  • 審核延遲 :每個版本都必須經過 Apple 的審核程序,可能需要 1-7 天的時間
  • 分批變更 :每個 iOS 版本通常會將多項變更捆綁在一起
  • TestFlight :Beta 版本可在 App Store 發佈前透過 TestFlight 發佈
  • 發行說明 :必須特別針對 App Store 指南撰寫

iOS 應用程式仍遵循相同的提交慣例,並使用 git cliff 來產生變更日誌,但實際發放給使用者的頻率較低,並採用手動排程。