推出破壞性變更的指南

回報問題 查看來源 Nightly · 8.4 · 8.3 · 8.2 · 8.1 · 8.0 · 7.6

我們勢必會對 Bazel 進行破壞性變更。我們必須變更設計,並修正無法正常運作的項目。不過,我們需要確保社群和 Bazel 生態系統能跟上腳步。為此,Bazel 專案採用了回溯相容政策。本文說明 Bazel 貢獻者如何根據這項政策,在 Bazel 中進行重大變更。

  1. 請遵守設計文件政策

  2. 提出 GitHub 問題。

  3. 實作變更。

  4. 更新標籤

  5. 翻轉不相容的旗標。

GitHub 問題

在 Bazel 存放區提出 GitHub 問題查看範例

建議您:

  • 標題開頭為旗標名稱 (旗標名稱開頭為 incompatible_)。

  • 新增標籤 incompatible-change

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

  • 說明包含遷移配方,向使用者說明如何更新程式碼。如果變更屬於機械式,請盡量附上遷移工具的連結。

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

如要使用遷移工具,請考慮為 Buildifier 貢獻心力。這項工具可自動修正 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 團隊更輕鬆。

  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 問題就會關閉。