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ợ sổ đăng ký chỉ mụ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 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. Đáng chú ý là sổ đăng ký này không cần phân phát chính kho lưu trữ nguồn.
Sổ đăng ký chỉ mục phải tuân theo định dạng bên dưới:
/bazel_registry.json: Tệp JSON chứa siêu dữ liệu cho sổ đăng ký như:mirrors: chỉ định danh sách các bản sao để sử dụng cho kho lưu trữ nguồn. URL được sao chép là sự kết hợp của chính bản sao và URL nguồn của mô-đun do tệpsource.jsoncủ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/bazvàmirrorschứ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/bazvà 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_repositorytrong tệpsource.json
/modules: Thư mục chứa một thư mục con cho mỗi mô-đun trong sổ đăng ký này/modules/$MODULE: Thư mục chứa một thư mục con cho mỗi 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 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 người duy trì mô-đun trong sổ đăng ký. Xin lưu ý rằng danh sách 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 sẽ được tìm thấy trong sổ đăng ký nàyyanked_versions: Bản đồ các phiên bản đã 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 phiên bản bị rút lại, lý tưởng nhất là chứa một đường liên kết đến thông tin khác
/modules/$MODULE/$VERSION: Thư mục chứa các tệp sau:MODULE.bazel: TệpMODULE.bazelcủ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", đại diện cho kho lưu trữ
http_archive, với các trường sau:url: URL của kho lưu trữ nguồnmirror_urls: Danh sách chuỗi, URL bản sao của kho lưu trữ nguồn. Các URL được thử theo thứ tự sauurldưới dạng bản sao lưu.integrity: Tổng kiểm tra tính 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 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: Giống như đối số--stripcủa Unixpatch.archive_type: Loại kho lưu trữ của tệp đã tải xuống (Giống nhưtypetrênhttp_archive). Theo mặc định, loại kho 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 những đ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 để sử dụng 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:
remotecommitshallow_sincetaginit_submodulesverbosestrip_prefix
- Bạn có thể thay đổi loại để 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_pathpath: Đường dẫn cục bộ đến kho lưu trữ, được tính như sau:- Nếu
pathlà đường dẫn tuyệt đối, thì đường dẫn đó vẫn giữ nguyên - Nếu
pathlà đường dẫn tương đối vàmodule_base_pathlà đường dẫn tuyệt đối, thì đường dẫn đó sẽ phân giải thành<module_base_path>/<path> - Nếu
pathvàmodule_base_pathđều là đường dẫn tương đối, thì đường dẫn đó 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 sử dụng bằng--registry=file://<registry_path>. Nếu không, Bazel sẽ đưa ra lỗi
- Nếu
- Loại mặc định là "archive", đại diện cho kho lưu trữ
patches/: Thư mục không bắt buộc chứa các tệp bản vá, chỉ được sử dụng khisource.jsoncó loại "archive"
Sổ đăng ký trung tâm Bazel
Sổ đăng ký trung tâm Bazel (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 sổ đăng ký 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à người đóng góp có thể gửi yêu cầu kéo. Xem hướng dẫn đóng góp cho BCR guidelines.
Ngoài việc tuân theo định dạng của sổ đăng ký chỉ mục thông thường, BCR yêu cầu
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 vài 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 tệp 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ể sử 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 nhánh của bazelbuild/bazel-central-registry), thì giá trị --registry cần có địa chỉ GitHub thô trong raw.githubusercontent.com. Ví dụ: trên main
nhánh của my-org nhánh, 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 không cho Sổ đăng ký trung tâm Bazel được 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.