Lanzamiento e implementación
omegaUp utiliza GitHub Actions para una integración continua e implementaciones automatizadas. Esta guía cubre el proceso de implementación, los entornos y los procedimientos de lanzamiento.
Entornos de implementación
Producción
| Atributo | Valor |
|---|---|
| URL | omegaup.com |
| Horario | Noches automáticas de fin de semana (hora del centro de México) |
| Disparador | Acción programada de GitHub |
| Requisitos | Todas las pruebas pasan, sin problemas de bloqueo |
Las implementaciones de producción están programadas para minimizar el impacto en los usuarios:
flowchart LR
Main[main branch] --> Nightly{Weekend Night?}
Nightly -->|Yes| Tests[Run All Tests]
Tests -->|Pass| Deploy[Deploy to Prod]
Tests -->|Fail| Alert[Alert Team]
Nightly -->|No| Wait[Wait for Weekend]
Sandbox (puesta en escena)
| Atributo | Valor |
|---|---|
| URL | sandbox.omegaup.com |
| Disparador | Cada fusión con la sucursal main |
| Propósito | Pruebas de preproducción |
| Datos | Subconjunto de datos de producción |
Las implementaciones de Sandbox se realizan automáticamente:
flowchart LR
PR[Pull Request] --> Merge[Merge to main]
Merge --> Deploy[Deploy to Sandbox]
Deploy --> Verify[Team Verification]
Correcciones
Para problemas críticos de producción:
| Atributo | Valor |
|---|---|
| Disparador | Implementación manual |
| Proceso | Se requiere validación interna |
| Aprobación | 2 miembros del equipo mínimo |
Canalización de CI/CD
Comprobaciones de solicitud de extracción
Cada RP debe pasar estas comprobaciones antes de fusionarse:
flowchart TB
PR[Pull Request] --> Parallel
subgraph Parallel[Parallel Checks]
PHP[PHP Tests]
JS[JavaScript Tests]
Lint[Linting]
Psalm[Type Checking]
Cypress[E2E Tests]
Python[Python Tests]
end
Parallel --> Review[Code Review]
Review --> Merge[Merge to main]
Conjuntos de pruebas
| Suite | Herramienta | Cobertura | Hora |
|---|---|---|---|
| Pruebas unitarias de PHP | Unidad PHP | Controladores, bibliotecas | ~5 minutos |
| Pruebas de JavaScript | Broma | Componentes de Vue | ~3 minutos |
| Pruebas de un extremo a otro | Ciprés | Flujos críticos | ~15 minutos |
| Pruebas de Python | pytest | Cronjobs, scripts | ~2 minutos |
| Tipo de cheques | Salmo | Tipos de PHP | ~2 minutos |
| pelusa | ESLint, PHP-CS-Fixer | Estilo | ~1 minuto |
Reglas de pelusa
Estándares aplicados:
# PHP
- PSR-12 coding standard
- Strict types required
- Psalm type annotations
# TypeScript
- ESLint strict mode
- Prettier formatting
- No any types (where possible)
# Python
- PEP 8 style
- Type hints required
Cobertura de código
Usamos Codecov para realizar un seguimiento de la cobertura de las pruebas:
| Idioma | Cobertura actual | Objetivo |
|---|---|---|
| PHP | ~70% | 80% |
| Mecanografiado | ~60% | 70% |
| Ciprés E2E | No medido | Por determinar |
Requisitos de cobertura:
- Los RP no deberían disminuir la cobertura
- El nuevo código debe tener pruebas.
- Las rutas críticas requieren >80% de cobertura
Proceso de implementación
Implementación de producción automatizada
# .github/workflows/deploy-production.yml (simplified)
name: Deploy Production
on:
schedule:
- cron: '0 6 * * 0' # Sunday 6 AM UTC (midnight CDT)
jobs:
deploy:
runs-on: ubuntu-latest
steps:
- name: Run All Tests
run: ./stuff/run-tests.sh
- name: Build Assets
run: yarn build
- name: Deploy to Production
run: ./stuff/deploy.sh production
- name: Smoke Tests
run: ./stuff/smoke-tests.sh
- name: Notify Team
run: ./stuff/notify.sh
Implementación manual de revisiones
- Crear rama de revisión:
git checkout -b hotfix/critical-bug main - Aplicar corrección y prueba:
# Make changes ./stuff/run-tests.sh - Solicitar aprobación:
- Crear PR con etiqueta
hotfix -
Obtener 2 aprobaciones
-
Implementar manualmente:
./stuff/deploy.sh production --hotfix
Lista de verificación de implementación
Pre-implementación
- [] Todas las comprobaciones de CI pasan
- [] Revisión de código aprobada
- [] Migraciones de bases de datos probadas
- [] No hay problemas de bloqueo en el trabajo pendiente
- [] Plan de reversión documentado
Post-implementación
- Pasan las pruebas de humo
- [] Monitorear tasas de error
- [] Verificar métricas clave
- Verificar flujos críticos
- [] Actualizar página de estado
Migraciones de bases de datos
Proceso de migración
flowchart TD
Change[Schema Change] --> Write[Write Migration]
Write --> Test[Test Locally]
Test --> PR[Submit PR]
PR --> Review[Review Migration]
Review --> Merge[Merge]
Merge --> Sandbox[Run on Sandbox]
Sandbox --> Verify[Verify]
Verify --> Prod[Run on Production]
Mejores prácticas
- Compatible con versiones anteriores: las migraciones no deberían interrumpir el código en ejecución
- Reversible: Incluye migración hacia abajo
- Pequeños cambios: un cambio de esquema por migración
- Probado: ejecutar localmente antes de PR
// Example migration
class AddUserPreferences extends Migration {
public function up() {
$this->execute('
ALTER TABLE Users
ADD COLUMN preferences JSON DEFAULT NULL
');
}
public function down() {
$this->execute('
ALTER TABLE Users
DROP COLUMN preferences
');
}
}
Procedimientos de reversión
Reversión rápida
Si se detectan problemas inmediatamente:
# Revert to previous deployment
./stuff/deploy.sh production --rollback
# Verify rollback
./stuff/smoke-tests.sh
Reversión de la base de datos
Si la migración causó problemas:
# Run down migration
docker-compose exec frontend php stuff/database/migrate.php down
# Verify schema
docker-compose exec mysql mysql -u omegaup -p omegaup -e "DESCRIBE Users"
Monitoreo después de la implementación
Métricas clave a tener en cuenta
| Métrica | Normales | Advertencia | Crítico |
|---|---|---|---|
| Tasa de errores | <0.1% | >1% | >5% |
| Tiempo de respuesta (p95) | <500ms | >1s | >3s |
| Longitud de la cola | <10 | >50 | >100 |
Alertas
Se activan alertas automáticas para:
- Aumento de la tasa de error (>5 veces lo normal)
- Degradación del tiempo de respuesta
- Indisponibilidad del servicio
- Problemas de conexión a la base de datos
Documentación relacionada
- Monitoreo - Configuración de monitoreo
- Solución de problemas - Problemas comunes
- Configuración de Docker - Configuración del contenedor
- Pruebas - Directrices de prueba