Si planeas agregar, cambiar o quitar una función visible para el usuario, o realizar un cambio arquitectónico significativo en Bazel, debes escribir un documento de diseño y hacer que se revise antes de enviar el cambio.
Estos son algunos ejemplos de cambios significativos:
- Adición o eliminación de reglas de compilación nativas
- Cambios rotundos en las reglas nativas
- Cambios en la semántica de una regla de compilación nativa que afectan el comportamiento de más de una regla
- Cambios en la API de definición de reglas de Bazel
- Cambios en las APIs que usa Bazel para conectarse a otros sistemas
- Cambios en el lenguaje, la semántica o las APIs de Starlark
- Cambios que podrían tener un efecto generalizado en el rendimiento o el uso de memoria de Bazel (para bien o para mal)
- Cambios en las APIs internas de uso generalizado
- Cambios en las marcas y la interfaz de línea de comandos
Motivos para las revisiones de diseño
Cuando escribes un documento de diseño, puedes coordinar con otros desarrolladores de Bazel y buscar orientación del equipo principal de Bazel. Por ejemplo, cuando una propuesta agrega, quita o modifica cualquier función u objeto disponible en los archivos BUILD, MODULE.bazel o bzl, agrega al equipo de Starlark como revisores. Los documentos de diseño se revisan antes de enviarse por los siguientes motivos:
- Bazel es un sistema muy complejo; los cambios locales aparentemente inocuos pueden tener consecuencias globales significativas.
- El equipo recibe muchas solicitudes de funciones de los usuarios. Estas solicitudes deben evaluarse no solo por la viabilidad técnica, sino también por la importancia con respecto a otras solicitudes de funciones.
- Las funciones de Bazel suelen ser implementadas por personas ajenas al equipo principal; estos colaboradores tienen niveles muy diferentes de experiencia en Bazel.
- El equipo de Bazel en sí tiene diferentes niveles de experiencia. Ningún miembro del equipo tiene una comprensión completa de cada rincón de Bazel.
- Los cambios en Bazel deben tener en cuenta la retrocompatibilidad y evitar los cambios rotundos.
La política de revisión de diseño de Bazel ayuda a maximizar la probabilidad de que ocurra lo siguiente:
- Todas las solicitudes de funciones obtienen un nivel de supervisión de referencia.
- Las personas adecuadas opinarán sobre los diseños antes de que invirtamos en una implementación que podría no funcionar.
Para ayudarte a comenzar, consulta los documentos de diseño en el repositorio de propuestas de Bazel. Los diseños son trabajos en curso, por lo que los detalles de implementación pueden cambiar con el tiempo y con los comentarios. Los documentos de diseño publicados capturan el diseño inicial, y no los cambios en curso a medida que se implementan los diseños. Siempre consulta la documentación para obtener descripciones de la funcionalidad actual de Bazel.
Flujo de trabajo del colaborador
Como colaborador, puedes escribir un documento de diseño, enviar solicitudes de extracción y solicitar revisores para tu propuesta.
Escribe el documento de diseño
Todos los documentos de diseño deben tener un encabezado que incluya lo siguiente:
- author
- Fecha del último cambio importante
- Lista de revisores, incluido un revisor principal (y solo uno)
- Estado actual (borrador, en revisión, aprobado, rechazado, en implementación, implementado)
- Vínculo al hilo de discusión (se agregará después del anuncio)
El documento se puede escribir como un documento de Google legible para todo el mundo o con Markdown. Lee a continuación para obtener una comparación entre Markdown y Documentos de Google.
Las propuestas que tengan un impacto visible para el usuario deben tener una sección que documente el impacto en la retrocompatibilidad (y un plan de lanzamiento si es necesario).
Crea una solicitud de extracción
Para compartir tu documento de diseño, crea una solicitud de extracción (PR) para agregar el documento a l índice de diseño. Agrega tu archivo de Markdown o un vínculo de documento a tu PR.
Cuando sea posible, elige un revisor principal. y agrega a otros revisores en copia. Si no eliges un revisor principal, un mantenedor de Bazel asignará uno a tu PR.
Después de crear tu PR, los revisores pueden hacer comentarios preliminares durante la revisión de código. Por ejemplo, el revisor principal puede sugerir revisores adicionales o señalar la información faltante. El revisor principal aprueba la PR cuando cree que se puede iniciar el proceso de revisión. Esto no significa que la propuesta sea perfecta o que se aprobará, sino que contiene suficiente información para iniciar la discusión.
Anuncia la nueva propuesta
Envía un anuncio a bazel-dev cuando se envíe la PR.
Puedes copiar otros grupos (por ejemplo, bazel-discuss, para obtener comentarios de los usuarios finales de Bazel).
Itera con los revisores
Cualquier persona interesada puede comentar tu propuesta. Intenta responder preguntas, aclarar la propuesta y abordar las inquietudes.
La discusión debe realizarse en el hilo del anuncio. Si la propuesta está en un documento de Google, se pueden usar comentarios en su lugar (ten en cuenta que se permiten los comentarios anónimos ).
Actualiza el estado
Crea una nueva PR para actualizar el estado de la propuesta cuando se complete la iteración. Envía la PR al mismo revisor principal y agrega a los demás revisores en copia.
Para aceptar oficialmente la propuesta, el revisor principal aprueba la PR después de asegurarse de que los demás revisores estén de acuerdo con la decisión.
Debe haber al menos 1 semana entre el primer anuncio y la aprobación de una propuesta. Esto garantiza que los usuarios tengan suficiente tiempo para leer el documento y compartir sus inquietudes.
La implementación puede comenzar antes de que se acepte la propuesta, por ejemplo, como una prueba de concepto o experimentación. Sin embargo, no puedes enviar el cambio antes de que se complete la revisión.
Cómo elegir un revisor principal
Un revisor principal debe ser un experto en el dominio que cumpla con los siguientes requisitos:
- Conocimiento de los subsistemas pertinentes
- Objetividad y capacidad para proporcionar comentarios constructivos
- Disponibilidad durante todo el período de revisión para dirigir el proceso
Considera consultar los contactos de varias etiquetas de equipo.
Markdown vs. Documentos de Google
Decide qué te funciona mejor, ya que se aceptan ambos.
Beneficios de usar Documentos de Google:
- Es eficaz para la lluvia de ideas, ya que es fácil comenzar a usarlo.
- Edición colaborativa
- Iteración rápida
- Forma sencilla de sugerir ediciones
Beneficios de usar archivos de Markdown:
- URLs limpias para la vinculación
- Registro explícito de revisiones
- No olvides configurar los derechos de acceso antes de publicar un vínculo.
- Se pueden buscar fácilmente con motores de búsqueda.
- Preparado para el futuro: El texto sin formato no está a merced de ninguna herramienta específica y no requiere una conexión a Internet.
- Es posible actualizarlos incluso si el autor ya no está.
- Se pueden procesar automáticamente (actualizar o detectar vínculos rotos, recuperar lista de autores, etcétera).
Puedes elegir iterar primero en un documento de Google y, luego, convertirlo a Markdown para la posteridad.
Usa Documentos de Google
Para garantizar la coherencia, usa la plantilla de documento de diseño de Bazel. Incluye el encabezado necesario y crea coherencia visual con otros documentos relacionados con Bazel. Para ello, haz clic en Archivo > Crear una copia o en este vínculo para crear una copia de la plantilla de documento de diseño.
Para que tu documento sea legible para todo el mundo, haz clic en Compartir > Configuración avanzada > Cambiar… y elige "Activado: Cualquier persona que tenga el vínculo". Si permites comentarios en el documento, cualquier persona puede comentar de forma anónima, incluso sin una Cuenta de Google.
Usa Markdown
Los documentos se almacenan en GitHub y usan la versión de GitHub de Markdown (especificación).
Crea una PR para actualizar un documento existente. Los revisores de documentos deben revisar los cambios significativos. Cualquier persona puede aprobar los cambios triviales (como errores tipográficos o formato) .
Flujo de trabajo del revisor
Un revisor comenta, revisa y aprueba documentos de diseño.
Responsabilidades generales del revisor
Eres responsable de revisar los documentos de diseño, solicitar información adicional si es necesario y aprobar un diseño que supere el proceso de revisión.
Cuando recibas una propuesta nueva
- Echa un vistazo rápido al documento.
- Comenta si falta información crítica o si el diseño no se ajusta a los objetivos del proyecto.
- Sugiere revisores adicionales.
- Aprueba la PR cuando esté lista para su revisión.
Durante el proceso de revisión
- Participa en un diálogo con el autor del diseño sobre los problemas que son problemáticos o requieren aclaración.
- Si corresponde, invita a comentar a personas que no sean revisores y que deban conocer el diseño.
- Decide qué comentarios debe abordar el autor como requisito previo para la aprobación.
- Escribe "LGTM" (Looks Good To Me) en el hilo de discusión cuando estés satisfecho con el estado actual de la propuesta.
Sigue este proceso para todas las solicitudes de revisión de diseño. No apruebes diseños que afecten a Bazel si no están en el índice de diseño.
Responsabilidades del revisor principal
Eres responsable de tomar la decisión de continuar o no con la implementación de un diseño pendiente. Si no puedes hacerlo, debes identificar un delegado adecuado (reasignar la PR al delegado) o reasignar el error a un administrador de Bazel para que tome una decisión.
Durante el proceso de revisión
- Asegúrate de que el proceso de iteración de comentarios y diseño avance de manera constructiva.
- Antes de la aprobación, asegúrate de que se hayan resuelto las inquietudes de otros revisores.
Después de la aprobación de todos los revisores
- Asegúrate de que haya transcurrido al menos 1 semana desde el anuncio en la lista de distribución.
- Asegúrate de que la PR actualice el estado.
- Aprueba la PR que envió el autor de la propuesta.
Rechaza diseños
- Asegúrate de que el autor de la PR envíe una PR o envíale una.
- La PR actualiza el estado del documento.
- Agrega un comentario al documento en el que se explique por qué no se puede aprobar el diseño en su estado actual y se describan los próximos pasos, si corresponde (por ejemplo, "revisa las suposiciones no válidas y vuelve a enviar").