mirror of
https://github.com/diegosouzapw/OmniRoute.git
synced 2026-08-05 06:42:12 +03:00
T-15 — Decompose usageDb.js (969→40 lines): - Extract src/lib/usage/migrations.js (legacy + JSON→SQLite migration) - Extract src/lib/usage/usageHistory.js (tracking, pending, log.txt) - Extract src/lib/usage/costCalculator.js (pure cost calculation) - Extract src/lib/usage/usageStats.js (dashboard aggregation) - Extract src/lib/usage/callLogs.js (structured logs, CRUD, rotation) - usageDb.js is now a thin facade re-exporting all functions T-28 — Decompose handleSingleModelChat (183→80 lines): - Extract handleNoCredentials() — credential error responses - Extract safeResolveProxy() — proxy resolution with error handling - Extract safeLogEvents() — fire-and-forget proxy + translation logging - Also created chatHelpers.js with standalone helper exports T-29 — Extract shared UI primitives (3230 total lines): - FilterBar.js — search input + filter chips dropdown - ColumnToggle.js — table column visibility toggle - DataTable.js — generic data table with sticky header, loading/empty Tests: 88/88 pass (no regressions)
5.4 KiB
5.4 KiB
FASE 02 — CI/CD & Infraestrutura de Testes
Prioridade: 🔴 Crítica
Estimativa de Complexidade: Média (3–5 dias)
Dimensões do Relatório: D7 (Testes, CI/CD)
Dependências: FASE-01 (segredos validados são necessários para CI funcional)
Objetivo
Estabelecer pipeline de integração contínua com execução automática de testes, linting, e build em cada PR/push, e configurar infraestrutura de cobertura de testes para garantir qualidade mínima.
Escopo Detalhado
2.1 — Criação do CI Pipeline
Origem no relatório: D7 — Ausência de CI Pipeline (🔴 Crítico)
Especificação Técnica
- Criar
.github/workflows/ci.ymlcom jobs:- lint —
npm run lintcom cache denode_modules. - build —
npm run buildpara verificar compilação. - test:unit — Execução de testes unitários com
node --test. - test:e2e — Execução de
npx playwright test(com Playwright instalado).
- lint —
- Triggers: push para
main, pull_request para qualquer branch. - Matrix: Node.js 18 e 22.
- Cache:
node_modulese.next/cache.
Critérios de Aceite
- Workflow
ci.ymlexecuta em PRs e pushes paramain. - Todos os 4 jobs (lint, build, test:unit, test:e2e) executam.
- PR não pode ser mergeado se CI falhar (branch protection rule).
- Tempo de execução total < 10 minutos.
2.2 — Correção do Script test no package.json
Origem no relatório: D7 — "test": "npm run build" (🔴 Crítico)
Especificação Técnica
- Alterar
"test"para executar testes reais:"test": "node --test tests/unit/*.test.mjs", "test:unit": "node --test tests/unit/*.test.mjs", "test:e2e": "npx playwright test", "test:all": "npm run test:unit && npm run test:e2e" - Manter
"check"como agregador:"npm run lint && npm run test:unit".
Critérios de Aceite
npm testexecuta testes unitários reais.npm run test:allexecuta unit + e2e.- CI usa os mesmos scripts definidos no
package.json.
2.3 — Configuração de Cobertura de Testes
Origem no relatório: D7 — Cobertura de Testes Incerta (🔴 Crítico)
Especificação Técnica
- Configurar
c8como ferramenta de cobertura:"test:coverage": "c8 --reporter=text --reporter=lcov node --test tests/unit/*.test.mjs" - Definir target mínimo: 40% de cobertura (baseline realista).
- Gerar relatório lcov para upload em CI (Codecov ou similar).
- Adicionar badge de cobertura no README.
Critérios de Aceite
npm run test:coveragegera relatório de cobertura.- Relatório inclui todas as subpastas de
src/. - CI faz upload do relatório de cobertura.
2.4 — Melhoria da Configuração ESLint
Origem no relatório: D7 — Sem Análise Estática de Código (🟠 Importante)
Especificação Técnica
- Adicionar plugins ao ESLint:
eslint-plugin-security— regras de segurança.eslint-plugin-react-hooks— regras de hooks React.
- Configurar no
eslint.config.mjscom severidadewarninicialmente. - Executar lint e resolver erros/warnings existentes antes de ativar em CI.
Critérios de Aceite
- Plugins instalados e configurados.
npm run lintexecuta sem erros bloqueantes.- CI executa lint como parte do pipeline.
2.5 — Conversão de Testes de Segurança
Origem no relatório: D7 — Testes shell manuais (🟠 Importante)
Especificação Técnica
- Converter os 4 scripts de
tests/security/em testes programáticos:test-cli-runtime.sh→tests/integration/cli-runtime.test.mjstest-cloud-openai-compatible.sh→tests/integration/cloud-openai.test.mjstest-cloud-sync-and-call.sh→tests/integration/cloud-sync.test.mjstest-docker-hardening.sh→tests/integration/docker-hardening.test.mjs
- Usar Node.js test runner com
child_process.execpara testes que dependem de shell. - Marcar testes que dependem de infra externa como
skippor default em CI.
Critérios de Aceite
- Scripts shell convertidos em arquivos
.test.mjs. - Testes executáveis via
node --test tests/integration/*.test.mjs. - Testes que dependem de Docker/Cloud marcados como conditional skip.
Pré-Requisitos
- FASE-01 completa (segredos configurados para ambiente de CI).
- Acesso a GitHub Actions (secrets configurados).
- Node.js 18+ no runner de CI.
Entregáveis
- Workflow
ci.ymlfuncional. - Scripts de test corrigidos no
package.json. - Configuração de cobertura com
c8. - ESLint com plugins de segurança e React hooks.
- Testes de segurança convertidos.
Critérios de Conclusão da Fase
- CI pipeline verde em PR de teste.
- Cobertura de testes mensurada e reportada.
- ESLint passa no CI sem erros.
Riscos Identificados
| Risco | Probabilidade | Impacto | Mitigação |
|---|---|---|---|
| Testes e2e flaky em CI | Alta | Médio | Retry strategy no Playwright config |
| ESLint com muitos warnings bloqueantes | Média | Baixo | Começar com warn, não error |
| Testes de segurança dependem de Docker | Alta | Baixo | Skip condicional com check de Docker |