Bzlmod phát hiện các phần phụ thuộc bằng cách yêu cầu thông tin về các phần phụ thuộc đó từ tổ chức quản lý tên miền Bazel: cơ sở dữ liệu về các mô-đun Bazel. Hiện tại, Bzlmod chỉ hỗ trợ hệ thống quản lý chỉ mục – thư mục cục bộ hoặc máy chủ HTTP tĩnh 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áy chủ HTTP tĩnh chứa thông tin về danh sách các mô-đun – bao gồm cả trang chủ, trình bảo trì, tệp MODULE.bazel
của từng phiên bản và cách tìm nạp nguồn của từng phiên bản. Đáng chú ý là công cụ này không cần phân phát chính các tệp lưu trữ nguồn.
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 về sổ đăng ký như:mirrors
: chỉ định danh sách bản sao để sử dụng cho kho lưu trữ nguồn. URL được đồng bộ hoá hai chiều là sự nối của chính bản sao đó và URL nguồn của mô-đun do tệpsource.json
chỉ định 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
: Thư mục chứa một thư mục con cho mỗi mô-đun trong quy trình đăng ký này/modules/$MODULE
: 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, với các trường sau:homepage
: URL trang chủ của 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 trình duy trì mô-đun trong sổ đăng ký. Xin lưu ý rằng đây không nhất thiết là 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 đồ về các phiên bản bị giật của mô-đun này. Khoá phải là phiên bản để kéo giật và giá trị phải là nội dung mô tả lý do phiên bản bị giật, lý tưởng nhất là chứa một đườ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à "lưu trữ", đại diện cho kho lưu trữ
http_archive
, với các trường sau đây:url
: URL của kho lưu trữ nguồnintegrity
: Giá trị tổng kiểm Tính toàn vẹn của tài nguyên phụ của kho lưu trữstrip_prefix
: Một tiền tố thư mục cần loại bỏ khi trích xuất kho lưu trữ nguồnpatches
: Bản đồ chứa các tệp bản vá để áp dụng cho kho lưu trữ đã trích xuất. Các tệp bản 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 các tệp bản vápatch_strip
: Tương tự như đối số--strip
của Unixpatch
.archive_type
: Loại lưu trữ của tệp được tải xuống (Tương tự nhưtype
trênhttp_archive
). Theo mặc định, loại 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õ ràng một trong các loạ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 để sử dụng kho lưu trữ git, với các trường sau:
type
:git_repository
- Các trường sau đây theo 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 đường dẫn cục bộ, đại diện cho 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à đường dẫn tuyệt đối, đường dẫn đó 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ì hệ thống 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à được--registry=file://<registry_path>
sử dụng. Nếu không, Bazel sẽ gửi ra lỗi
- Nếu
- Loại mặc định là "lưu trữ", đại diện cho kho lưu trữ
patches/
: Một thư mục không bắt buộc chứa các tệp bản vá, chỉ được dùng khisource.json
có loại "lưu trữ"
Hệ thống đăng ký trung tâm Bazel
Cơ quan đăng ký Trung tâm Bazel (BCR) tại https://bcr.bazel.build/ là một cơ quan đă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 qua nội dung của tệp 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à những người đóng góp được hoan nghênh gửi yêu cầu kéo. Xem nguyên tắc về nội dung đóng góp BCR.
Ngoài việc tuân theo định dạng của sổ đăng ký chỉ mục thông thường, BCR cần có tệp presubmit.yml
cho từng 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ể sử dụng để kiểm tra tính hợp lệ của phiên bản mô-đun này. Quy trình CI của BCR cũng sử dụng quy trình này để đảm bảo khả năng tương tác giữa các mô-đun.
Chọn tổ chức quản lý tên miền
Bạn có thể sử dụng cờ Bazel --registry
có thể lặp lại để chỉ định danh sách hệ thống tên miền cần yêu cầu mô-đun, nhờ đó, bạn có thể thiết lập dự án của mình để tìm nạp các phần phụ thuộc từ sổ đăng ký nội bộ hoặc bên thứ ba. Các tổ chức quản lý tên miền cũ hơn được ưu tiên. Để thuận tiện, bạn có thể đặt danh sách 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 phát triển my-org
, bạn cần đặ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 sử 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
.