Las reglas de Bazel Starlark pueden romper la compatibilidad con las versiones LTS de Bazel en el con estas dos situaciones:
- La regla no es compatible con versiones futuras de LTS porque una función de la que depende se quita de Bazel en el encabezado.
- La regla no es compatible con las versiones de LTS actuales o anteriores porque una función de la que depende solo está disponible en las versiones más recientes de Bazel LTS.
Mientras tanto, la regla puede enviar cambios incompatibles para sus usuarios en la nube. Cuando se combina con cambios rotundos en Bazel, actualizar la versión de la regla y la versión de Bazel puede ser frustración para los usuarios. Esta Aquí se explica cómo los autores de reglas deben mantener la compatibilidad de reglas con Bazel para les facilita a los usuarios la actualización de Bazel y las reglas.
Proceso de migración administrable
Si bien no es factible garantizar la compatibilidad versión de Bazel y cada versión de la regla, nuestro objetivo es garantizar que la de migración sigue siendo administrable para los usuarios de Bazel. Una migración administrable Proceso en el cual los usuarios no están obligados a actualizar el de la regla de firewall y la versión principal de Bazel de forma simultánea, por lo que lo que permite a los usuarios manejar cambios incompatibles de una fuente a la vez.
Por ejemplo, con la siguiente matriz de compatibilidad:
- No se realizará la migración de rules_foo 1.x + Bazel 4.x a rules_foo 2.x + Bazel 5.x. se considera administrable, ya que los usuarios deben actualizar la versión principal rules_foo y Bazel al mismo tiempo.
- La migración de rules_foo 2.x + Bazel 5.x a rules_foo 3.x + Bazel 6.x es se considera administrable, ya que los usuarios primero pueden actualizar rules_foo de 2.x a la versión 3.x sin cambiar la versión principal de Bazel y, luego, actualizar Bazel de la 5.x a la 6.x
rules_foo 1.x | rules_foo 2.x | rules_foo 3.x | CABEZA | |
---|---|---|---|---|
Bazel 4.x | ✅ | ❌ | ❌ | ❌ |
Bazel 5.x | ❌ | ✅ | ✅ | ❌ |
Bazel 6.x | ❌ | ❌ | ✅ | ✅ |
CABEZA | ❌ | ❌ | ❌ | ✅ |
❌: Ninguna versión de la versión de la regla principal es compatible con la LTS de Bazel lanzamiento.
✅: Al menos una versión de la regla es compatible con la versión más reciente del Versión de Bazel LTS.
Prácticas recomendadas
Como autores de reglas de Bazel, puedes garantizar un proceso de migración administrable para los usuarios. siguiendo estas prácticas recomendadas:
- La regla debe seguir la estructura de semántica Control de versiones: versiones secundarias del mismo versión principal son retrocompatibles.
- La regla en el encabezado debe ser compatible con la versión más reciente de Bazel LTS.
- La regla del encabezado debe ser compatible con Bazel en el encabezado. Para lograrlo,
puedes
- Configura tus propias pruebas de CI con Bazel en el encabezado
- Agregar tu proyecto a Bazel en sentido descendente testing; el equipo de Bazel archivará los problemas en tu proyecto si se producen cambios rotundos en Bazel. afectan tu proyecto, y debes seguir nuestro proyecto descendente políticas para abordar los problemas de manera oportuna.
- La versión principal más reciente de la regla debe ser compatible con la versión más reciente Versión de Bazel LTS.
- Una versión principal nueva de la regla debe ser compatible con la última versión de LTS de Bazel versión compatible con la versión principal anterior de la regla.
Alcanzar 2. y 3. es la tarea más importante, ya que permite alcanzar el 4. y 5) naturalmente.
Para que sea más fácil mantener la compatibilidad con Bazel en el encabezado y con las versiones más recientes Versión de Bazel LTS; los autores de reglas pueden hacer lo siguiente:
- Solicita funciones retrocompatibles para la portabilidad a versiones anteriores de la LTS más reciente versión, consulta el proceso de lanzamiento para obtener más información.
- Usa bazel_features para realizar la detección de funciones de Bazel.
En general, con los enfoques recomendados, las reglas deberían poder migrar para Hay cambios incompatibles con Bazel y se usan las nuevas funciones de Bazel en el encabezado sin ya no es compatible con la versión más reciente de Bazel LTS.