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