Ferraz Fagundes bd0ecabf41
ci / lint, typecheck, testes e build (push) Has been cancelled
ci / Postgres e Redis reais (push) Has been cancelled
ci / imagem Docker Linux (push) Has been cancelled
test(smoke): adiciona validacao completa do ambiente local
2026-10-17 00:37:09 -03:00
2026-10-02 23:59:36 -03:00

Adaptador de Planilhas

Módulo do Elo Pro para validar planilhas XLSX/CSV, mapear colunas para um modelo e gerar um arquivo novo. Não há login, senha ou tabela de usuários própria: a identidade é a do ecossistema.

Ambiente Host ADAPTER_ENV Autenticação
Desenvolvimento localhost:3000 development sessão local assinada, sem senha
Homologação hml-ada.elopro.app staging Supabase Auth do projeto de homologação
Produção ada.elopro.app production SSO do Elo Pro

ADAPTER_ENV é independente de NODE_ENV: homologação roda com NODE_ENV=production (build otimizado) e política própria. Ver ADR 0007.

Desenvolvimento local

npm install
cp .env.example .env.local

No .env.local:

ADAPTER_ENV=development
ADAPTER_DEV_AUTH=1
ADAPTER_DEV_AUTH_SECRET=um-segredo-local
ADAPTER_JOB_MODE=inline
npm run dev

Abra /login e escolha uma identidade de desenvolvimento. Não há senha: apenas assume um vínculo que o seed cria em profiles e workspace_members.

Com Docker, igual ao artefato de homologação

Mesma imagem, dois processos, Postgres e Redis de verdade:

docker compose up --build
docker compose exec web node node_modules/tsx/dist/cli.mjs scripts/migrate.ts

Portas só em 127.0.0.1: web 3000, Postgres 55432, Redis 56379.

O serviço storage-init prepara o volume do armazenamento e termina antes de web e worker subirem; os dois continuam como uid 1001. Ver 23-storage-permissions.md.

Homologação

O procedimento completo — DNS, Nginx, Supabase, banco, bucket, containers, worker, observabilidade e rollback — está em docs/spreadsheet-adapter/20-homologacao-runbook.md. O estado de validação está em 21-checklist-validacao.md.

Resumo:

cp .env.staging.example .env.staging   # preencher; não versionar
npm run verify:config                  # recusa configuração incompleta
npm run check:bucket                   # o bucket precisa existir e ser privado
npm run migrate:check                  # mostra o que vai rodar
npm run migrate                        # aplica (passo com aprovação manual)
npm run seed:staging                   # liga identidades do Supabase a workspaces
docker compose -f docker-compose.staging.yml --env-file .env.staging up -d --no-deps web worker
ADAPTER_SMOKE_URL=https://hml-ada.elopro.app npm run smoke:staging
npm run flag -- <workspace_id> on      # último passo, depois do smoke

ADAPTER_APPLY_IDENTITY_SHIM é obrigatória fora de development: 1 cria o shim local de identidade, 0 usa o schema existente do Elo Pro. Aplicar o shim sobre um schema real é destrutivo em potencial, por isso a escolha nunca é inferida.

Produção

Além das variáveis de homologação, produção exige SENTRY_DSN e ELO_PRO_LOGIN_URL, e recusa ADAPTER_STAGING_AUTH=1. A feature flag spreadsheet_adapter nasce desligada e é ligada por workspace com npm run flag, usando a conexão de serviço, nunca pelo browser.

O processamento usa ADAPTER_JOB_MODE=worker e o processo npm run worker. inline é recusado fora de development.

Produção não é liberada sem smoke real e ensaio de rollback registrados no checklist.

Saúde

Rota O que responde
GET /api/health/live processo vivo, sem tocar dependência
GET /api/health/ready banco, migrations pendentes, Redis (PING), bucket, configuração e modo de job

Configuração inválida encerra o processo com código diferente de zero, em vez de deixar o servidor no ar respondendo erro.

Verificação

npm run lint
npm run typecheck
npm test
npm run build

Suíte que exige Postgres e Redis reais (roda no CI, e localmente com os dois serviços em pé):

ADAPTER_TEST_DATABASE_URL=postgres://... ADAPTER_TEST_REDIS_URL=redis://... npm run test:services

Sem essas variáveis os casos são ignorados, nunca aprovados.

O CI tem três jobs: verify (lint, typecheck, testes, build), services (Postgres e Redis reais: as quatro migrations, shim explícito, FORCE RLS, isolamento) e image (build da imagem Linux, conteúdo, fail-fast dos dois processos, compose completo, jornada assíncrona entre processos e desligamento gracioso do worker).

S
Description
No description provided
Readme
560 KiB
0 Stars 1 Watchers 0 Forks
Languages
TypeScript 92.7%
PLpgSQL 6.9%
CSS 0.2%
JavaScript 0.2%