UStackUStack
Rosentic icon

Rosentic

Rosentic 會在合併前將每個 PR 與所有作用中的分支逐一比對,找出相容性衝突(如 schema drift、API/簽名不符),並可在 CI 執行,開源免費。

Rosentic

Rosentic 是什麼?

Rosentic 是一個確定性 CI 檢查工具,會掃描拉取請求 (PR) 與作用中分支進行比對,在合併前找出相容性衝突。它專注於破壞跨分支行為的案例,包括 schema drift、API 變更及簽名不符。

工作流程以自動化驗證為核心:針對 PR 事件,Rosentic 在你的 CI 中執行,產生破壞性變更的細部分析,並回報偵測到的衝突相關特定位置(檔案路徑及行號)。

主要功能

  • 在合併前掃描 PR 與每個作用中分支比對,捕捉跨分支不相容問題,而非僅限 PR 自身 diff 的問題。
  • 確定性執行,確保 CI 執行間結果一致。
  • 在你的 CI/runner 中執行(「程式碼永不離開你的 runner」),分析維持在現有建置環境內。
  • 涵蓋 12 種語言,依據網站所述掃描範圍。
  • 提供衝突的行級細節(檔案路徑及行號),讓團隊能處理確切的呼叫點及介面。
  • 使用回歸測試固定裝置,守護底層引擎變更。

如何使用 Rosentic

  1. 將 Rosentic 的 GitHub Actions 工作流程新增至你的儲存庫(網站提供 .github/workflows/rosentic.yml 範例)。
  2. 設定工作流程在針對分支的 pull_request 事件執行(範例顯示 branches: [main])。
  3. 確保工作流程以 fetch-depth: 0 檢出儲存庫(如同範例),讓 Rosentic 能檢查分支比對所需內容。
  4. 工作流程執行 Rosentic/rosentic-action@v1。工作完成後,檢視 Rosentic 回報的「Breaking」衝突及行級位置。

網站也建議在代理式工作流程中,將 Rosentic 安裝至儲存庫,然後讓你的程式碼代理遵循該指示執行。

使用案例

  • 合併前防止執行時或整合失敗: PR 變更函式簽名(例如新增必要引數),Rosentic 識別其他分支仍呼叫舊簽名的呼叫者。
  • 偵測跨分支 schema drift: 當程式碼更新影響 schema 定義(例如 resolver 或合約形狀變更),Rosentic 回報「Schema drift」並指向受影響檔案/行號。
  • 捕捉 API 回傳型別或合約變更: 若函式回傳型別變更(例如從 Promise<void> 改為不同 Promise<Result> 形狀),Rosentic 列出可能無法處理新結果結構的呼叫者。
  • 防範後端與前端程式碼介面不符: 當 PR 更新共享介面,Rosentic 可標記其他分支呼叫點不符的「signature mismatch」衝突。
  • 標準化多代理分支相容性檢查: 若團隊使用多分支及自動化工作流程,Rosentic 驗證跨分支相容性,降低 PR 與平行開發衝突機率。

常見問題

Rosentic 需要 API 金鑰或註冊嗎?
網站說明:「無需註冊」且「無需 API 金鑰」。

Rosentic 在哪裡執行?
網站指出,它在你的 CI/runner 中執行,且程式碼「永不[離開]你的 runner」。

Rosentic 何時檢查衝突?
提供的範例工作流程在 pull_request 事件執行(範例中 branches: [main]),Rosentic 在合併前檢查 PR 與作用中分支。

Rosentic 回報哪些類型的衝突?
頁面範例提及 schema drift、API break 及 signature mismatch 等類別,並細分特定破壞性變更及受影響位置。

Rosentic 回傳哪些資訊?
網站說明,結果包含檔案路徑及行號,提供「完整細節」及 PR 上發現衝突數量。

替代方案

  • CI 中的自動化測試套件: 相較於主動比對 PR 與其他分支,單元/整合測試會在執行時驗證行為。這不同之處在於,測試驗證特定情境,而非列舉跨分支介面衝突。
  • 靜態類型檢查與 linting(語言特定): 類型檢查器與 linter 可捕捉編譯器能分析範圍內的簽名與類型不符,但可能無法識別相對於其他作用中分支變更所產生的相容性問題。
  • 傳統 Git 合併衝突偵測: Git 可在合併時呈現文字衝突,但不會本質上驗證跨分支的語意相容性,如 schema drift 或 API 合約不符。
  • CI 的變更影響分析工具: 依賴/影響分析類別的工具著重變更如何影響下游消費者;相較於 Rosentic,它們可能更依賴依賴圖或覆蓋率,而非明確的跨分支驗證。