Tổ chức quản lý tên miền

Bazel 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. Bazel chỉ hỗ trợ một loại sổ đăng ký – 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.

Sổ đă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: Một thư mục chứa thư mục con cho từng phiên bản của mô-đun có tên là $MODULE, cũng như tệp metadata.json chứa siêu dữ liệu cho mô-đun này.
  • /modules/$MODULE/$VERSION: Một thư mục chứa các tệp sau:
    • MODULE.bazel: Tệp MODULE.bazel của phiên bản mô-đun này. Xin lưu ý rằng đây là tệp MODULE.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 trong kho lưu trữ nguồn (trừ phi có thành phần ghi đè không đăng ký). Ngoài ra, bạn nên dùng tệp này để đặt phiên bản của bản phát hành và tránh làm như vậy trong tệp lưu trữ nguồn MODULE.bazel. Để tìm hiểu thêm về việc tạo phiên bản mô-đun, hãy xem phần Câu hỏi thường gặp.
    • 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ày
    • patches/: Thư mục không bắt buộc chứa các tệp bản vá, chỉ được dùng khi source.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 khi source.json có loại "archive"

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 gồm các chuỗi, 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ệp source.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/bazmirrors 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 đầu https://foo.com/bar/baz.
  • module_base_path: một chuỗi, chỉ định đường dẫn cơ sở cho các mô-đun có loại local_path trong tệp source.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 gồm các 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 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.

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à một 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. Lược đồ của tệp này phụ thuộc vào trường type, mặc định là archive.

  • Nếu typearchive (mặc định), thì phiên bản mô-đun này được hỗ trợ bởi 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 một kho lưu trữ xuống từ một URL nhất định và trích xuất nội dung của kho lưu trữ đó. Thẻ này hỗ trợ các trường sau:
    • url: Một chuỗi, URL của kho lưu trữ nguồn
    • mirror_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ự sau url dưới dạng bản sao lưu.
    • integrity: Một chuỗi, 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: Một chuỗi, tiền tố thư mục cần loại bỏ khi trích xuất kho lưu trữ nguồn
    • overlay: Một đối tượng JSON chứa các tệp lớp phủ để xếp lớp lên trên tệp lưu trữ đã trích xuất. Các tệp 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 tra tính toàn vẹn của tệp lớp phủ. Các lớp phủ được áp dụng trước các tệp vá.
    • patches: Một đối tượng JSON 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á. Các bản vá được áp dụng sau các tệp lớp phủ và theo thứ tự xuất hiện trong patches.
    • patch_strip: Một số; giống như đối số --strip của Unix patch.
    • archive_type: Một chuỗi, loại tệp lưu trữ của tệp đã tải xuống (Tương tự như type trên http_archive).
  • Nếu typegit_repository, thì phiên bản mô-đun này được hỗ trợ bởi quy tắc git_repository repo; phiên bản này được tìm nạp bằng cách sao chép một 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, verbosestrip_prefix.
  • Nếu typelocal_path, thì phiên bản mô-đun này được hỗ trợ bởi quy tắc local_repository repo; phiên bản này được liên kết tượng trưng với một thư mục trên ổ đĩa cục bộ. Thư viện 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 pathmodule_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

Sổ đăng ký trung tâm Bazel

Bazel Central Registry (BCR) tại https://bcr.bazel.build/ là một chỉ mục đăng ký 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 lượt đă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.