跳至內容

GitHub 整合

Git 儲存庫是絕大多數軟體專案的核心。我們與 GitHub 整合,讓 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 評論與套件大小檢查:

權限存取用途
中繼資料 (metadata)唯讀基本儲存庫中繼資料;GitHub 要求每個 App 都必須具備
拉取請求 (pull_requests)讀寫讀取拉取請求(包括其頭部提交 SHA),以及列出、張貼和更新 PR 評論
檢查 (checks)讀寫建立和更新檢查執行,包括套件大小的通過/失敗檢查

Tuist 使用 check_run webhook 事件來處理套件大小檢查動作。Manifest 流程會自動設定此訂閱。

若要在 github.com 上手動設定 App 並搭配自行託管的 Tuist 伺服器,請參閱 自行託管指南。

獨立的瀏覽器與 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 檢查。在設定期間、Tuist 取得 App 憑證之前,manifest 轉換端點必須可達。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 部署可在任何方案上使用此功能。

拉取/合併請求評論#

GitHub App 會張貼 Tuist 執行報告,其中包含 PR 摘要,並附上最新 預覽 或 測試 的連結:

Tuist 會在結果到達時更新一則評論。Gradle 建置會針對每個根專案與請求的工作集分別顯示;重新執行相同工作會取代該次呼叫的先前的結果。完整的建置歷史記錄仍可在 Tuist 上查看。

評論預設為啟用,以保留既有整合的報告功能。若要為專案關閉或重新開啟評論,請開啟 Project Settings → Integrations 並切換 GitHub → Run report comments。每個專案都有各自的設定;儲存庫連線仍在組織設定中管理。

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

顯示拉取請求評論的圖片

需求

只有在你的 CI 執行已 通過驗證 時,才會張貼評論。

Github_ref

如果你有一個自訂工作流程,不是由 PR 提交觸發,而是例如由 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 上的完整報告,提供更豐富的洞察,例如不穩定測試與套件大小差異。

對於 Gradle,每次成功上傳的建置或測試報告都會附加其自身的摘要,保留由 gradle/actions/setup-gradle 等工具寫入的其他內容。這需要包含工作摘要支援的外掛程式版本;較舊的 Gradle 外掛程式版本僅透過 GitHub App 的 PR 評論進行報告。工作摘要不需要連線 GitHub App,停用 Run report comments 也不會影響它們。

當 GitHub Actions 摘要目的地可用時,Gradle 會在結束前等待上傳與摘要完成,即使已啟用 uploadInBackground 亦然。GitHub 會在工作流程步驟結束時擷取摘要。

顯示 GitHub Actions 工作摘要中 Tuist 執行報告的圖片

這在使用 合併佇列 時特別有用。合併佇列執行並未附加至拉取請求,因此不會張貼評論,但工作摘要仍會呈現結果。

需求

工作摘要需要成功上傳報告。在託管的 Tuist 伺服器上,你的 CI 執行必須 通過驗證。自行託管的執行個體在啟用網路信任的報告發布時,也可以接受無需憑證的報告。