Integración continua (CI)#
La integración continua (CI) es un aspecto esencial del desarrollo de software que implica integrar cambios y probarlos automáticamente. CI nos permite mantener un código de alta calidad detectando problemas de forma frecuente y temprana en el proceso de desarrollo. En Ultralytics, utilizamos varias pruebas de CI para garantizar la calidad y la integridad de nuestro código base.
Acciones de CI#
Aquí tienes una breve descripción de nuestras acciones de CI:
- CI: Esta es nuestra prueba de CI principal que incluye la ejecución de pruebas unitarias, comprobaciones de estilo (linting) y, a veces, pruebas más exhaustivas según el repositorio.
- Docker Deployment: Esta prueba comprueba el despliegue del proyecto usando Docker para garantizar que el Dockerfile y los scripts relacionados funcionen correctamente.
- Broken Links: Esta prueba escanea la base de código en busca de enlaces rotos o caídos en nuestros archivos markdown o HTML.
- CodeQL: CodeQL es una herramienta de GitHub que realiza un análisis semántico de nuestro código, ayudando a encontrar posibles vulnerabilidades de seguridad y a mantener un código de alta calidad.
- PyPI Publishing: Esta prueba comprueba si el proyecto se puede empaquetar y publicar en PyPI sin errores.
Resultados de CI#
A continuación se muestra la tabla con el estado de estas pruebas de CI para nuestros repositorios principales:
| Repositorio | CI | Despliegue de Docker | Enlaces rotos | CodeQL | Publicación en PyPI y Docs |
|---|---|---|---|---|---|
| yolov3 | |||||
| yolov5 | |||||
| ultralytics | |||||
| yolo-ios-app | |||||
| yolo-flutter-app | |||||
| thop | |||||
| actions | |||||
| mkdocs | |||||
| docs | |||||
| handbook | |||||
| stars | |||||
| CLIP |
Cada insignia muestra el estado de la última ejecución de la prueba de CI correspondiente en la rama main del repositorio respectivo. Si una prueba falla, la insignia mostrará un estado de error ("failing"), y si se supera, mostrará un estado de éxito ("passing").
Si notas que una prueba falla, sería de gran ayuda si pudieras informarlo a través de un issue de GitHub en el repositorio respectivo.
Recuerda que una prueba de CI exitosa no significa que todo sea perfecto. Siempre se recomienda revisar manualmente el código antes del despliegue o de fusionar cambios.
Cobertura de código#
La cobertura de código es una métrica que representa el porcentaje de tu código base que se ejecuta cuando se realizan las pruebas. Proporciona información sobre qué tan bien tus pruebas ejercitan tu código y puede ser crucial para identificar partes no probadas de tu aplicación. Un alto porcentaje de cobertura de código suele asociarse con una menor probabilidad de errores. Sin embargo, es esencial entender que la cobertura de código no garantiza la ausencia de defectos. Simplemente indica qué partes del código han sido ejecutadas por las pruebas.
Integración con codecov.io#
En Ultralytics, hemos integrado nuestros repositorios con codecov.io, una plataforma online popular para medir y visualizar la cobertura de código. Codecov proporciona información detallada, comparaciones de cobertura entre commits y superposiciones visuales directamente en tu código, indicando qué líneas están cubiertas.
Al integrarnos con Codecov, nuestro objetivo es mantener y mejorar la calidad de nuestro código enfocándonos en áreas que podrían ser propensas a errores o que necesiten más pruebas.
Resultados de cobertura#
Para ver rápidamente un resumen del estado de la cobertura de código de nuestros repositorios, hemos incluido insignias de Codecov y vistas previas en forma de gráfico de sectores (sunburst) para cada proyecto rastreado. El círculo más interno de cada gráfico representa todo el proyecto; alejándose del centro se encuentran las carpetas y, finalmente, un único archivo. El tamaño y el color de cada porción representan el número de sentencias y la cobertura, respectivamente. Para todos los detalles, visita la organización de Codecov de Ultralytics.
| Repositorio | Cobertura de código | Sunburst |
|---|---|---|
| actions | ||
| ultralytics | ||
| inference | ||
| yolo-flutter-app | ||
| yolo-ios-app | ||
| llm | ||
| profile | ||
| template | ||
| template-rust | ||
| replicate |
FAQ#
La integración continua (CI) en Ultralytics implica integrar y probar automáticamente los cambios de código para garantizar estándares de alta calidad. Nuestra configuración de CI incluye la ejecución de pruebas unitarias, comprobaciones de estilo y pruebas exhaustivas. Además, realizamos el despliegue en Docker, comprobaciones de enlaces rotos, análisis de CodeQL para detectar vulnerabilidades de seguridad y publicación en PyPI para empaquetar y distribuir nuestro software.
Ultralytics utiliza una acción de CI específica para comprobar enlaces rotos dentro de nuestros archivos markdown y HTML. Esto ayuda a mantener la integridad de nuestra documentación mediante el escaneo e identificación de enlaces caídos o rotos, asegurando que los usuarios siempre tengan acceso a recursos precisos y activos.
El análisis de CodeQL es crucial para Ultralytics, ya que realiza un análisis de código semántico para encontrar posibles vulnerabilidades de seguridad y mantener estándares de alta calidad. Con CodeQL, podemos identificar y mitigar proactivamente los riesgos en nuestro código, lo que nos ayuda a ofrecer soluciones de software robustas y seguras.
Ultralytics emplea Docker para validar el despliegue de nuestros proyectos mediante una acción de CI dedicada. Este proceso garantiza que nuestro Dockerfile y los scripts asociados funcionen correctamente, lo que permite entornos de despliegue coherentes y reproducibles que son fundamentales para soluciones de IA escalables y fiables.
La publicación en PyPI automatizada garantiza que nuestros proyectos se puedan empaquetar y publicar sin errores. Este paso es esencial para distribuir los paquetes de Python de Ultralytics, permitiendo a los usuarios instalar y utilizar fácilmente nuestras herramientas a través del Python Package Index (PyPI).
Ultralytics mide la cobertura de código integrándose con Codecov, lo que proporciona información sobre qué parte de la base de código se ejecuta durante las pruebas. Una alta cobertura de código puede indicar un código bien probado, ayudando a descubrir áreas no probadas que puedan ser propensas a errores. Las métricas detalladas de cobertura de código se pueden explorar mediante insignias mostradas en nuestros repositorios principales o directamente en Codecov.