Bazel 레지스트리

문제 신고 소스 보기 Nightly · 8.0 . 7.4 . 7.3 · 7.2 · 7.1 · 7.0 · 6.5

Bzlmod는 Bazel 모듈의 데이터베이스인 Bazel 레지스트리에서 정보를 요청하여 종속 항목을 찾습니다. 현재 Bzlmod는 특정 형식을 따르는 로컬 디렉터리 또는 정적 HTTP 서버인 색인 레지스트리만 지원합니다.

색인 레지스트리

색인 레지스트리는 모듈 목록(홈페이지, 유지관리자, 각 버전의 MODULE.bazel 파일, 각 버전의 소스를 가져오는 방법 등)에 관한 정보가 포함된 로컬 디렉터리 또는 정적 HTTP 서버입니다. 특히 소스 보관 파일 자체를 제공할 필요는 없습니다.

색인 레지스트리는 다음 형식을 따라야 합니다.

  • /bazel_registry.json: 다음과 같은 레지스터의 메타데이터가 포함된 JSON 파일입니다.
    • mirrors: 소스 보관 파일에 사용할 미러 목록을 지정합니다. 미러링된 URL은 미러 자체와 프로토콜을 제외하고 source.json 파일로 지정된 모듈의 소스 URL을 연결한 것입니다. 예를 들어 모듈의 소스 URL이 https://foo.com/bar/baz이고 mirrors["https://mirror1.com/", "https://example.com/mirror2/"]가 포함되어 있으면 Bazel에서 순서대로 시도할 URL은 https://mirror1.com/foo.com/bar/baz, https://example.com/mirror2/foo.com/bar/baz, 마지막으로 원래 소스 URL 자체인 https://foo.com/bar/baz입니다.
    • module_base_path: source.json 파일에서 local_repository 유형으로 모듈의 기본 경로 지정
  • /modules: 이 레지스트리의 각 모듈에 대한 하위 디렉터리가 포함된 디렉터리입니다.
  • /modules/$MODULE: 이 모듈의 각 버전에 관한 하위 디렉터리와 다음을 포함하는 디렉터리입니다.
    • metadata.json: 모듈에 관한 정보가 포함된 JSON 파일로 다음 필드가 있습니다.
      • homepage: 프로젝트 홈페이지의 URL입니다.
      • maintainers: 각각 레지스트리의 모듈 유지보여자 정보에 해당하는 JSON 객체 목록입니다. 이는 프로젝트의 작성자와 반드시 동일하지는 않습니다.
      • versions: 이 레지스트리에서 찾을 수 있는 이 모듈의 모든 버전 목록
      • yanked_versions: 이 모듈의 취소된 버전 맵입니다. 키는 삭제할 버전이어야 하며 값은 버전이 삭제된 이유에 관한 설명이어야 합니다(자세한 정보 링크 포함이 이상적).
  • /modules/$MODULE/$VERSION: 다음 파일이 포함된 디렉터리입니다.
    • MODULE.bazel: 이 모듈 버전의 MODULE.bazel 파일입니다.
    • source.json: 이 모듈 버전의 소스를 가져오는 방법에 관한 정보가 포함된 JSON 파일입니다.
      • 기본 유형은 http_archive 저장소를 나타내는 'archive'이며 다음 필드가 있습니다.
        • url: 소스 보관 파일의 URL
        • integrity: 보관 파일의 하위 요소 무결성 체크섬
        • strip_prefix: 소스 보관 파일을 추출할 때 제거할 디렉터리 접두사입니다.
        • patches: 추출된 보관 파일에 적용할 패치 파일이 포함된 맵입니다. 패치 파일은 /modules/$MODULE/$VERSION/patches 디렉터리에 있습니다. 키는 패치 파일 이름이고 값은 패치 파일의 무결성 체크섬입니다.
        • patch_strip: Unix patch--strip 인수와 동일합니다.
        • archive_type: 다운로드된 파일의 보관 파일 유형입니다 (http_archivetype과 동일). 기본적으로 보관 파일 유형은 URL의 파일 확장자에서 결정됩니다. 파일에 확장자가 없는 경우 "zip", "jar", "war", "aar", "tar", "tar.gz", "tgz", "tar.xz", "txz", "tar.zst", "tzst", tar.bz2, "ar", "deb" 중 하나를 명시적으로 지정할 수 있습니다.
      • 다음 필드를 사용하여 git 저장소를 사용하도록 유형을 변경할 수 있습니다.
        • type: git_repository
        • https://bazel.build/rules/lib/repo/git에 설명된 다음 필드입니다.
          • remote
          • commit
          • shallow_since
          • tag
          • init_submodules
          • verbose
          • strip_prefix
      • 다음 필드를 사용하여 local_repository 저장소를 나타내는 로컬 경로를 사용하도록 유형을 변경할 수 있습니다.
        • type: local_path
        • path: 다음과 같이 계산된 저장소의 로컬 경로입니다.
          • path가 절대 경로인 경우 그대로 유지됩니다.
          • path이 상대 경로이고 module_base_path이 절대 경로인 경우 <module_base_path>/<path>로 확인됩니다.
          • pathmodule_base_path가 모두 상대 경로인 경우 <registry_path>/<module_base_path>/<path>로 확인됩니다. 레지스트리는 로컬에서 호스팅되고 --registry=file://<registry_path>에서 사용해야 합니다. 그렇지 않으면 Bazel에서 오류가 발생합니다.
    • patches/: 패치 파일이 포함된 선택적 디렉터리입니다. source.json에 'archive' 유형이 있는 경우에만 사용됩니다.

Bazel 중앙 레지스트리

https://bcr.bazel.build/의 Bazel Central Registry (BCR)는 GitHub 저장소 bazelbuild/bazel-central-registry의 콘텐츠를 기반으로 하는 색인 레지스트리입니다. https://registry.bazel.build/에서 웹 프런트엔드를 사용하여 콘텐츠를 탐색할 수 있습니다.

Bazel 커뮤니티에서 BCR을 유지 관리하며 참여자는 풀 리퀘스트를 제출할 수 있습니다. BCR 기여 가이드라인을 참고하세요.

BCR은 일반 색인 레지스터의 형식을 따르는 것 외에도 각 모듈 버전(/modules/$MODULE/$VERSION/presubmit.yml)의 presubmit.yml 파일이 필요합니다. 이 파일은 이 모듈 버전의 유효성을 검사하는 데 사용할 수 있는 몇 가지 필수 빌드 및 테스트 타겟을 지정합니다. BCR의 CI 파이프라인에서도 이를 사용하여 모듈 간의 상호 운용성을 보장합니다.

레지스트리 선택

반복 가능한 Bazel 플래그 --registry를 사용하여 모듈을 요청할 저장소 목록을 지정할 수 있으므로 서드 파티 또는 내부 저장소에서 종속 항목을 가져오도록 프로젝트를 설정할 수 있습니다. 이전 레지스트리가 우선 적용됩니다. 편의를 위해 프로젝트의 .bazelrc 파일에 --registry 플래그 목록을 배치할 수 있습니다.

레지스트리가 GitHub에 호스팅되는 경우 (예: bazelbuild/bazel-central-registry의 포크로) --registry 값에 raw.githubusercontent.com 아래의 원시 GitHub 주소가 필요합니다. 예를 들어 my-org 포크의 main 브랜치에서는 --registry=https://raw.githubusercontent.com/my-org/bazel-central-registry/main/를 설정합니다.

--registry 플래그를 사용하면 Bazel Central Registry가 기본적으로 사용되지 않지만 --registry=https://bcr.bazel.build를 추가하여 다시 추가할 수 있습니다.