Bazel Starlark 규칙은 다음 두 가지 시나리오가 있습니다.
- 이 규칙은 종속 항목이 HEAD의 Bazel에서 삭제됩니다.
- 이 규칙은 현재 또는 이전 LTS 버전과의 호환성을 중단합니다. 종속된 기능은 최신 Bazel LTS 출시에서만 사용할 수 있습니다.
한편, 규칙 자체는 호환되지 않는 변경사항을 사용자에게 제공할 수 있으므로 있습니다. Bazel의 브레이킹 체인지와 결합된 경우 규칙 버전 업그레이드 Bazel 버전은 Bazel 사용자가 불만을 느끼는 경우가 많습니다. 이 페이지에서는 규칙 작성자가 Bazel과의 규칙 호환성을 유지하여 사용자가 Bazel과 규칙을 더 쉽게 업그레이드할 수 있습니다
관리 가능한 마이그레이션 프로세스
모든 API 서비스 간의 호환성을 보장하는 것은 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로 마이그레이션하는 것은 사용자가 먼저 rules_foo를 2.x에서 Bazel 주 버전을 변경하지 않고 3.x를 설치한 후 Bazel을 5.x에서 업그레이드 6.x
Rules_foo 1.x | Rules_foo 2.x | 규칙_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 다운스트림에 추가 testing; Bazel의 브레이킹 체인지가 브레이킹 체인지인 경우 Bazel팀이 프로젝트에 문제를 제기합니다. 영향을 주므로 다운스트림 프로젝트를 정책 신속하게 문제를 해결할 수 있습니다
- 규칙의 최신 메이저 버전이 최신 Bazel LTS 출시 버전
- 규칙의 새로운 주 버전이 마지막 Bazel LTS와 호환되어야 합니다. 지원되는 출시 버전입니다.
2와 3을 달성하는 것이 4를 달성할 수 있게 해주기 때문에 가장 중요한 작업입니다. 5. 사용할 수 있습니다.
HEAD의 Bazel 및 최신 버전 모두와 더 쉽게 호환성을 유지할 수 있도록 Bazel LTS 출시 버전에서 규칙 작성자는 다음을 수행할 수 있습니다.
- 최신 LTS로 백포팅하기 위해 이전 버전과 호환되는 기능 요청 출시 프로세스를 확인하세요. 를 참조하세요.
- bazel_features 사용 Bazel 특성 감지를 수행할 수 있습니다
일반적으로 권장되는 접근 방식을 사용하면 Bazel이 호환되지 않는 변경사항을 적용하고 HEAD에서 새로운 Bazel 기능을 사용하지 않고 최신 Bazel LTS 출시와의 호환성 저하