Integración y Despliegue Continuo (CI/CD)¶
El proyecto utiliza una estrategia robusta de automatización mediante GitHub Actions para la Integración Continua (CI) y Vercel para el Despliegue Continuo (CD) de la versión web.
Esta arquitectura asegura que cada cambio en el código sea verificado, probado y, si es válido, desplegado a producción automáticamente.
Flujo de Trabajo (Pipeline)¶
Nuestro archivo de configuración .github/workflows/flutter_ci.yml orquesta todo el proceso. A continuación, se detalla el diagrama de flujo de la automatización:
graph TD
%% Nodos de inicio
Start([Push / Pull Request]) --> Init[Checkout & Setup Flutter 3.35.5]
%% Subgrafo de Integración Continua (CI)
subgraph CI_Process [Integración Continua - CI]
Init --> Deps[Instalar Dependencias]
Deps --> Analyze[Flutter Analyze]
Analyze --> Tests[Flutter Test]
end
%% Manejo de Fallos (IssueOps)
Tests -- Falla ❌ --> Report[🤖 Bot: Crear/Actualizar Issue]
Report --> Stop([Fin con Error])
%% Manejo de Éxito
Tests -- Pasa ✅ --> CloseIssue[🤖 Bot: Cerrar Issue si existe]
%% Decisión de Rama
CloseIssue --> BranchCheck{¿Es rama Main?}
%% Subgrafo de Despliegue Continuo (CD)
subgraph CD_Process [Despliegue Continuo - CD]
BranchCheck -- Sí --> Parallel((Inicio Paralelo))
%% Camino Android
Parallel --> BuildAPK[Build APK Release]
BuildAPK --> UploadArt[Subir Artefacto]
UploadArt --> GHRelease[🚀 Crear GitHub Release v#]
%% Camino Web (Vercel)
Parallel --> BuildWeb[Build Web Release]
BuildWeb --> CopyConfig[Copiar .vercel config]
CopyConfig --> DeployVercel[🚀 Deploy a Vercel --prod]
end
BranchCheck -- No (Develop) --> EndDev([Fin Exitoso CI])
GHRelease --> EndProd([Fin Despliegue Prod])
DeployVercel --> EndProd
Etapas del Pipeline¶
1. Integración Continua (CI)¶
Se ejecuta en las ramas develop y main.
Entorno
- Servidor:
ubuntu-latest - Flutter: 3.35.5
Calidad de Código
flutter analyzeDetecta errores de sintaxis y estilo.flutter testEjecuta pruebas unitarias de ViewModels y lógica de negocio.
Gestión Automática de Errores (IssueOps)
-
Si el build falla:
- Un bot crea automáticamente un Issue en GitHub
- Se etiqueta al autor del commit
- Se adjuntan los logs del error
-
Si el build se corrige en el siguiente commit:
-
El bot comenta en el Issue
- El Issue se cierra automáticamente
2. Despliegue Continuo (CD)¶
Se ejecuta exclusivamente en la rama main.
📱 Android (GitHub Releases)¶
- Se genera el archivo
.apkde producción. - Se crea un Release en GitHub etiquetado con el número de ejecución
(ej.
v45). - El instalador se adjunta para descarga directa.
🌐 Web (Vercel)¶
Se utiliza Vercel para el hosting de la versión web administrativa.
Build
flutter build web --release
- Se inyecta la identidad del proyecto
(`.vercel/project.json`) en la carpeta de compilación
- Asegura el enlace correcto con la organización
Despliegue
- Se utiliza `amondnet/vercel-action`
- Se suben los archivos estáticos
- Se fuerza la actualización de producción
Estrategia de Pruebas¶
Nota: Los detalles específicos de los tests se encuentran en la sección Estrategia de Pruebas.
El proceso de CI asegura la ejecución de:
-
Pruebas Unitarias
LoginViewModelRegisterViewModelStudentLookupViewModel-
Mocks
-
Uso de
mockito - Simulación de Firebase durante la integración