MEP19: Integración Continua #
Estado #
Terminado
Sucursales y solicitudes de extracción #
Resumen #
matplotlib podría beneficiarse de una integración continua mejor y más confiable, tanto para probar como para crear instaladores y documentación.
Descripción detallada #
Estado del arte actual #
Pruebas
matplotlib actualmente usa Travis-CI para pruebas automatizadas. Si bien se debe elogiar a Travis-CI por lo mucho que hace como servicio gratuito, tiene una serie de deficiencias:
A menudo falla debido a los tiempos de espera de la red al instalar dependencias.
A menudo falla por razones inexplicables.
Los productos de compilación o prueba solo se pueden guardar a partir de la compilación de las sucursales en el repositorio principal, no de las solicitudes de extracción, por lo que a menudo es difícil analizar "post mortem" qué salió mal. Esto es particularmente frustrante cuando la falla no se puede reproducir localmente posteriormente.
No es extremadamente rápido. Los requisitos de CPU y memoria de matplotlib para las pruebas son mucho más altos que el proyecto promedio de Python.
Solo se prueba en Ubuntu Linux, y solo tenemos un control mínimo sobre los detalles de la plataforma. Se puede actualizar en cualquier momento fuera de nuestro control, lo que provoca retrasos inesperados en momentos que pueden no ser convenientes en nuestro programa de lanzamiento.
En el lado positivo, la integración de Travis-CI con github, que prueba automáticamente todas las solicitudes de extracción pendientes, es excepcional.
Construye
No hay un esfuerzo centralizado para compilaciones binarias automatizadas para matplotlib. Sin embargo, se están haciendo las siguientes cosas dispares [¡Si los autores mencionados aquí pudieran dar más detalles, sería fantástico!]:
@sandrotosi: crea paquetes Debian
@takluyver: ha automatizado compilaciones de Ubuntu en Launchpad
@cgohlke: crea compilaciones de Windows (no sé cuán automatizado es eso)
@r-owen: hace compilaciones de OS-X (no sé qué tan automatizado es eso)
Documentación
Travis crea ahora la documentación de main y la carga en https://matplotlib.org/devdocs/index.html
@NelleV, creo, genera los documentos automáticamente y los publica en la web para trazar el progreso de MEP10.
Peculiaridades de matplotlib #
matplotlib tiene requisitos complejos que hacen que las pruebas y la construcción sean más exigentes que muchos otros proyectos de Python.
El tiempo de CPU para ejecutar las pruebas es bastante alto. Nos pone más allá de las cuentas gratuitas de muchos servicios de CI (por ejemplo, ShiningPanda)
Tiene una gran cantidad de dependencias y probar la matriz completa de todas las combinaciones no es práctico. Necesitamos ser inteligentes sobre qué espacio probamos y garantizamos apoyar.
Requisitos #
En esta sección se describen los requisitos que nos gustaría tener.
Probar todas las solicitudes de incorporación de cambios conectando la API de GitHub, como lo hace Travis-CI
Pruebas en todas las plataformas principales: Linux, Mac OS-X, MS Windows (en ese orden de prioridad, según la encuesta de usuarios)
Conserve los productos de compilación y prueba de los últimos n días para ayudar en la depuración post-mortem.
Compilaciones binarias nocturnas automatizadas, para que los usuarios puedan probar la vanguardia sin instalar un entorno de compilación completo.
Evaluación comparativa automatizada. Sería bueno tener una suite de referencia estándar (separada de las pruebas) cuyo rendimiento se pueda rastrear a lo largo del tiempo, en diferentes backends y plataformas. Si bien esto es independiente de la construcción y las pruebas, lo ideal sería que se ejecutara en la misma infraestructura.
Creación y publicación nocturna automatizada de documentación (o como parte de las pruebas, para garantizar que los relaciones públicas no introduzcan errores en la documentación). (Esto no reemplazaría la documentación estática para versiones estables por defecto).
Los sistemas de prueba deben ser manejables por múltiples desarrolladores, para que ninguna persona se convierta en un cuello de botella. (El diseño de Travis-CI hace esto bien: almacenar la configuración de compilación en el repositorio de git, en lugar de en otro lugar, es un muy buen diseño).
Facilite la prueba de una matriz grande pero escasa de diferentes versiones de las dependencias de matplotlib. La encuesta de usuarios de matplotlib proporciona buenos datos sobre dónde centrar nuestros esfuerzos: https://docs.google.com/spreadsheets/d/1jbK0J4cIkyBNncnS-gP7pINSliNy9lI-N4JHwxlNSXE/edit
Es bueno tener: un diseño descentralizado para que aquellos con plataformas más oscuras puedan publicar los resultados de la compilación en un tablero central.
Implementación #
Esta parte aún no se ha escrito.
Sin embargo, lo ideal sería que la implementación fuera un servicio de terceros, para evitar agregar la administración del sistema a nuestro ya estirado tiempo. Como tenemos algunos fondos donados, este servicio puede ser pago si ofrece ventajas significativas de ahorro de tiempo sobre las ofertas gratuitas.
Compatibilidad con versiones anteriores #
La compatibilidad con versiones anteriores no es una preocupación importante para este eurodiputado. Reemplazaremos las herramientas y los procedimientos actuales con algo mejor y desecharemos los antiguos.
Alternativas #
Notas de conversación #
Infraestructura CI #
Nos gusta Travis y probablemente seguirá siendo parte de nuestro arsenal en cualquier caso. Se están investigando los problemas de fiabilidad.
Habilite las cargas de Amazon S3 de productos de prueba en Travis. Esto ayudará con la autopsia de fallas (@mdboom está investigando esto ahora).
Queremos cobertura Mac. La mejor apuesta es probablemente presionar a Travis para que lo habilite para nuestro proyecto pagándoles por una cuenta Pro (ya que de otro modo no permiten realizar pruebas en Linux y Mac).
Queremos cobertura de Windows. Shining Panda es una opción allí.
Investigue para encontrar o crear una herramienta que recopile y sintetice los resultados de las pruebas de varias fuentes y publíquela en GitHub usando la API de GitHub. Esto puede ser de uso general para la comunidad Scipy.
Tanto para Windows como para Mac, debemos documentar (o mejor aún, escribir un script) el proceso de configuración de la máquina para una compilación y cómo compilar archivos binarios e instaladores. Esto puede requerir obtener información de Russel Owen y Christoph Gohlke. Este es un paso necesario para hacer compilaciones automatizadas, pero también sería valioso por otras razones.
El marco de prueba en sí mismo #
Deberíamos investigar formas de hacer que tome menos tiempo.
Eliminar pruebas redundantes, si es posible.
Las mejoras generales de rendimiento en matplotlib ayudarán
Deberíamos estar cubriendo más cosas, particularmente más backends
Deberíamos tener más pruebas unitarias, menos pruebas de integración, si es posible.