Bzlmod khám phá 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ừ nhật ký Bazel: cơ sở dữ liệu của các mô-đun Bazel. Bazel chỉ hỗ trợ một loại đăng ký – đăng ký 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ể.
Chỉ mục đăng ký
Cấu phần đă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ủ, 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à tệp này không cần tự phân phát bản lưu trữ nguồn.
Cấu hình đăng ký chỉ mục phải có định dạng sau:
/bazel_registry.json
: Tệp JSON không bắt buộc chứa siêu dữ liệu cho sổ đăng ký./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 có tên là$MODULE
, cũng như tệpmetadata.json
chứa siêu dữ liệu cho mô-đun này./modules/$MODULE/$VERSION
: Thư mục chứa các tệp sau:MODULE.bazel
: TệpMODULE.bazel
của phiên bản mô-đun này. Xin lưu ý rằng đây là tệpMODULE.bazel
được đọc trong quá trình phân giải phần phụ thuộc bên ngoài của Bazel, không phải tệp từ bản lưu trữ nguồn (trừ phi có cơ chế ghi đè không phải sổ đăng ký).source.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àypatches/
: 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ữ"overlay/
: Thư mục không bắt buộc chứa các tệp lớp phủ, chỉ được dùng khisource.json
có loại "tài liệu lưu trữ"
bazel_registry.json
bazel_registry.json
là một tệp không bắt buộc chỉ định siêu dữ liệu áp dụng cho toàn bộ sổ đăng ký. Tệp này có thể chứa các trường sau:
mirrors
: một mảng chuỗi, chỉ định danh sách các bản sao phản chiếu để sử dụng cho các bản lưu trữ nguồn.- URL được 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ệp
source.json
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
.
- URL được 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ệp
module_base_path
: một chuỗi, chỉ định đường dẫn cơ sở cho các mô-đun có loạilocal_path
trong tệpsource.json
metadata.json
metadata.json
là một tệp JSON không bắt buộc chứa thông tin về mô-đun, với các trường sau:
versions
: Một mảng chuỗi, mỗi chuỗi biểu thị một phiên bản của mô-đun có trong sổ đăng ký này. Mảng này phải khớp với các phần tử con của thư mục mô-đun.yanked_versions
: Một đối tượng JSON chỉ định các phiên bản bị rút của mô-đun này. Khoá phải là các phiên bản cần rút và giá trị phải là nội dung mô tả lý do rút phiên bản, tốt nhất là chứa đường liên kết đến thông tin khác.
Xin lưu ý rằng BCR yêu cầu thêm thông tin trong tệp metadata.json
.
source.json
source.json
là tệp JSON bắt buộc chứa thông tin về cách tìm nạp một phiên bản cụ thể của mô-đun. Giản đồ của tệp này phụ thuộc vào trường type
, mặc định là archive
.
- Nếu
type
làarchive
(mặc định), thì phiên bản mô-đun này được hỗ trợ bằng quy tắc kho lưu trữhttp_archive
; phiên bản này được tìm nạp bằng cách tải tệp lưu trữ xuống từ một URL nhất định và trích xuất nội dung của tệp lưu trữ đó. Phương thức này hỗ trợ các trường sau:url
: Một chuỗi, URL của bản lưu trữ nguồnintegrity
: Một chuỗi, tổng kiểm Tính toàn vẹn của tài nguyên phụ của tệp lưu trữstrip_prefix
: Một chuỗi, tiền tố thư mục cần xoá khi trích xuất bản lưu trữ nguồnoverlay
: Một đối tượng JSON chứa các tệp lớp phủ để xếp chồng lên trên tệp lưu trữ đã trích xuất. Các tệp bản vá nằm trong thư mục/modules/$MODULE/$VERSION/overlay
. Khoá là tên tệp lớp phủ và giá trị là tổng kiểm tính toàn vẹn của các tệp lớp phủ. Các lớp phủ được áp dụng trước các tệp bản vá.patches
: Một đối tượng JSON chứa các tệp bản vá để áp dụng cho tệp 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 tính toàn vẹn của các tệp bản vá. Các bản vá được áp dụng sau các tệp lớp phủ.patch_strip
: Một số; giống với đối số--strip
của Unixpatch
.archive_type
: Chuỗi, loại tệp lưu trữ của tệp đã tải xuống (Tương tự nhưtype
trênhttp_archive
).
- Nếu
type
làgit_repository
, thì phiên bản mô-đun này được hỗ trợ bằng quy tắc kho lưu trữgit_repository
; phiên bản này được tìm nạp bằng cách nhân bản kho lưu trữ Git.- Các trường sau đây được hỗ trợ và được chuyển tiếp trực tiếp đến quy tắc kho lưu trữ
git_repository
cơ bản:remote
,commit
,shallow_since
,tag
,init_submodules
,verbose
vàstrip_prefix
.
- Các trường sau đây được hỗ trợ và được chuyển tiếp trực tiếp đến quy tắc kho lưu trữ
- Nếu
type
làlocal_path
, thì phiên bản mô-đun này được hỗ trợ theo quy tắc kho lưu trữlocal_repository
; phiên bản này được liên kết tượng trưng đến một thư mục trên ổ cục bộ. Tệp này hỗ trợ trường sau: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>
. Cơ 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ẽ gửi một lỗi
- Nếu
Cấu phần đăng ký trung tâm Bazel
Cơ sở đăng ký trung tâm Bazel (BCR) tại https://bcr.bazel.build/ là một cơ sở đăng ký chỉ mục có nội dung được kho lưu trữ GitHub bazelbuild/bazel-central-registry
hỗ trợ. Bạn có thể duyệt qua 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à hoan nghênh những người đóng góp gửi yêu cầu kéo. Xem nguyên tắc đóng góp nội dung cho BCR.
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 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 bản dựng và kiểm thử 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 đ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ể sử dụng cờ Bazel lặp lại --registry
để chỉ định danh sách đăng ký yêu cầu các 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ừ một bên thứ ba hoặc sổ đăng ký nội bộ. 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ờ --registry
vào 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ó địa chỉ GitHub thô trong raw.githubusercontent.com
. Ví dụ: trên nhánh main
của nhánh 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 việc sử dụng Cấu phần đăng ký trung tâm Bazel theo mặc định, nhưng bạn có thể thêm lại cờ này bằng cách thêm --registry=https://bcr.bazel.build
.