推出破壞性變更的指南

回報問題 查看來源

我們要對 Bazel 做出破壞性變更是不可避免的。我們必須變更設計,並修正效果不彰的問題。然而,我們必須確保社群和 Bazel 生態系統都能參與其中。為此,Bazel 專案採用了回溯相容性政策。本文件說明 Bazel 協作者在 Bazel 中做出破壞性變更的程序,以遵守這項政策。

  1. 遵守設計文件政策

  2. 回報 GitHub 問題。

  3. 執行變更。

  4. 更新標籤

  5. 翻轉不相容的旗幟。

GitHub 問題

在 Bazel 存放區中回報 GitHub 問題查看範例

以下是建議做法:

  • 標題會以標記名稱開頭 (標記名稱的開頭為 incompatible_)。

  • 您可以新增 incompatible-change 標籤,

  • 說明包含變更的說明以及相關設計文件的連結。

  • 說明中包含遷移方案,可讓使用者瞭解如何更新程式碼。在理想情況下,如果變更是機械,請附上遷移工具的連結。

  • 說明中包括未遷移使用者會收到的錯誤訊息示例。如此一來,搜尋引擎就能更容易找到 GitHub 問題。請確保錯誤訊息有幫助且可做為行動依據。如果可以,錯誤訊息應包含不相容標記的名稱。

建議您對遷移工具貢獻一己之力,對建構工具貢獻一己之力。可對 BUILDWORKSPACE.bzl 檔案套用自動修正功能。此裝置也可能會回報警告。

導入作業

在 Bazel 中建立新標記。預設值必須是 false。說明文字應包含 GitHub 問題的網址。標記名稱以 incompatible_ 開頭,因此需要中繼資料標記:

      metadataTags = {
        OptionMetadataTag.INCOMPATIBLE_CHANGE,
      },

在修訂版本說明中新增標記的簡短摘要。另以下列格式新增 RELNOTES:RELNOTES: --incompatible_name_of_flag has been added. See #xyz for details

修訂版本也應更新相關說明文件,以防有程式碼與文件不一致的修訂期間。由於說明文件經過版本管理,但文件的變更不會意外預先發布。

標籤

合併修訂版本,並準備好採用不相容的變更之後,請將 migration-ready 標籤新增至 GitHub 問題。

如果標記有問題,且使用者應該尚未遷移,請移除標記 migration-ready

如果你打算在下一個主要版本中翻轉旗標,請在問題中加入「breaking-change-X.0」標籤。

更新存放區

Bazel CI 會在 Bazel@HEAD + Downstream 中測試重要專案的清單。其中大多數通常是其他 Bazel 專案的依附元件,因此請務必遷移這些專案,以解除封鎖更廣泛的社群的遷移作業。

如要監控這些專案的遷移狀態,您可以使用 bazelisk-plus-incompatible-flags 管道。如要瞭解此管道的運作方式,請參閱這個頁面

遷移下游管道中的專案「不」完全負責不相容的變更作者。不過,您可以加快遷移速度,讓 Bazel 使用者和 Bazel Green Team 作業更輕鬆。

  1. 檔案 GitHub 問題,以通知因不相容的變更而中斷的下游專案擁有者。
  2. 傳送 PR 以修正下游專案。
  3. 如需遷移作業相關協助,請與 Bazel 社群聯絡 (例如 Bazel 規則作者 SIG)。

翻轉旗幟

將標記的預設值轉換為 true 之前,請先確認:

  • 系統會遷移生態系統中的核心存放區。

    bazelisk-plus-incompatible-flags 管道中,旗標應顯示在 The following flags didn't break any passing Bazel team owned/co-owned projects 下方。

  • 使用者的疑慮和問題已解決。

如果標記可以在 Bazel 中翻轉,但遭 Google 內部遷移遭到封鎖,請考慮在內部 blazerc 檔案中將標記值設為 false,以解除封鎖標記翻轉。如此一來,我們就能確保 Bazel 使用者在預設情況下優先仰賴新行為。

將標幟預設值變更為 true 時,請:

  • 在修訂版本說明中使用 RELNOTES[INC],並採用下列格式:RELNOTES[INC]: --incompatible_name_of_flag is flipped to true. See #xyz for details 您可以在修訂版本說明的其餘部分中加入額外資訊。
  • 在說明中使用 Fixes #xyz,以便在合併修訂版本時關閉 GitHub 問題。
  • 視需要查看並更新說明文件。
  • 提交新問題「#abc」,追蹤標記的移除狀態。

移除標記

透過 HEAD 翻轉標記後,系統最終應該會將其從 Bazel 中移除。 如果您打算移除不相容的標記:

  • 如有重大不相容的變更,請考慮讓使用者有更多時間完成遷移。在理想情況下,標記應可在至少一個主要版本中提供。
  • 針對移除標記的修訂版本,請在說明中使用 Fixes #abc,以便在合併修訂版本時關閉 GitHub 問題。