Rust 建構洞察
Build Insights 幫你找出拖慢 Cargo 建構的原因,並在全隊受影響之前捕捉 regressions。你可以比較本機建構與 CI,查看建構時間變化,並檢查每次建構中編譯的 crates。
- 請依照 Rust 專案設定 連接你的專案並進行驗證。
回報你的建構#
透過 Tuist 執行你慣用的 Cargo 指令:
tuist cargo build --workspace
tuist cargo check --all-targets
tuist cargo +nightly build --features tracing
如果你使用 mise,設定 Cargo wrapper 以繼續使用一般的 cargo 指令。你的參數、工具鏈選擇、輸出和退出碼都保持不變。
找出拖慢建構的原因#
在儀表板的 Builds → Build Runs 中開啟一個建構。使用日期、環境和 Rust 版本篩選器來比較相似的建構。建構及其快取計數也可透過 tuist build cargo list 和 tuist build cargo show、GET /api/projects/{account_handle}/{project_handle}/cargo/builds,以及 list_cargo_builds 和 get_cargo_build MCP 工具 取得。
在 Overview 中,使用 Compiler jobs 找出緩慢的 crates。依 Duration 或 Started after(自 Cargo 指令啟動後的時間)排序,或依 crate 名稱或根原始檔搜尋。
每一列代表對一個 crate 的一次 rustc 呼叫,該 crate 可能包含多個原始檔。Crate root 標示其根原始檔;持續時間是整個編譯器工作的時間,而非僅該檔案。一個 crate 可能因不同 target 或設定而出現多次。編譯器訊息歸類於 Warnings 和 Errors。
跨建構追蹤 crates#
對於已加入逐步推出 crate 歷史記錄功能的專案,Builds → Crates 會顯示觀察到的 crates 及其編譯歷史。開啟一個 crate 以比較其在各次建構中記錄的持續時間和結果,然後追溯到其 Cargo 建構。相同的清單也可透過專案 API 中的 /cargo/crates 以及帶有 kind: cargo_crates 的共用 MCP 建構實體工具取得。
Crates 按其精確記錄的根路徑、名稱和類型分組。更改 checkout 路徑可能會分割歷史記錄;不會區分 profiles、features 和 target triples。這是觀察到的編譯器工作清單,並非你工作區中的每個 crate。已快取或最新的 crates 不會產生編譯樣本。
歸屬建構報告#
經過驗證的報告可識別個人憑證背後的個人。共用憑證不一定需要識別個人。可選擇將 TUIST_ACTOR_ID 設定為回報機器上的穩定不透明識別碼;預設為關閉,並顯示為未經驗證的聲明,從不用於授權。較舊的伺服器可能會忽略此聲明。切勿在其中放入密鑰。
解讀時間數據#
建構持續時間是整個 Cargo 指令所花的時間。編譯器工作可以平行執行,因此它們的持續時間總和不等於建構持續時間。
Cargo 只會編譯需要重新建構的 crates。已經最新的 crates 不會出現在編譯器列表中。使用 Tuist 的編譯快取時,還原的工作會出現在快取測量中,而非作為編譯器執行。
Tuist 不會單獨測量 build scripts 或顯示建構時間軸。大型建構會顯示前 500 個編譯器工作,如果記錄了更多工作則會顯示通知。
解讀快取測量#
tuist cargo 包含在 Tuist CLI 中實作的實驗性編譯快取。請參閱 Rust 快取指南 以了解設定、透過 Kura 進行遠端讀寫、支援的編譯以及疑難排解。
開啟專案側邊欄中的 Cargo Cache 以追蹤各次建構的快取命中率以及記錄的傳輸、延遲和吞吐量測量。依日期或環境篩選,切換每日趨勢和單次建構命中率,或開啟最近的建構以檢查其快取活動。沒有快取測量的建構仍顯示為不可用,而非計為零。
開啟建構的 Cache 標籤頁以查看任務命中、任務未命中、命中率,以及下載和上傳的字節數。當建構報告快取數據時,此標籤頁會出現。
- Cacheable Tasks 顯示哪些編譯器和 build-script 任務複用了快取輸出。搜尋或篩選任務,檢查快取讀/寫延遲,並展開列以查看其輸出。
- CAS Outputs 顯示 artifact 的下載和上傳,包括其大小、持續時間和吞吐量。圖表計算已完成的傳輸;已存在的 artifact 和失敗的嘗試仍保留在表中。
Hit 表示複用了快取輸出。Missed 表示任務改為進行編譯。命中不分本地和遠端;CAS Outputs 顯示記錄的 artifact 操作。
如果詳細記錄缺失或不完整,頁面會顯示通知。摘要仍涵蓋整個建構。估計避免的編譯器工作 並非節省的建筑耗時。
快取處於實驗階段,並在 Apple silicon Mac 上通過驗證。函式庫根據編譯器讀取的原始碼進行快取;build scripts、procedural macros、可執行檔和原生代碼僅在 Apple silicon Mac 上快取。快取鍵將 checkout 和工具鏈路徑替換為佔位符,因此同一台機器上不同路徑的 checkout 會複用它們。增量編譯正常進行。
執行測試的建構#
tuist cargo test 報告整個指令的持續時間,包括其測試。它還透過 Rust Test Insights 報告個別測試結果,包括 doctests。個別測試結果顯示在 Tests 下;指令持續時間顯示在建構洞察中。
其他編譯器工具#
Tuist 保留透過 RUSTC_WRAPPER、CARGO_BUILD_RUSTC_WRAPPER 或 Cargo 設定配置的現有編譯器 wrapper,並保持 RUSTC_WORKSPACE_WRAPPER 不變。預先存在的全域 wrapper 會停用 Tuist 的快取和編譯器觀察器:Tuist 無法確定該 wrapper 是否實際執行了 rustc。自訂工作區 wrapper 同樣可能導致報告中的編譯器工作較少。
Tuist 透過 rustup 尋找 Cargo。如果你使用自訂安裝,請將 TUIST_CARGO_EXECUTABLE 設定為其可執行檔路徑。透過直接工具鏈路徑呼叫 Cargo 會繞過 mise 的 wrapper。Cargo alias 無法取代如 build 等內建指令。
如果你使用 Cargo 的 nightly -C 選項,請先切換到工作區:Tuist 會轉發 -C 指令,但不會收集它們的建構計時。
疑難排解#
如果建構沒有出現在儀表板中,請啟用偵錯輸出以查看為何其報告未傳送:
TUIST_DEBUG=1 tuist cargo build --workspace
報告不會改變你的建構結果。