跳至內容

GitHub 整合

Git 儲存庫係絕大多數軟件項目嘅核心。我哋同 GitHub 整合,令你喺 pull request 入面直接睇到 Tuist 分析結果,亦都慳返啲設定功夫,例如同步你嘅預設分支。

設定#

你需要喺組織嘅 Integrations 分頁安裝 Tuist GitHub 應用程式:顯示整合分頁嘅圖片

你亦都可以直接從 GitHub 安裝應用程式。如有需要,請登入 Tuist,授權 GitHub App 讓 Tuist 驗證你對該安裝嘅存取權,然後選擇要連接嘅 Tuist 組織。你必須擁有安裝該應用程式嘅 GitHub 組織(或個人 GitHub 帳戶)。系統只會顯示由你管理嘅 Tuist 組織同你嘅個人 Tuist 帳戶。如果只有一個帳戶可用,Tuist 會自動連接而唔會顯示選擇器。當你從 Tuist 開始操作時,組織已經被選中,呢個步驟會被跳過。

之後,你可以喺你嘅 GitHub 儲存庫同 Tuist 項目之間新增項目連接:

顯示新增項目連接嘅圖片

安裝應用程式後,你亦可以唔使用儀表板來連結項目:

  • CLI:tuist project repository connect owner/name,以及使用 tuist project repository disconnect 移除連結。
  • REST API: 對 /api/projects/{account_handle}/{project_handle}/vcs-connection 執行 PUT 同 DELETE。
  • Model Context Protocol:connect_project_repository 同 disconnect_project_repository 工具。

該儲存庫必須係 GitHub App 安裝可以存取嘅其中一個,而且項目會採用儲存庫嘅預設分支。帳戶令牌需要 project:admin:write 範圍。

IP 允許清單

如果你嘅 GitHub 組織使用 IP 允許清單,或者你嘅 GitHub 實例位於防火牆後面,請務必將 Tuist 嘅 出站 IP 位址 加入允許清單,以便整合可以同你嘅儲存庫通訊。

GitHub Enterprise Server#

