Bazel 註冊資料庫

回報問題 查看來源

Bzlmod 會從 Bazel 註冊資料庫 (Bazel 模組的資料庫) 中要求其資訊,以找出依附元件。目前 Bzlmod 僅支援「索引註冊資料庫」,也就是採用特定格式的本機目錄或靜態 HTTP 伺服器。

索引註冊資料庫

索引註冊資料庫是本機目錄或靜態 HTTP 伺服器,包含模組清單的相關資訊,包括模組的首頁、維護器、每個版本的 MODULE.bazel 檔案,以及如何擷取每個版本的來源。值得注意的是,「不需要」提供來源封存。

索引註冊資料庫必須採用以下格式:

  • /bazel_registry.json:含有登錄檔中繼資料的 JSON 檔案,例如:
    • mirrors:指定用於來源封存的鏡像清單
    • module_base_path:在 source.json 檔案中指定 local_repository 類型的模組基本路徑
  • /modules:包含此註冊資料庫中每個模組的子目錄的目錄
  • /modules/$MODULE:包含此模組各個版本子目錄的目錄,以及:
    • metadata.json:包含模組相關資訊的 JSON 檔案,包含下列欄位:
      • homepage:專案的首頁網址
      • maintainers:JSON 物件清單,每個物件都會與登錄檔中模組維護者的資訊對應。請注意,此名稱不一定與專案的作者相同
      • versions:可在這個登錄檔中找到此模組的所有版本清單
      • yanked_versions:此模組的「yanked」版本對應。金鑰應為 yank 版本,而值應說明版本為何使用「受浪費」。最好包含查看詳細資訊的連結
  • /modules/$MODULE/$VERSION:包含下列檔案的目錄:
    • MODULE.bazel:此模組版本的 MODULE.bazel 檔案
    • source.json:JSON 檔案,內含如何擷取此模組版本來源的資訊
      • 預設類型為「Archive」,代表 http_archive 存放區,包含下列欄位:
        • url:來源封存網址
        • integrity:封存的子資源完整性檢查碼
        • strip_prefix:擷取來源封存時要去除的目錄前置字串
        • patches:此地圖包含要套用至擷取的封存檔的修補檔案。修補程式檔案位於 /modules/$MODULE/$VERSION/patches 目錄下。這些索引鍵是修補檔案名稱,而值則是修補檔案的完整性檢查碼
        • patch_strip:與 Unix patch--strip 引數相同。
        • archive_type:下載檔案的封存類型 (與 http_archive 上的 type 相同)。根據預設,封存類型取決於網址的副檔名。如果檔案沒有副檔名,您可以明確指定下列其中一項:"zip""jar""war""aar""tar""tar.gz""tgz""tar.xz""txz""tar.zst""tzst"tar.bz2"ar""deb"
      • 透過以下欄位,您可以將類型變更為使用本機路徑 (代表 local_repository 存放區):
        • typelocal_path
        • path:存放區的本機路徑,計算方式如下:
          • 如果 path 是絕對路徑,則保持不變
          • 如果 path 是相對路徑,且 module_base_path 是絕對路徑,則解析為 <module_base_path>/<path>
          • 如果 pathmodule_base_path 都是相對路徑,則會解析為 <registry_path>/<module_base_path>/<path>。註冊資料庫必須在本機託管,並由 --registry=file://<registry_path> 使用。否則 Bazel 就會擲回錯誤
    • patches/:包含修補檔案的選用目錄,只有在 source.json 類型為「封存」時才能使用

Bazel Central Registry

位於 https://bcr.bazel.build/ 的 Bazel Central Registry (BCR) 是索引註冊資料庫,其中的內容由 GitHub 存放區 bazelbuild/bazel-central-registry 提供支援。您可以使用網路前端瀏覽 https://registry.bazel.build/

Bazel 社群會維護 BCR,而協作者歡迎提交提取要求。請參閱 BCR 貢獻指南

除了遵循一般索引註冊資料庫的格式外,BCR 也需要每個模組版本 (/modules/$MODULE/$VERSION/presubmit.yml) 的 presubmit.yml 檔案。這個檔案指定一些必要的建構和測試目標,可用來檢查這個模組版本的有效性。BCR 的 CI 管道也會使用這項資訊確保模組之間的互通性。

選取登錄檔

可重複的 Bazel 標記 --registry 可用來指定要從哪個註冊資料庫要求模組,因此您可以設定專案,從第三方或內部登錄檔擷取依附元件。以較早的註冊資料庫為優先為了方便起見,您可以在專案的 .bazelrc 檔案中放入 --registry 標記清單。

如果您的註冊資料庫是由 GitHub 代管 (例如 bazelbuild/bazel-central-registry 的分支),則 --registry 值需要 raw.githubusercontent.com 底下的原始 GitHub 位址。例如,在 my-org 分支的 main 分支中,您需要設定 --registry=https://raw.githubusercontent.com/my-org/bazel-central-registry/main/

根據預設,使用 --registry 標記會停止使用 Bazel Central Registry,但您可以新增 --registry=https://bcr.bazel.build 將其加回。