Compatibilidad de las reglas

Informar un problema Ver fuente

Las reglas de Bazel Starlark pueden romper la compatibilidad con las versiones de LTS de Bazel en las siguientes dos situaciones:

  1. La regla incumple la compatibilidad con versiones futuras de LTS porque una función de la que depende se quita de Bazel en HEAD.
  2. 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 versiones más recientes de LTS de Bazel.

Mientras tanto, la regla también puede enviar cambios incompatibles para sus usuarios. Cuando se combina con cambios rotundos en Bazel, actualizar la versión de la regla y la versión de Bazel puede ser motivo de frustración para los usuarios de Bazel. En esta página, se explica cómo los autores de reglas deben mantener la compatibilidad de las reglas con Bazel para que los usuarios actualicen con mayor facilidad Bazel y reglas.

Proceso de migración administrable

Si bien obviamente no es factible garantizar la compatibilidad entre todas las versiones de Bazel y todas las versiones de la regla, nuestro objetivo es garantizar que el proceso de migración siga siendo administrable para los usuarios de Bazel. Un proceso de migración administrable se define como un proceso en el que los usuarios no se ven obligados a actualizar la versión principal de la regla y la versión principal de Bazel de forma simultánea, lo que permite a los usuarios manejar cambios incompatibles de una fuente a la vez.

Por ejemplo, con la siguiente matriz de compatibilidad:

  • La migración de rules_foo 1.x + Bazel 4.x a rules_foo 2.x + Bazel 5.x no se considera administrable, ya que los usuarios deben actualizar la versión principal de 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 se considera administrable, ya que los usuarios primero pueden actualizar rules_foo de 2.x a 3.x sin cambiar la versión principal de Bazel y, luego, actualizar Bazel de 5.x a 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

❌: Ninguna versión de la versión de la regla principal es compatible con la versión de LTS de Bazel.

✅: Al menos una versión de la regla es compatible con la versión más reciente de la versión de LTS de Bazel.

Prácticas recomendadas

Como autores de reglas de Bazel, puedes garantizar un proceso de migración administrable para los usuarios si sigues estas prácticas recomendadas:

  1. La regla debe seguir el Control de versiones semántico: Las versiones secundarias de la misma versión principal son retrocompatibles.
  2. La regla en el encabezado debe ser compatible con la versión más reciente de LTS de Bazel.
  3. La regla en el encabezado debe ser compatible con Bazel en el encabezado. Para lograrlo, puedes hacer lo siguiente:
    • Configura tus propias pruebas de CI con Bazel en HEAD
    • Agrega tu proyecto a las pruebas posteriores de Bazel. El equipo de Bazel archiva problemas en tu proyecto si los cambios rotundos en Bazel afectan a tu proyecto. Además, debes seguir nuestras políticas del proyecto posteriores para abordar los problemas a tiempo.
  4. La versión principal más reciente de la regla debe ser compatible con la versión más reciente de LTS de Bazel.
  5. Una versión principal nueva de la regla debe ser compatible con la última versión de LTS de Bazel compatible con la versión principal anterior de la regla.

Alcanzar 2 y 3 es la tarea más importante, ya que te permite alcanzar 4 y 5. de forma natural.

Para facilitar la mantenimiento de la compatibilidad con Bazel en el encabezado y la versión más reciente de LTS de Bazel, los autores de reglas pueden hacer lo siguiente:

  • Solicita que las funciones retrocompatibles se adapten a la versión de LTS más reciente. Consulta el proceso de lanzamiento para obtener más detalles.
  • Usa bazel_features para realizar la detección de funciones de Bazel.

En general, con los enfoques recomendados, las reglas deberían poder migrarse para los cambios incompatibles de Bazel y usar las nuevas funciones de Bazel en el encabezado sin que la compatibilidad con la última versión de LTS de Bazel.