Cualquier desarrollador de software puede compilar, probar y empaquetar de manera eficiente cualquier proyecto, de cualquier tamaño o complejidad, con herramientas que son fáciles de adoptar y de extender.
Los ingenieros pueden dar por sentado los fundamentos de la compilación. Los desarrolladores de software se enfocan en el proceso creativo de la autoría de código porque se resuelve el proceso mecánico de compilación y prueba. Cuando se personaliza el sistema de compilación para admitir nuevos lenguajes o necesidades organizativas únicas, los usuarios se enfocan en los aspectos de extensibilidad que son exclusivos de su caso de uso, sin tener que reinventar la plomería básica.
Los ingenieros pueden contribuir fácilmente a cualquier proyecto. Un desarrollador que desee comenzar a trabajar en un proyecto nuevo puede simplemente clonarlo y ejecutar la compilación. No es necesario realizar la configuración local, solo funciona. Con la ejecución remota multiplataforma, pueden trabajar en cualquier máquina y probar sus cambios por completo en todas las plataformas a las que se orienta el proyecto. Los ingenieros pueden configurar rápidamente la compilación para un proyecto nuevo o migrar de forma incremental una compilación existente.
Los proyectos pueden escalarse a cualquier tamaño de base de código y equipo. Las pruebas incrementales rápidas permiten a los equipos validar por completo cada cambio antes de confirmarlo. Esto sigue siendo cierto incluso a medida que crecen los repositorios, los proyectos abarcan varios repositorios y se introducen varios lenguajes. La infraestructura no obliga a los desarrolladores a cambiar la cobertura de pruebas por la velocidad de compilación.
Creemos que Bazel tiene el potencial para cumplir con esta visión.
Bazel se creó desde cero para permitir compilaciones reproducibles (un set determinado de entradas siempre producirá los mismos resultados) y portátiles (una compilación se puede ejecutar en cualquier máquina sin afectar el resultado).
Estas características admiten la incrementalidad segura (la reconstrucción solo de las entradas modificadas no genera el riesgo de corrupción) y la capacidad de distribución (las acciones de compilación están aisladas y se pueden transferir). Al minimizar el trabajo necesario para realizar una compilación correcta y paralelizar ese trabajo en varios núcleos y sistemas remotos, Bazel puede hacer que cualquier compilación sea rápida.
La capa de abstracción de Bazel (instrucciones específicas para lenguajes, plataformas y cadenas de herramientas implementadas en un lenguaje de extensibilidad simple) permite que se aplique fácilmente a cualquier contexto.
Competencias principales de Bazel
- Bazel admite compilaciones y pruebas multilingües y multiplataforma. Puedes ejecutar un solo comando para compilar y probar todo el árbol de origen, sin importar la combinación de lenguajes y plataformas a las que te orientes.
- Las compilaciones de Bazel son rápidas y correctas. Cada compilación y ejecución de prueba es incremental en las máquinas de los desarrolladores y en la CI.
- Bazel proporciona un lenguaje uniforme y extensible para definir compilaciones para cualquier lenguaje o plataforma.
- Bazel permite que tus compilaciones escalen conectándose a servicios de ejecución remota y almacenamiento en caché.
- Bazel funciona en todas las plataformas de desarrollo principales (Linux, MacOS y Windows).
- Aceptamos que adoptar Bazel requiere esfuerzo, pero es posible realizar una adopción gradual. Bazel interactúa con herramientas estándar de facto para un lenguaje o una plataforma determinados.
Publicación de contenido para comunidades lingüísticas
La ingeniería de software evoluciona en el contexto de las comunidades de lenguaje, por lo general, grupos de personas que se organizan de forma autónoma y que usan herramientas y prácticas comunes.
Para que sean útiles para los miembros de una comunidad lingüística, deben estar disponibles reglas de Bazel de alta calidad que se integren con los flujos de trabajo y las convenciones de esa comunidad.
Bazel se compromete a ser extensible y abierto, y a admitir buenos conjuntos de reglas para cualquier lenguaje.
Requisitos de un buen conjunto de reglas
- Las reglas deben admitir una compilación y pruebas eficientes para el lenguaje, incluida la cobertura de código.
- Las reglas deben interactuar con un “administrador de paquetes” muy usado para el lenguaje (como Maven para Java) y admitir rutas de migración incrementales desde otros sistemas de compilación muy usados.
- Las reglas deben ser interoperables y extensibles, siguiendo los principios del "sandwich de Bazel".
- Las reglas deben estar preparadas para la ejecución remota. En la práctica, esto significa que se puede configurar con el mecanismo de cadenas de herramientas.
- Las reglas (y Bazel) deben interactuar con un IDE de uso general para el lenguaje, si hay uno.
- Las reglas deben tener documentación exhaustiva y fácil de usar, con material introductorio para usuarios nuevos y documentos exhaustivos para usuarios expertos.
Cada uno de estos elementos es esencial y solo en conjunto cumplen con las competencias de Bazel para su ecosistema en particular.
En general, también son suficientes. Una vez que se cumplen todos, Bazel brinda todo su valor a los miembros de esa comunidad de lenguaje.