Bzlmod phát hiện các phần phụ thuộc bằng cách yêu cầu thông tin của các phần phụ thuộc đó từ sổ đăng ký Bazel: cơ sở dữ liệu của các mô-đun Bazel. Hiện tại, Bzlmod chỉ hỗ trợ các sổ đăng ký chỉ mục – các thư mục cục bộ hoặc máy chủ HTTP tĩnh tuân theo một định dạng cụ thể.
Sổ đăng ký chỉ mục
Sổ đăng ký chỉ mục là một thư mục cục bộ hoặc một máy chủ HTTP tĩnh chứa thông tin về danh sách các mô-đun, bao gồm cả trang chủ, người duy trì, tệp MODULE.bazel
của mỗi phiên bản và cách tìm nạp nguồn của mỗi phiên bản. Điều đáng chú ý là nó không cần tự phân phát các tệp lưu trữ nguồn.
Một sổ đăng ký chỉ mục phải tuân theo định dạng dưới đây:
/bazel_registry.json
: Tệp JSON chứa siêu dữ liệu cho sổ đăng ký, chẳng hạn như:mirrors
: chỉ định danh sách các bản sao để dùng cho kho lưu trữ nguồn. URL phản chiếu là một chuỗi kết hợp của chính bản phản chiếu và URL nguồn của mô-đun do tệpsource.json
của mô-đun chỉ định mà không có giao thức. Ví dụ: nếu URL nguồn của một mô-đun làhttps://foo.com/bar/baz
vàmirrors
chứa["https://mirror1.com/", "https://example.com/mirror2/"]
, thì các URL mà Bazel sẽ thử theo thứ tự làhttps://mirror1.com/foo.com/bar/baz
,https://example.com/mirror2/foo.com/bar/baz
và cuối cùng là chính URL nguồn ban đầuhttps://foo.com/bar/baz
.module_base_path
: chỉ định đường dẫn cơ sở cho các mô-đun có loạilocal_repository
trong tệpsource.json
/modules
: Một thư mục chứa thư mục con cho từng mô-đun trong sổ đăng ký này/modules/$MODULE
: Một thư mục chứa một thư mục con cho từng phiên bản của mô-đun này, cũng như:metadata.json
: Tệp JSON chứa thông tin về mô-đun, có các trường sau:homepage
: URL của trang chủ dự ánmaintainers
: Danh sách các đối tượng JSON, mỗi đối tượng tương ứng với thông tin của một người duy trì mô-đun trong sổ đăng ký. Xin lưu ý rằng điều này không nhất thiết phải giống với tác giả của dự ánversions
: Danh sách tất cả các phiên bản của mô-đun này có trong sổ đăng ký nàyyanked_versions
: Bản đồ của các phiên bản bị rút lại của mô-đun này. Khoá phải là các phiên bản cần rút lại và giá trị phải là nội dung mô tả lý do rút lại phiên bản, tốt nhất là có chứa đường liên kết đến thông tin khác
/modules/$MODULE/$VERSION
: Một thư mục chứa các tệp sau:MODULE.bazel
: TệpMODULE.bazel
của phiên bản mô-đun nàysource.json
: Tệp JSON chứa thông tin về cách tìm nạp nguồn của phiên bản mô-đun này- Loại mặc định là "archive", biểu thị một kho lưu trữ
http_archive
, với các trường sau:url
: URL của kho lưu trữ nguồnmirror_urls
: Một danh sách chuỗi, URL phản chiếu của kho lưu trữ nguồn. Các URL này sẽ được thử theo thứ tự sauurl
dưới dạng bản sao lưu.integrity
: Tổng kiểm toàn vẹn của tài nguyên phụ của kho lưu trữstrip_prefix
: Tiền tố thư mục cần loại bỏ khi trích xuất tệp lưu trữ nguồnpatches
: Bản đồ chứa các tệp vá để áp dụng cho kho lưu trữ đã trích xuất. Các tệp vá nằm trong thư mục/modules/$MODULE/$VERSION/patches
. Khoá là tên tệp bản vá và giá trị là tổng kiểm tra tính toàn vẹn của tệp bản vápatch_strip
: Tương tự như đối số--strip
củapatch
Unix.archive_type
: Loại tệp lưu trữ của tệp đã tải xuống (Giống nhưtype
trênhttp_archive
). Theo mặc định, loại tệp lưu trữ được xác định từ đuôi tệp của URL. Nếu tệp không có đuôi, bạn có thể chỉ định rõ một trong các đuôi sau:"zip"
,"jar"
,"war"
,"aar"
,"tar"
,"tar.gz"
,"tgz"
,"tar.xz"
,"txz"
,"tar.zst"
,"tzst"
,tar.bz2
,"ar"
hoặc"deb"
.
- Bạn có thể thay đổi loại này để sử dụng một kho lưu trữ git, với các trường sau:
type
:git_repository
- Các trường sau đây như mô tả tại https://bazel.build/rules/lib/repo/git:
remote
commit
shallow_since
tag
init_submodules
verbose
strip_prefix
- Bạn có thể thay đổi loại này để sử dụng một đường dẫn cục bộ, đại diện cho một kho lưu trữ
local_repository
, với các trường sau:type
:local_path
path
: Đường dẫn cục bộ đến kho lưu trữ, được tính như sau:- Nếu
path
là một đường dẫn tuyệt đối, thì đường dẫn này sẽ giữ nguyên - Nếu
path
là đường dẫn tương đối vàmodule_base_path
là đường dẫn tuyệt đối, thì đường dẫn này sẽ phân giải thành<module_base_path>/<path>
- Nếu
path
vàmodule_base_path
đều là đường dẫn tương đối, thì đường dẫn này sẽ phân giải thành<registry_path>/<module_base_path>/<path>
. Sổ đăng ký phải được lưu trữ cục bộ và do--registry=file://<registry_path>
sử dụng. Nếu không, Bazel sẽ báo lỗi
- Nếu
- Loại mặc định là "archive", biểu thị một kho lưu trữ
patches/
: Thư mục không bắt buộc chứa các tệp vá, chỉ được dùng khisource.json
có loại "lưu trữ"
Sổ đăng ký trung tâm Bazel
Bazel Central Registry (BCR) tại https://bcr.bazel.build/ là một sổ đăng ký chỉ mục có nội dung được hỗ trợ bởi kho lưu trữ GitHub bazelbuild/bazel-central-registry
.
Bạn có thể duyệt xem nội dung của kho lưu trữ này bằng giao diện người dùng web tại https://registry.bazel.build/.
Cộng đồng Bazel duy trì BCR và các cộng tác viên có thể gửi yêu cầu kéo. Xem các nguyên tắc đóng góp cho BCR.
Ngoài việc tuân theo định dạng của một sổ đăng ký chỉ mục thông thường, BCR còn yêu cầu một tệp presubmit.yml
cho mỗi phiên bản mô-đun (/modules/$MODULE/$VERSION/presubmit.yml
). Tệp này chỉ định một số mục tiêu kiểm thử và bản dựng thiết yếu mà bạn có thể dùng để kiểm tra tính hợp lệ của phiên bản mô-đun này. Các quy trình CI của BCR cũng sử dụng điều này để đảm bảo khả năng tương tác giữa các mô-đun.
Chọn sổ đăng ký
Bạn có thể dùng cờ Bazel có thể lặp lại --registry
để chỉ định danh sách các sổ đăng ký cần yêu cầu mô-đun, nhờ đó, bạn có thể thiết lập dự án để tìm nạp các phần phụ thuộc từ sổ đăng ký nội bộ hoặc của bên thứ ba. Các sổ đăng ký trước đó sẽ được ưu tiên. Để thuận tiện, bạn có thể đặt danh sách các cờ --registry
trong tệp .bazelrc
của dự án.
Nếu sổ đăng ký của bạn được lưu trữ trên GitHub (ví dụ: dưới dạng một nhánh của bazelbuild/bazel-central-registry
), thì giá trị --registry
của bạn cần có một địa chỉ GitHub thô trong raw.githubusercontent.com
. Ví dụ: trên nhánh main
của nhánh rẽ my-org
, bạn sẽ đặt --registry=https://raw.githubusercontent.com/my-org/bazel-central-registry/main/
.
Việc sử dụng cờ --registry
sẽ ngăn Bazel Central Registry được dùng theo mặc định, nhưng bạn có thể thêm lại bằng cách thêm --registry=https://bcr.bazel.build
.