Compatibilidad de las reglas

Informar un problema Ver fuente Nightly · 7.4 . 7.3 · 7.2 · 7.1 · 7.0 · 6.5

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

  1. 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.
  2. La regla rompe la compatibilidad con las versiones LTS actuales o anteriores porque una función de la que depende solo está disponible en versiones LTS de Bazel más recientes.

Mientras tanto, la regla también puede enviar cambios incompatibles para sus usuarios. Cuando se combina con cambios drásticos en Bazel, actualizar la versión de la regla y la versión de Bazel a menudo puede ser una fuente de frustración para los usuarios de Bazel. 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, obviamente, no es factible garantizar la compatibilidad entre cada versión de Bazel y cada versión de la regla, nuestro objetivo es garantizar que el proceso de migración siga siendo manejable 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.
  • Se considera que la migración de rules_foo 2.x + Bazel 5.x a rules_foo 3.x + Bazel 6.x es manejable, 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 CABEZA
Bazel 4.x
Bazel 5.x
Bazel 6.x
CABEZA

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

✅: 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:

  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 Bazel LTS.
  3. La regla en HEAD debe ser compatible con Bazel en HEAD. Para lograrlo, puedes
    • Configura tus propias pruebas de CI con Bazel en el encabezado
    • Agrega tu proyecto a las pruebas downstream de Bazel. El equipo de Bazel registra problemas en tu proyecto si los cambios que generan errores en Bazel lo afectan, y debes seguir nuestras políticas de proyectos downstream para abordar los problemas de forma oportuna.
  4. 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.
  5. 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 que las funciones retrocompatibles se lleven a la versión 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 migrar para cambios incompatibles con Bazel y usar las nuevas funciones de Bazel en HEAD sin perder la compatibilidad con la versión LTS más reciente de Bazel.