密封動作

目標和動力

在任何建構系統中定義建構動作時,請務必正確 並完整指定該動作的輸入和輸出內容 漸進式建構作業 (在對來源稍有變更之後進行部分重新建構) 必須 確認建構圖表中呈現的資訊皆正確無誤 辨識並執行重建作業如果這項資訊有誤或不完整 重新建構可能會產生錯誤結果,或導致完全不同的結果 乾淨的建構作業

只會讀取其宣告的輸入內容,且只會寫入其宣告內容的動作 宣告的輸出內容對建構系統而言是密封的。 今天我們沒有完全遺傳的架構 而是可以進行數十種動作 以及讀取/寫入不在宣告輸入/輸出中的檔案 這樣我們就不用在實際工作環境中完全仰賴漸進式重建。 必須要求我們執行完整簡潔的版本,速度會慢約 10 倍。

再者,這些非密封的動作通常表明自己有連貫性 工程師運作並浪費時間 正在嘗試排解問題

這項專案的目標是調查並修正所有非密封化的例項 建構動作

技術背景

熟悉 GN 和 BUILD.gn 檔案很重要,特別是 指定類型:

在許多情況下,您也需要瞭解 depfile 的運作方式:

如需更多重要資訊,請參閱本指南:

如何提供協助

選取工作

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

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

執行工作

重現問題

如果要瞭解動作無法密封的原因,就需要使用 動作追蹤工具這項工具會在追蹤時執行所有建構動作 然後將這些存取與宣告的 這些動作的輸入 / 輸出 / depfile

如要在本機重現問題,請先移除 hermetic_deps = false,然後 請按照下列方式設定建構作業:

fx set what --args=build_should_trace_actions=true

使用上述設定執行建構作業應會產生錯誤 可行的疑難排解資訊。

根據預設,CQ 會執行動作追蹤,因此您可以使用本 API 取得相同的 來解決連線問題

如果問題已提報,該錯誤應包含 錯誤訊息中的資訊如果沒有錯誤,請回報錯誤並 記錄您收集的資訊

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

修正問題

有幾個常見原因可能造成歷史上的問題。您可以在 本指南。 如果您遇到的問題未列於指南中,請考慮 改善指南內容

如果您可以移除 hermetic_deps = false,並仍成功建構 若是使用追蹤記錄或追蹤嘗試通過,就表示您的變更已可套用至 現場業務代表受過訓練 會提交 AI 客戶商機以供審查

完成工作

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

範例

贊助者

如有問題或想掌握最新狀態,請與我們聯絡: