密封動作

目標與激勵

在任何建構系統中定義建構動作時,請務必正確且完整地指定該動作的輸入和輸出內容。漸進式建構作業 (在來源小幅變更後進行部分重建) 需要這項資訊才能顯示在建構圖中且正確無誤,以便正確識別及執行重新建構作業。如果這項資訊不正確或不完整,則重建可能會產生錯誤的結果,或與完整清理的版本不同的結果。

只會從宣告的輸入內容讀取,並只寫入其宣告輸出內容的動作,在建構系統中是密封的。目前,我們沒有全面性的建構版本,而是擁有數十種操作和工具,可讀取/寫入不在宣告的輸入/輸出內容中的檔案。這樣我們就無法完全仰賴在實際工作環境中逐步進行漸進式重建,因而迫使我們執行完整的乾淨建構作業,速度可加快約 10 倍。

此外,這些非密封動作通常具有與建構系統中不一致的行為,工程師會難以設法解決,因而浪費時間嘗試排解問題。

這項專案的目標是調查及修正建構圖中非密封建構動作的所有執行個體。

技術背景

熟悉 GN 和 BUILD.gn 檔案非常重要,特別是下列目標類型:

在許多情況下,您也需要瞭解解壓縮檔案的運作方式:

以下是其他重要資訊:

如何提供協助

挑選工作

挑選任何標示為非密封的建構目標。如下所示:

action("foo") {
  ...
  # TODO(https://fxbug.dev/xxxxx): delete the line below and fix this
  hermetic_deps = false
}

執行工作

重現問題

為了瞭解動作不是密封的原因,您需要啟用動作追蹤工具來建構動作。這項工具會追蹤所有建構動作,同時追蹤檔案系統存取的內容,然後將這些存取與這些動作的宣告輸入 / 輸出 / 刪除檔案進行比較。

如要在本機環境中重現問題,請先移除 hermetic_deps = false,再按照下列方式設定建構:

fx set what --args=build_should_trace_actions=true

按照上述設定執行版本應會產生錯誤,並提供可採取行動的疑難排解資訊。

根據預設,CQ 會執行動作追蹤,因此您可以使用它取得相同的疑難排解資訊。

如果該錯誤已提交某個錯誤,則錯誤應包含該錯誤中的資訊。如果沒有錯誤,請建立一個錯誤,並記錄您收集到的資訊。

範例:https://fxbug.dev/42147316

修正問題

有幾個常見原因會造成密封問題。請參閱這份指南,瞭解其中一些使用方式。如果您遇到指南未涵蓋的問題,請考慮改善本指南。

如果您可以移除 hermetic_deps = false,但依然透過追蹤記錄或經過追蹤的試用工作成功在本機建構,則變更項目已準備就緒,可供審查。

完成工作

尋找 OWNERS 的審核者並合併變更。

範例

贊助商

提出問題或查看最新狀態: