Liberação e implantação
omegaUp usa GitHub Actions para integração contínua e implantações automatizadas. Este guia aborda o processo de implantação, os ambientes e os procedimentos de liberação.
Ambientes de implantação
Produção
| Atributo | Valor |
|---|---|
| URL | omegaup.com |
| Programação | Noites automáticas de fim de semana (horário do México Central) |
| Gatilho | Ação agendada do GitHub |
| Requisitos | Todos os testes foram aprovados, sem problemas de bloqueio |
As implantações de produção são programadas para minimizar o impacto do usuário:
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 (preparação)
| Atributo | Valor |
|---|---|
| URL | sandbox.omegaup.com |
| Gatilho | Cada mesclagem com a ramificação main |
| Objetivo | Testes de pré-produção |
| Dados | Subconjunto de dados de produção |
As implantações de sandbox acontecem automaticamente:
flowchart LR
PR[Pull Request] --> Merge[Merge to main]
Merge --> Deploy[Deploy to Sandbox]
Deploy --> Verify[Team Verification]
Correções
Para problemas críticos de produção:
| Atributo | Valor |
|---|---|
| Gatilho | Implantação manual |
| Processo | Validação interna necessária |
| Aprovação | Mínimo de 2 membros da equipe |
Pipeline de CI/CD
Verificações de solicitação pull
Cada PR deve passar por estas verificações antes da fusão:
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 testes
| Suíte | Ferramenta | Cobertura | Tempo |
|---|---|---|---|
| Testes de Unidade PHP | Unidade PHP | Controladores, Bibliotecas | ~5 minutos |
| Testes de JavaScript | Brincadeira | Componentes Vue | ~3 minutos |
| Testes ponta a ponta | Cipreste | Fluxos críticos | ~15 minutos |
| Testes Python | pytest | Cronjobs, scripts | ~2 minutos |
| Verificação de tipo | Salmo | Tipos PHP | ~2 minutos |
| Linting | ESLint, PHP-CS-Fixer | Estilo | ~1 minuto |
Regras de Linting
Padrões 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 rastrear a cobertura do teste:
| Idioma | Cobertura Atual | Alvo |
|---|---|---|
| PHP | ~70% | 80% |
| Datilografado | ~60% | 70% |
| Cipreste E2E | Não medido | A definir |
Requisitos de cobertura:
- Os RP não devem diminuir a cobertura
- Novo código deve ter testes
- Caminhos críticos requerem >80% de cobertura
Processo de implantação
Implantação de produção 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
Implantação manual de hotfix
- Criar ramificação de hotfix:
git checkout -b hotfix/critical-bug main - Aplicar correção e testar:
# Make changes ./stuff/run-tests.sh - Solicitar aprovação:
- Criar PR com rótulo
hotfix -
Obtenha 2 aprovações
-
Implante manualmente:
./stuff/deploy.sh production --hotfix
Lista de verificação de implantação
Pré-implantação
- [] Todas as verificações de CI são aprovadas
- [] Revisão de código aprovada
- [] Migrações de banco de dados testadas
- [] Sem problemas de bloqueio no backlog
- [] Plano de reversão documentado
Pós-implantação
- [] Testes de fumaça aprovados
- [] Monitorar taxas de erro
- [] Verifique as principais métricas
- Verificar fluxos críticos
- [] Atualizar página de status
Migrações de banco de dados
Processo de migração
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]
Melhores Práticas
- Compatível com versões anteriores: as migrações não devem interromper o código em execução
- Reversível: Inclui migração descendente
- Pequenas alterações: uma alteração de esquema por migração
- Testado: Execute localmente antes do 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
');
}
}
Procedimentos de reversão
Reversão rápida
Se os problemas forem detectados imediatamente:
# Revert to previous deployment
./stuff/deploy.sh production --rollback
# Verify rollback
./stuff/smoke-tests.sh
Reversão do banco de dados
Se a migração causou 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"
Monitoramento após a implantação
Principais métricas a serem observadas
| Métrica | Normais | Aviso | Crítico |
|---|---|---|---|
| Taxa de erro | <0.1% | >1% | >5% |
| Tempo de resposta (pág. 95) | <500ms | >1s | >3s |
| Comprimento da fila | <10 | >50 | >100 |
Alertas
Acionadores de alertas automatizados para:
- Aumento da taxa de erro (>5x normal)
- Degradação do tempo de resposta
- Indisponibilidade do serviço
- Problemas de conexão com o banco de dados
Documentação Relacionada
- Monitoramento - Configuração de monitoramento
- Solução de problemas - Problemas comuns
- Configuração do Docker - Configuração do contêiner
- Teste - Diretrizes de teste