Bazel 註冊資料庫

回報問題 查看原始碼

Bzlmod 會向 Bazel 登錄檔 (即 Bazel 模組的資料庫) 要求資訊,藉此發掘依附元件。目前 Bzlmod 僅支援索引註冊資料庫,也就是遵循特定格式的本機目錄或靜態 HTTP 伺服器。

索引登錄

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

索引登錄必須採用以下格式:

  • /bazel_registry.json:JSON 檔案,內含註冊資料庫的中繼資料,例如:
    • mirrors:指定來源封存使用的鏡像清單。鏡像網址會與鏡像本身的串連,以及 source.json 檔案所指定模組的來源網址,且會受限於通訊協定。舉例來說,如果模組的來源網址為 https://foo.com/bar/baz,而 mirrors 包含 ["https://mirror1.com/", "https://example.com/mirror2/"],則 Bazel 會依序嘗試網址 https://mirror1.com/foo.com/bar/bazhttps://example.com/mirror2/foo.com/bar/baz,最後再到原始來源網址 https://foo.com/bar/baz
    • module_base_path:在 source.json 檔案中,為具有 local_repository 類型的模組指定基本路徑
  • /modules:這個目錄包含此登錄檔中每個模組的子目錄
  • /modules/$MODULE:這個目錄包含此模組每個版本的子目錄,以及:
    • metadata.json:包含模組相關資訊的 JSON 檔案,包含下列欄位:
      • homepage:專案的首頁網址
      • maintainers:JSON 物件清單,每個物件都對應註冊資料庫中模組維護人員的資訊。請注意,這不等於專案的作者
      • versions:可以在這個登錄檔中找到這個模組的所有版本清單
      • yanked_versions:模組的「劃分」版本對應。金鑰應以 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"
      • 您可以變更類型以使用 Git 存放區,其中包含下列欄位:
        • typegit_repository
        • 下列欄位的說明如下:https://bazel.build/rules/lib/repo/git:
          • remote
          • commit
          • shallow_since
          • tag
          • init_submodules
          • verbose
          • strip_prefix
      • 您可將類型變更為使用代表 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 將其加回。