Bzlmod는 Bazel 모듈의 데이터베이스인 Bazel 레지스트리에서 정보를 요청하여 종속 항목을 찾습니다. Bazel은 한 가지 유형의 레지스트리인 색인 레지스트리만 지원합니다. 이는 특정 형식을 따르는 로컬 디렉터리 또는 정적 HTTP 서버입니다.
색인 레지스트리
색인 레지스트리는 모듈 목록(홈페이지, 유지관리자, 각 버전의 MODULE.bazel
파일, 각 버전의 소스를 가져오는 방법 등)에 관한 정보가 포함된 로컬 디렉터리 또는 정적 HTTP 서버입니다. 특히 소스 보관 파일 자체를 제공할 필요는 없습니다.
색인 레지스트리는 다음과 같은 형식이어야 합니다.
/bazel_registry.json
: 레지스터의 메타데이터가 포함된 JSON 파일(선택사항)입니다./modules
: 이 레지스트리의 각 모듈의 하위 디렉터리가 포함된 디렉터리입니다./modules/$MODULE
:$MODULE
라는 모듈의 각 버전에 관한 하위 디렉터리와 이 모듈의 메타데이터가 포함된metadata.json
파일이 포함된 디렉터리입니다./modules/$MODULE/$VERSION
: 다음 파일이 포함된 디렉터리입니다.MODULE.bazel
: 이 모듈 버전의MODULE.bazel
파일입니다. 이는 Bazel의 외부 종속 항목 확인 중에 읽은MODULE.bazel
파일이며 (레지스트리 외 재정의가 없는 경우를 제외하고) 소스 보관 파일의MODULE.bazel
파일이 아닙니다.source.json
: 이 모듈 버전의 소스를 가져오는 방법에 관한 정보가 포함된 JSON 파일patches/
: 패치 파일이 포함된 선택적 디렉터리입니다.source.json
에 'archive' 유형이 있는 경우에만 사용됩니다.overlay/
: 오버레이 파일이 포함된 선택적 디렉터리로,source.json
에 'archive' 유형이 있는 경우에만 사용됩니다.
bazel_registry.json
bazel_registry.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
입니다.
- 미러링된 URL은 미러 자체와 프로토콜을 제외하고
module_base_path
:source.json
파일에서local_path
유형이 있는 모듈의 기본 경로를 지정하는 문자열입니다.
metadata.json
metadata.json
는 모듈에 관한 정보를 포함하는 선택적 JSON 파일로 다음 필드를 포함합니다.
versions
: 이 레지스트리에서 사용할 수 있는 모듈 버전을 각각 나타내는 문자열 배열입니다. 이 배열은 모듈 디렉터리의 하위 요소와 일치해야 합니다.yanked_versions
: 이 모듈의 삭제된 버전을 지정하는 JSON 객체입니다. 키는 삭제할 버전이어야 하며 값은 버전이 삭제된 이유에 관한 설명이어야 합니다(더 많은 정보로 연결되는 링크가 포함되는 것이 좋음).
BCR에는 metadata.json
파일에 더 많은 정보가 필요합니다.
source.json
source.json
은 모듈의 특정 버전을 가져오는 방법에 관한 정보가 포함된 필수 JSON 파일입니다. 이 파일의 스키마는 기본값이 archive
인 type
필드에 따라 달라집니다.
type
가archive
(기본값)인 경우 이 모듈 버전은http_archive
저장소 규칙에 의해 지원됩니다. 지정된 URL에서 보관 파일을 다운로드하고 콘텐츠를 추출하여 가져옵니다. 다음 필드를 지원합니다.url
: 소스 보관 파일의 URL인 문자열입니다.integrity
: 보관 파일의 하위 요소 무결성 체크섬인 문자열입니다.strip_prefix
: 소스 보관 파일을 추출할 때 제거할 디렉터리 접두사인 문자열입니다.overlay
: 추출된 보관 파일 위에 레이어할 오버레이 파일이 포함된 JSON 객체입니다. 패치 파일은/modules/$MODULE/$VERSION/overlay
디렉터리에 있습니다. 키는 오버레이 파일 이름이고 값은 오버레이 파일의 무결성 체크섬입니다. 오버레이는 패치 파일 전에 적용됩니다.patches
: 추출된 보관 파일에 적용할 패치 파일이 포함된 JSON 객체입니다. 패치 파일은/modules/$MODULE/$VERSION/patches
디렉터리에 있습니다. 키는 패치 파일 이름이고 값은 패치 파일의 무결성 체크섬입니다. 패치는 오버레이 파일 후에 적용됩니다.patch_strip
: 숫자입니다. Unixpatch
의--strip
인수와 동일합니다.archive_type
: 다운로드한 파일의 보관 파일 유형인 문자열입니다 (http_archive
의type
와 동일).
type
이git_repository
인 경우 이 모듈 버전은git_repository
저장소 규칙에 의해 지원됩니다. Git 저장소를 클론하여 가져옵니다.- 다음 필드는 지원되며 기본
git_repository
저장소 규칙으로 직접 전달됩니다.remote
,commit
,shallow_since
,tag
,init_submodules
,verbose
,strip_prefix
- 다음 필드는 지원되며 기본
type
이local_path
이면 이 모듈 버전은local_repository
저장소 규칙에 의해 지원되며 로컬 디스크의 디렉터리에 심볼릭 링크됩니다. 다음 필드를 지원합니다.path
: 다음과 같이 계산된 저장소의 로컬 경로입니다.path
가 절대 경로인 경우 그대로 유지됩니다.path
이 상대 경로이고module_base_path
이 절대 경로인 경우<module_base_path>/<path>
로 확인됩니다.path
와module_base_path
가 모두 상대 경로인 경우<registry_path>/<module_base_path>/<path>
로 확인됩니다. 레지스트리는 로컬에서 호스팅되고--registry=file://<registry_path>
에서 사용해야 합니다. 그렇지 않으면 Bazel에서 오류가 발생합니다.
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
를 추가하여 다시 추가할 수 있습니다.