규칙 호환성

문제 신고 소스 보기

Bazel Starlark 규칙은 다음 두 가지 시나리오에서 Bazel LTS 출시 버전과의 호환성을 손상시킬 수 있습니다.

  1. 이 규칙은 향후 LTS 버전과의 호환성을 손상합니다. 종속되는 기능이 HEAD의 Bazel에서 삭제되기 때문입니다.
  2. 이 규칙은 현재 또는 이전 LTS 버전과의 호환성을 손상합니다. 종속되는 기능은 최신 Bazel LTS 출시 버전에서만 사용할 수 있기 때문입니다.

동시에 규칙 자체가 호환되지 않는 변경사항을 사용자에게 제공할 수도 있습니다. Bazel의 브레이킹 체인지와 함께 규칙 버전과 Bazel 버전을 업그레이드하면 Bazel 사용자가 불만을 느낄 수 있습니다. 이 페이지에서는 사용자가 Bazel과 규칙을 더 쉽게 업그레이드할 수 있도록 규칙 작성자가 Bazel과의 규칙 호환성을 유지해야 하는 방법을 설명합니다.

관리가 용이한 마이그레이션 프로세스

모든 Bazel 버전과 규칙의 모든 버전 간의 호환성을 보장하는 것은 불가능하지만 Bazel 사용자가 이전 프로세스를 계속 관리할 수 있도록 하는 것이 Google의 목표입니다. 관리 가능한 마이그레이션 프로세스는 사용자가 규칙의 메이저 버전과 Bazel의 메이저 버전을 동시에 업그레이드하도록 강제하지 않는 프로세스로 정의됩니다. 따라서 사용자는 한 번에 하나의 소스에서 호환되지 않는 변경사항을 처리할 수 있습니다.

다음과 같은 호환성 매트릭스를 예로 들 수 있습니다.

  • Rules_foo 1.x + Bazel 4.x에서 rules_foo 2.x + Bazel 5.x로 이전하는 것은 관리하기 쉬운 것으로 간주되지 않습니다. 사용자가rules_foo와 Bazel의 주요 버전을 동시에 업그레이드해야 하기 때문입니다.
  • Rules_foo 2.x + Bazel 5.x에서 rules_foo 3.x + Bazel 6.x로 이전하는 것은 관리 가능한 것으로 간주됩니다. 사용자가 먼저 주요 Bazel 버전을 변경하지 않고 Rules_foo를 2.x에서 3.x로 업그레이드한 다음 Bazel을 5.x에서 6.x로 업그레이드할 수 있기 때문입니다.
Rules_foo 1.x Rules_foo 2.x Rules_foo 3.x HEAD
Bazel 4.x
Bazel 5.x
Bazel 6.x
HEAD

❌: 주 규칙 버전의 버전이 Bazel LTS 출시와 호환되지 않습니다.

✅: 하나 이상의 규칙 버전이 최신 버전의 Bazel LTS 출시 버전과 호환됩니다.

권장사항

Bazel 규칙 작성자가 있으므로 다음 권장사항에 따라 사용자를 위해 관리 가능한 마이그레이션 프로세스를 보장할 수 있습니다.

  1. 규칙은 시맨틱 버전 관리를 따라야 합니다. 동일한 메이저 버전의 마이너 버전은 이전 버전과 호환됩니다.
  2. HEAD의 규칙은 최신 Bazel LTS 출시 버전과 호환되어야 합니다.
  3. HEAD의 규칙은 HEAD의 Bazel과 호환되어야 합니다. 이렇게 하려면 다음을 실행하면 됩니다.
    • HEAD에서 Bazel을 사용하여 자체 CI 테스트 설정
    • 프로젝트를 Bazel 다운스트림 테스트에 추가합니다. Bazel의 브레이킹 체인지가 프로젝트에 영향을 미치는 경우 Bazel팀이 프로젝트에 문제를 신고하며, 개발자는 다운스트림 프로젝트 정책을 따라 문제를 적시에 해결해야 합니다.
  4. 규칙의 최신 주 버전이 최신 Bazel LTS 출시 버전과 호환되어야 합니다.
  5. 규칙의 새로운 주 버전은 규칙의 이전 주 버전에서 지원되는 마지막 Bazel LTS 출시와 호환되어야 합니다.

2. 와 3. 을 달성하면 4. 와 5를 달성할 수 있으므로 가장 중요한 작업입니다. 있습니다.

HEAD의 Bazel 및 최신 Bazel LTS 버전과의 호환성을 더 쉽게 유지할 수 있도록 규칙 작성자는 다음을 실행할 수 있습니다.

  • 이전 버전과 호환되는 기능을 최신 LTS 버전으로 백포팅하도록 요청합니다. 자세한 내용은 출시 프로세스를 참고하세요.
  • bazel_features를 사용하여 Bazel 특성 감지를 수행합니다.

일반적으로 권장 접근 방식을 사용하면 규칙이 최신 Bazel LTS 출시 버전과의 호환성을 저하하지 않고 HEAD에서 새로운 Bazel 기능을 사용할 수 있고 Bazel 호환되지 않는 변경사항을 이전할 수 있어야 합니다.