Bazel Starlark 규칙은 다음 두 가지 시나리오에서 Bazel LTS 출시 버전과의 호환성을 손상시킬 수 있습니다.
- 규칙이 의존하는 기능이 HEAD에서 Bazel에서 삭제되므로 규칙이 향후 LTS 출시 버전과의 호환성을 손상시킵니다.
- 규칙이 의존하는 기능이 최신 Bazel LTS 출시 버전에서만 제공되므로 규칙이 현재 또는 이전 LTS 출시 버전과의 호환성을 손상시킵니다.
한편 규칙 자체도 사용자에게 호환되지 않는 변경사항을 제공할 수 있습니다. Bazel의 호환성을 손상시키는 변경사항과 결합하면 규칙 버전과 Bazel 버전을 업그레이드하는 것이 Bazel 사용자에게 좌절감을 안겨줄 수 있습니다. 이 페이지에서는 규칙 작성자가 Bazel과의 규칙 호환성을 유지하여 사용자가 Bazel과 규칙을 더 쉽게 업그레이드할 수 있도록 하는 방법을 설명합니다.
관리 가능한 이전 프로세스
모든 버전의 Bazel과 모든 버전의 규칙 간에 호환성을 보장하는 것은 분명히 불가능하지만 Google의 목표는 Bazel 사용자가 이전 프로세스를 관리할 수 있도록 하는 것입니다. 관리 가능한 이전 프로세스는 사용자가 규칙의 메이저 버전과 Bazel의 메이저 버전을 동시에 업그레이드하지 않아도 되는 프로세스로 정의되며, 이를 통해 사용자는 한 번에 하나의 소스에서 호환되지 않는 변경사항을 처리할 수 있습니다.
예를 들어 다음 호환성 매트릭스를 사용합니다.
- 사용자가 rules_foo 및 Bazel의 메이저 버전을 동시에 업그레이드해야 하므로 rules_foo 1.x + Bazel 4.x에서 rules_foo 2.x + Bazel 5.x로 이전하는 것은 관리 가능한 것으로 간주되지 않습니다.
- 사용자가 메이저 Bazel 버전을 변경하지 않고 먼저 rules_foo를 2.x에서 3.x로 업그레이드한 다음 Bazel을 5.x에서 6.x로 업그레이드할 수 있으므로 rules_foo 2.x + Bazel 5.x에서 rules_foo 3.x + Bazel 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 규칙 작성자는 다음 권장사항을 따라 사용자를 위한 관리 가능한 이전 프로세스를 보장할 수 있습니다.
- 규칙은 시맨틱 버전을 따라야 합니다. 동일한 메이저 버전의 마이너 버전은 이전 버전과 호환됩니다.
- HEAD의 규칙은 최신 Bazel LTS 출시 버전과 호환되어야 합니다.
- HEAD의 규칙은 HEAD에서 Bazel과 호환되어야 합니다. 이를 위해 다음을 실행할 수 있습니다.
- HEAD에서 Bazel을 사용하여 자체 CI 테스트 설정
- 프로젝트를 Bazel 다운스트림 테스트에 추가: Bazel의 호환성을 손상시키는 변경사항이 프로젝트에 영향을 미치는 경우 Bazel팀에서 프로젝트에 문제를 제기하며, 문제를 적시에 해결하려면 다운스트림 프로젝트 정책 을 따라야 합니다.
- 규칙의 최신 메이저 버전은 최신 Bazel LTS 출시 버전과 호환되어야 합니다.
- 규칙의 새 메이저 버전은 규칙의 이전 메이저 버전에서 지원하는 마지막 Bazel LTS 출시 버전과 호환되어야 합니다.
2번과 3번을 달성하는 것이 가장 중요한 작업입니다. 이를 통해 4번과 5번을 달성할 수 있기 때문입니다. 자연스럽게.
규칙 작성자는 HEAD에서 Bazel과 최신 Bazel LTS 출시 버전 모두와의 호환성을 더 쉽게 유지할 수 있습니다.
- 이전 버전과 호환되는 기능을 최신 LTS 출시 버전으로 백포트하도록 요청합니다. 자세한 내용은 출시 프로세스 를 확인하세요.
- bazel_features 를 사용하여 Bazel 기능 감지를 실행합니다.
일반적으로 권장되는 접근 방식을 사용하면 규칙이 Bazel 호환성을 손상시키는 변경사항을 이전하고 최신 Bazel LTS 출시 버전과의 호환성을 유지하면서 HEAD에서 새로운 Bazel 기능을 사용할 수 있어야 합니다.