규칙 호환성

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

Bazel Starlark 규칙은 다음과 같은 두 가지 시나리오가 있습니다.

  1. 이 규칙은 종속 항목이 HEAD의 Bazel에서 삭제됩니다.
  2. 이 규칙은 현재 또는 이전 LTS 버전과의 호환성을 중단합니다. 종속된 기능은 최신 Bazel LTS 출시에서만 사용할 수 있습니다.

한편 규칙 자체도 사용자에게 호환되지 않는 변경사항을 제공할 수 있습니다. Bazel의 브레이킹 체인지와 결합된 경우 규칙 버전 업그레이드 Bazel 버전이 있는 경우 Bazel 사용자가 불만을 느끼는 경우가 많습니다. 이 페이지에서는 규칙 작성자가 Bazel과의 규칙 호환성을 유지하여 사용자가 Bazel과 규칙을 더 쉽게 업그레이드할 수 있습니다

관리 가능한 이전 프로세스

모든 버전의 Bazel과 모든 버전의 규칙 간에 호환성을 보장하는 것은 불가능하지만, Bazel 사용자가 이전 프로세스를 계속 관리할 수 있도록 하는 것이 목표입니다. 관리 가능한 이전 프로세스는 사용자가 규칙의 메인 버전과 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로 마이그레이션하는 것은 사용자가 먼저 규칙_foo를 2.x에서 2.x로 업그레이드할 수 있으므로 Bazel 주 버전을 변경하지 않고 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과 호환되어야 합니다. 이렇게 하려면 다음 단계를 따르세요.
  4. 규칙의 최신 메이저 버전이 최신 Bazel LTS 출시 버전
  5. 규칙의 새 주 버전은 이전 주 버전의 규칙에서 지원하는 마지막 Bazel LTS 출시와 호환되어야 합니다.

2. 및 3.을 달성하는 것이 가장 중요한 작업입니다. 이를 통해 4. 및 5.를 달성할 수 있기 때문입니다. 사용할 수 있습니다.

HEAD의 Bazel 및 최신 버전 모두와 더 쉽게 호환성을 유지할 수 있도록 Bazel LTS 출시 버전에서 규칙 작성자는 다음을 수행할 수 있습니다.

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

일반적으로 권장되는 접근 방식을 사용하면 Bazel이 호환되지 않는 변경사항을 적용하고 HEAD에서 새로운 Bazel 기능을 사용하지 않고 최신 Bazel LTS 출시와의 호환성 저하