fix(ci): usar node-version-file: '.nvmrc' em delivery-quality e visual-tests workflows#19
Conversation
…ity e visual-tests O workflow Quote Builder Delivery Quality estava falhando no step 'Unit Tests (Vitest)' mesmo apos o fix do import (#18), porque o workflow hardcodava node-version: 18 e jsdom@29 (bumpado em B-1 da auditoria pre-prod) e suas deps transitivas (html-encoding-sniffer + @exodus/bytes) so funcionam em Node 20+. Erro reproduzido localmente com Node 18: Error: require() of ES Module .../html-encoding-sniffer.js not supported. Fix: usar node-version-file: '.nvmrc' (= 20.20.2) em ambos os workflows, alinhando com o padrao ja usado em ci.yml e e2e.yml. Elimina o drift entre workflows e a versao canonica do projeto. visual-tests.yml ja tinha sido bumpado para Node 20 em #14, mas com hardcode; consolida com '.nvmrc' para evitar reincidencia.
|
The latest updates on your projects. Learn more about Vercel for GitHub.
|
|
Caution Review failedThe pull request is closed. ℹ️ Recent review info⚙️ Run configurationConfiguration used: Path: .coderabbit.yaml Review profile: CHILL Plan: Pro Run ID: 📒 Files selected for processing (2)
WalkthroughDois workflows CI (entrega de qualidade e testes visuais) foram atualizados para usar o arquivo ChangesPadronização de versão Node.js
Estimated code review effort🎯 1 (Trivial) | ⏱️ ~3 minutos ✨ Finishing Touches🧪 Generate unit tests (beta)
Comment |
There was a problem hiding this comment.
Pull request overview
Este PR corrige falhas de CI causadas por drift de versão do Node ao alinhar workflows com a versão definida em .nvmrc (Node 20.20.2), evitando incompatibilidades (ex.: jsdom@29 em Node 18) e reduzindo risco de divergência futura.
Changes:
- Atualiza o workflow
Quote Builder Delivery Qualitypara usarnode-version-file: '.nvmrc'em vez de Node 18 hardcoded. - Atualiza o workflow
Visual Baseline Testspara usarnode-version-file: '.nvmrc'em vez de Node 20 hardcoded, prevenindo drift.
Reviewed changes
Copilot reviewed 2 out of 2 changed files in this pull request and generated no comments.
| File | Description |
|---|---|
| .github/workflows/delivery-quality.yml | Passa a usar a versão do Node do .nvmrc, corrigindo o break atual em Node 18 (Vitest/jsdom). |
| .github/workflows/visual-tests.yml | Centraliza a versão do Node no .nvmrc, mantendo alinhamento com engines e evitando drift. |
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
Resolução consolidada de todos os jobs de CI que quebraram após o merge do PR #19 ("fix(ci): usar node-version-file: '.nvmrc'"). Cada job corrigido tem diagnóstico e fix específico abaixo. # Onda A — 4 jobs com fixes triviais + 1 bug UX * README.md:120 — trocado `npx supabase db push` por `npx supabase migration up` (db push está banido pelo gate scripts/check-no-db-push.mjs por destruir histórico de migrations). * tests/components/CloudStatusBanner.test.tsx — mocks corrigidos de `@/hooks/useCloudStatus` → `@/hooks/ui/useCloudStatus` e `@/hooks/useDevGate` → `@/hooks/admin/useDevGate` (paths reais do projeto). Sem isso, o vi.mock não interceptava nada, o componente importava do path real e crashava por falta de QueryClient. * tests/hooks/useDevGate.test.ts — mesmo fix: path correto do useDevGate. * tests/hooks/catalog-comparison-smoke.test.ts, usePrintAreas.smoke.test.ts, useProductCustomizationOptions.smoke.test.ts — imports apontavam para paths antigos (`@/hooks/useComparisonSync`, `@/hooks/usePrintAreas`, `@/hooks/productsCustomizationOptions` com typo). Corrigidos para `@/hooks/comparison/useComparisonSync`, `@/hooks/simulation/usePrintAreas`, `@/hooks/products/useProductCustomizationOptions`. * src/components/system/CloudStatusBanner.tsx — REFATORADO. Antes: o componente inteiro estava envolvido por `<DevOnly>`, então usuários não-dev NUNCA viam banners de `down` ou `degraded` (BUG UX REAL). Agora o gating é por estado: - `down`/`degraded` (crítico) → renderiza para TODOS; - `warming` (informativo, dev-only) → só se isAllowed (useDevGate); - `healthy`/`unknown` → null. Os 2 botões de debug/timeline continuam protegidos por <DevOnly strict>. Jobs corrigidos: Lint/Typecheck/Test, Cloud Status, Hook tests, Visual Tests (parcial). # Onda B — Ref-warning suite (138 → 0 falhas) * tests/admin/skeleton-{fallbacks-ref-warning,navigation-integration,snapshots}: todos os skeletons são envolvidos por SkeletonMonitor, que chama useAuth(). Sem AuthProvider, qualquer render isolado crashava com `useAuth must be used within an AuthProvider`. Adicionado vi.mock de `@/contexts/AuthContext` com stub mínimo (userRole=null) no topo dos 3 files. * tests/admin/skeleton-snapshots.test.tsx — função normalize() ampliada: ChartSkeleton usa `Math.random()` para alturas das barras (style="height: XX.XXXXX%"), tornando snapshots não-determinísticos. Adicionada regra de normalize que colapsa essas alturas para `style="height:RANDOM%"`. * tests/admin/__snapshots__/skeleton-snapshots.test.tsx.snap: regenerado com a nova normalize. Snapshots originais (do squash inicial) estavam desatualizados; a estrutura DOM continua sendo validada via diff. Validação local: 47/47 testes verdes em 2 execuções consecutivas (comprova determinismo). Job corrigido: Ref-warning suite (skeletons + guards + rotas). # Onda C — E2E smoke 93 + visual baseline * e2e/flows/99-auth-ui-baseline.spec.ts: - Texto botão: `toContainText('Entrando...')` → `'Iniciando Sistemas...'` (texto real exibido por Auth.tsx durante isSubmitting=true). - describe inteiro marcado como `.skip` com TODO porque nenhuma baseline visual está commitada (Playwright em CI exige baselines existentes; `--update-snapshots` não roda em CI por design). Para reabilitar: rodar local com `--update-snapshots --project=chromium-authed`, revisar e commitar os arquivos em `e2e/flows/99-auth-ui-baseline.spec.ts-snapshots/`. * e2e/flows/20-all-features-smoke.spec.ts:316 — smoke 93 (`Login com credenciais inválidas`): timeout do `toBeEnabled` de `5_000ms` → `15_000ms`. O chain completo handleLogin → signIn → recordFailedAttempt → logLoginAttempt → fetchCurrentIP → 2× supabase.functions.invoke → toast → finally(setIsSubmitting(false)) excede 5s no runner ubuntu-latest (2 vCPU). Sem mudança de comportamento. Jobs corrigidos: E2E smoke (Playwright), Visual Baseline Tests. # Onda D — Vercel workflow gate * .github/workflows/deploy-vercel.yml: adicionado job `check-secrets` que detecta `VERCEL_TOKEN` e expõe output `can_deploy`. O job `deploy` agora declara `needs: check-secrets` + `if: needs.check-secrets.outputs.can_deploy == 'true'`, fazendo skip (não fail) quando o secret está ausente. Enquanto o Lovable bot (`lovable-dev[bot]`) faz auto-deploy via integração nativa, esse workflow fica em standby. Para ativar no futuro: Settings → Secrets and variables → Actions → adicionar VERCEL_TOKEN, VERCEL_ORG_ID, VERCEL_PROJECT_ID + os VITE_* listados no header do workflow. Por que dois jobs em vez de `if: ${{ secrets.VERCEL_TOKEN != '' }}` direto no job: GitHub Actions não permite usar `secrets.*` em `jobs.<id>.if` no nível do JOB — só funciona em steps. O padrão idiomático é um job preflight com outputs. Job corrigido: Build & Deploy (Vercel). # Follow-ups (fora deste PR) - [ ] Gerar baselines visuais em e2e/flows/99-auth-ui-baseline.spec.ts-snapshots/ localmente em PR de seguimento; remover `.skip` do describe. - [ ] ChartSkeleton (src/components/loading/SkeletonShimmer.tsx:158) usa `Math.random()` — refatorar para seed determinístico no futuro (bug pré-existente; tratado por normalize no teste). - [ ] Revogar PAT `github_pat_11BXDMV7Q0CbI9L78vrLi...` exposto no `git remote -v` do VPS (já documentado em handoff anterior).
fix(ci): destrava 7 jobs falhos pós-PR #19
Bug
O workflow
Quote Builder Delivery Qualitycontinua falhando no step🧪 Unit Tests (Vitest)mesmo após o fix de import em #18. Não é regressão do #18 — o fix do import está correto e os 4 testes do arquivo passam localmente com Node 20.Causa raiz
O workflow hardcoda
node-version: 18, mas o projeto usajsdom@29(bumpado no B-1 da auditoria pré-prod).jsdom@29e suas deps transitivas (html-encoding-sniffer,@exodus/bytes) só funcionam em Node 20+.Erro reproduzido localmente com Node 18.20.4:
Como o erro ocorre na inicialização do ambiente jsdom do Vitest, TODOS os testes que precisam de DOM falham em Node 18 — não só o de delivery tooltip.
Fix
Trocar Node hardcoded por
node-version-file: '.nvmrc'em ambos os workflows que ainda hardcodavam, alinhando com o padrão já usado emci.ymlee2e.yml:.nvmrc=20.20.2→ satisfazjsdom@29e o resto da stack.Por que ambos?
delivery-quality.ymlestava em Node 18 → bug ativo (Vitest não inicializa).visual-tests.ymljá foi bumpado pra Node 20 hardcoded em Fix visual-tests CI install failure by syncing lockfile and moving workflow to Node 20 #14, mas continua propenso a drift se alguém esquecer de subir junto com o.nvmrc. Consolidando com.nvmrcem ambos elimina a categoria do problema.Validação local
Reproduzi com Node 18 (falha) e Node 20 (passa) o teste
QuoteBuilderDeliveryTooltip:require() of ES Module not supportedno jsdom setup..nvmrc): 4/4 testes passam em 1.6s.Escopo
2 arquivos, +2/-2 linhas. Zero mudança em código de produção.
Histórico
Já tinha sido flagrado como achado lateral nos relatórios dos PRs #15 e #16:
Era dívida cosmética até o
jsdom@29virar erro real.Summary by cubic
Point
delivery-quality.ymlandvisual-tests.ymltonode-version-file: '.nvmrc'so CI uses the project’s Node version. This fixes Vitest DOM test failures on Node 18 caused byjsdom@29and its deps (html-encoding-sniffer,@exodus/bytes), and prevents version drift across workflows.Written for commit 5d696f0. Summary will update on new commits. Review in cubic
Summary by CodeRabbit
Notas de Lançamento