Bazel 레지스트리

문제 신고 소스 보기 Nightly · 8.3 · 8.2 · 8.1 · 8.0 · 7.6

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: 이 모듈의 yanked 버전의 맵입니다. 키는 삭제할 버전이어야 하고 값은 버전이 삭제되는 이유에 대한 설명이어야 합니다. 자세한 정보에 대한 링크가 포함되는 것이 좋습니다.
  • /modules/$MODULE/$VERSION: 다음 파일이 포함된 디렉터리
    • MODULE.bazel: 이 모듈 버전의 MODULE.bazel 파일
    • source.json: 이 모듈 버전의 소스를 가져오는 방법에 관한 정보가 포함된 JSON 파일입니다.
      • 기본 유형은 http_archive 저장소를 나타내는 'archive'이며 다음 필드가 있습니다.
        • url: 소스 보관 파일의 URL
        • mirror_urls: 문자열 목록으로, 소스 보관 파일의 미러 URL입니다. 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 중앙 레지스트리 (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 중앙 레지스트리가 기본적으로 사용되지 않지만 --registry=https://bcr.bazel.build를 추가하여 다시 추가할 수 있습니다.