Tuist 亦都整合咗自託管嘅 GitHub Enterprise Server (GHES) 實例。喺 GitHub 整合卡片中,切換到 Enterprise server 分頁,輸入你嘅 GHES 基礎 URL(例如 https://github.example.com),然後點擊安裝。

由於 GitHub Apps 僅限於單一 GitHub 實例,Tuist 無法喺你嘅 GHES 上重用其 github.com App — 相反,安裝按鈕會引導你完成 GitHub 嘅 App manifest 流程:GHES 會指導你嘅管理員喺實例上註冊一個全新嘅 Tuist App,然後將新 App 嘅憑證交回給 Tuist。Tuist 會按安裝加密儲存呢啲憑證,並從此用於每個 API 呼叫、webhook 簽名以及指向你儲存庫嘅連結。

無需額外配置 Tuist 伺服器;manifest 流程會自動生成並配置所有內容。

App 權限同 webhook 事件#

Tuist 需要以下 儲存庫權限 用於 PR 評論同 bundle 大小檢查:

權限存取用途
元數據 (metadata)唯讀基本儲存庫元數據;GitHub 要求每個 App 都必須具備
Pull requests (pull_requests)讀寫讀取 pull requests,包括其 head commit SHA,以及列出、發布同更新 PR 評論
Checks (checks)讀寫創建同更新 check runs,包括 bundle 大小通過/失敗檢查

Tuist 使用 check_run webhook 事件來處理 bundle 大小檢查動作。manifest 流程會自動配置此訂閱。

對於喺 github.com 上使用自託管 Tuist 伺服器進行手動 App 設置,請參閱 自託管指南。

分開瀏覽器同 API URL#

如果工程師透過內部主機名存取 GitHub Enterprise,而第三方服務使用外部代理,請喺點擊安裝之前配置兩個位址:

欄位範例使用者
Server URLhttps://github.internal.company.com你嘅瀏覽器,用於 App 註冊同安裝,以及從 Tuist 到 GitHub 嘅連結
API URLhttps://github-proxy.company.com/api/v3Tuist 嘅伺服器,用於 manifest-code 交換、存取權杖、儲存庫存取、PR 評論同檢查

API URL 係完整嘅 REST API 基礎 URL,包括 /api/v3 或由你嘅代理公開嘅等效路徑。Tuist 不會將 /api/v3 附加到明確指定嘅 API URL。如果一個主機名同時適用於你嘅瀏覽器同 Tuist,請留空;現有連線會繼續使用 <Server URL>/api/v3。

兩個位址都必須路由到 同一個 GitHub Enterprise 實例。你嘅瀏覽器只需要能夠到達 Server URL,無需到達 API 代理。Tuist 嘅伺服器只需要能夠到達 API URL,無需到達內部瀏覽器主機名。

對於外部代理:

  • 使用 HTTPS 並搭配 Tuist 伺服器信任嘅證書,且公共 DNS 解析為公共 IP 位址。API URL 覆蓋不會繞過 Tuist 嘅私有 IP/SSRF 保護。覆蓋必須指向你嘅 Enterprise 實例,而非 github.com 或 *.github.com 端點。
  • 將每個 Tuist 出站 IP 位址加入白名單。
  • 轉發 Tuist 使用嘅 REST API 端點,包括 POST /api/v3/app-manifests/{code}/conversions、POST /api/v3/app/installations/{installation_id}/access_tokens 以及用於評論同檢查嘅儲存庫 API 端點。呢啲係 GitHub 嘅上游路徑;如果你嘅代理公開咗不同嘅前綴,請相應翻譯。
  • 將請求轉發到 GitHub,唔好有 HTTP 重定向或互動式登入頁面。Tuist 不會自動跟隨 Enterprise API 重定向,因此佢哋無法繞過公共 IP 檢查。manifest 轉換端點喺設置期間、Tuist 取得 App 憑證之前必須可達。GitHub Actions 日誌下載係例外:Tuist 僅透過 HTTPS 跟隨已簽署嘅存檔重定向,檢查並將每個目的地固定到公共 IP,且不會轉發安裝權杖。

GitHub 可能會使用其內部主機名返回分頁連結。Tuist 會將來自已配置 GitHub 實例嘅連結重新基於 API URL,保留你代理嘅路徑前綴;指向無關來源嘅連結會被拒絕。

另外,GitHub 必須能夠將 webhooks 傳遞到 https://tuist.dev/webhooks/github(或者喺你自託管嘅 Tuist 伺服器上嘅 /webhooks/github)。工程師必須能夠返回 Tuist 以完成瀏覽器回調。API URL 不會改變任何一個目的地。

組織管理員亦可以透過整合卡片中嘅 Save API URL 來更改或清除現有 Enterprise 整合嘅 API URL。無需重新安裝 App 或重新連接項目。清除後會恢復為 <Server URL>/api/v3。保存操作會驗證 URL 格式,而非代理連通性。由於安裝查找係緩存嘅,Webhook 處理可能需要長達一分鐘才能使用更改後嘅位址;已經進行中嘅請求可能仍然使用之前嘅位址。

僅限託管 Tuist 伺服器上嘅 Enterprise 方案

喺託管嘅 Tuist 伺服器(https://tuist.dev)上,GitHub Enterprise Server 整合僅供 Enterprise 方案嘅組織使用。自託管嘅 Tuist 部署可以在任何方案上使用。

Pull/merge request 評論#

GitHub app 會發布一份 Tuist 運行報告,其中包括 PR 摘要,以及指向最新 預覽 或 測試 嘅連結:

隨著結果到來,Tuist 會更新一條評論。Gradle 構建會為每個根項目同請求嘅任務集單獨顯示;重新運行相同任務會替換該次調用嘅先前結果。完整嘅構建歷史記錄仍然可以喺 Tuist 上查看。

評論默認啟用,以保留現有整合嘅報告功能。要為項目關閉或重新開啟評論,請打開 Project Settings → Integrations 並切換 GitHub → Run report comments。每個項目都有自己嘅設置;儲存庫連線仍然喺組織設置中管理。

禁用評論不會禁用構建或測試上傳、GitHub Actions 工作摘要、儲存庫連線或其他 GitHub 整合功能。現有評論不會被刪除。

顯示 pull request 評論嘅圖片

要求

僅當你嘅 CI 運行係 已認證 時,才會發布評論。

Github_ref

如果你有一個自定義工作流程,唔係由 PR commit 觸發,而係例如由 GitHub 評論觸發,你可能需要確保 GITHUB_REF 變量設置為 refs/pull/<PR_NUMBER>/merge 或 refs/pull/<PR_NUMBER>/head。

你可以運行相關命令,例如 tuist share,並帶有前綴 GITHUB_REF 環境變量:GITHUB_REF="refs/pull/${{ github.event.issue.number }}/head" tuist share

GitHub Actions 工作摘要#

Tuist CLI 同 Gradle 插件會將測試同構建結果寫入 GitHub Actions 中嘅 工作摘要。摘要會連結到 Tuist 上嘅完整報告,那裡提供更豐富嘅見解,例如不穩定測試同 bundle 大小差異。

對於 Gradle,每個成功上傳嘅構建或測試報告都會附加自己嘅摘要,保留由 gradle/actions/setup-gradle 等工具編寫嘅其他內容。這需要包含工作摘要支持嘅插件版本;較舊嘅 Gradle 插件版本僅通過 GitHub App 嘅 PR 評論進行報告。工作摘要無需連接 GitHub App,禁用 Run report comments 亦不會影響佢哋。

當 GitHub Actions 摘要目標可用時,Gradle 會喺退出前等待上傳同摘要完成,即使啟咗 uploadInBackground。GitHub 會喺工作流步驟結束時捕獲摘要。

顯示 GitHub Actions 工作摘要中 Tuist 運行報告嘅圖片

這喺使用 合併隊列 時特別有用。合併隊列運行唔會附加到 pull request,因此不會發布評論,但工作摘要仍然會顯示結果。

要求

工作摘要需要成功上傳報告。喺託管嘅 Tuist 伺服器上,你嘅 CI 運行必須係 已認證。自託管實例喺啟用網絡可信報告發布時,亦可以接受無憑證報告。