Skip to content

chore(husky): pre-push leve por padrão (5s vs 5min)#111

Merged
adm01-debug merged 1 commit into
mainfrom
chore/pre-push-hook-light
May 9, 2026
Merged

chore(husky): pre-push leve por padrão (5s vs 5min)#111
adm01-debug merged 1 commit into
mainfrom
chore/pre-push-hook-light

Conversation

@adm01-debug
Copy link
Copy Markdown
Owner

@adm01-debug adm01-debug commented May 9, 2026

Plano

Tornar o pre-push hook leve por padrão (5s) com opção full opt-in via env var.

Antes vs depois

Antes Depois (default) Depois (HUSKY_FULL=1)
Comando typecheck + lint:baseline lint:baseline typecheck + lint:baseline
Tempo 5min* ~5s 5min

*Após PR #110 que tornou typecheck cobrir os 1620 arquivos do app.

Por que

PR #110 conserta o bug crítico do typecheck (cobria 1 arquivo, agora cobre 1620). Mas isso fez o pre-push hook pular de instantâneo pra ~5min. Ruim pra DX (impossível pushar rápido).

Solução

# Push normal: roda só ESLint baseline (~5s)
git push

# Push com validação completa: roda typecheck também (~5min)
HUSKY_FULL=1 git push

# Pular tudo (último recurso):
git push --no-verify

CI continua rodando typecheck completo em todo PR — não há risco de regressão escapar.

Risk

🟢 Zero. Hook local é safety net pra erros óbvios; o gate principal é o CI.

Test plan

  • npm run lint:baseline passa (1547=1547)
  • Hook com HUSKY_FULL=0 (default) → só lint:baseline ✅ rápido
  • Hook com HUSKY_FULL=1 → typecheck + lint:baseline (validar no merge)
  • CI verde

Sequência de merge sugerida

  1. Mergear fix(typecheck): cobre app inteiro com TS baseline (1214 erros) (F1-1.x) #110 primeiro (fix typecheck — depend disso)
  2. Mergear chore(husky): pre-push leve por padrão (5s vs 5min) #111 (este PR)

Summary by CodeRabbit

Chores

  • Processo de verificação pré-envio agora funciona de modo condicional, otimizando a experiência de desenvolvimento. Por padrão, apenas verificação de lint é executada ao enviar commits, tornando o processo mais ágil. Verificação de tipos mais rigorosa pode ser ativada conforme necessário através de variável de ambiente específica.

Review Change Stack

Antes: pre-push rodava 'npm run typecheck && npm run lint:baseline'.
Após PR #110, npm run typecheck virou o gate completo de TS (tsc -p
tsconfig.app.json --noEmit) que demora 4-5min por causa dos 1620 arquivos
do app. Pré-push de 5min atrapalha DX (impossível pushar rápido).

Solução:
- Por padrão: hook roda apenas `npm run lint:baseline` (~5s)
- Pra rodar tudo (typecheck + eslint): `HUSKY_FULL=1 git push`

Justificativa:
- O CI já roda typecheck completo em todo PR
- Hook local é safety net pra erros óbvios; ESLint baseline cobre 1547
  problemas conhecidos
- Devs que querem garantir antes do push podem usar HUSKY_FULL=1
- Para casos extremos (--no-verify) continua sendo escape hatch

Risk: 🟢 zero. Se algo escapar do hook leve, CI pega.

Test plan:
- [x] npm run lint:baseline passa (1547=1547)
- [x] Hook funciona com HUSKY_FULL=0 (default) → roda só lint:baseline
- [ ] Hook funciona com HUSKY_FULL=1 → roda typecheck + lint:baseline
- [ ] CI verde
Copilot AI review requested due to automatic review settings May 9, 2026 16:35
@vercel
Copy link
Copy Markdown

vercel Bot commented May 9, 2026

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated (UTC)
promo-gifts Ready Ready Preview, Comment May 9, 2026 4:36pm

@coderabbitai
Copy link
Copy Markdown
Contributor

coderabbitai Bot commented May 9, 2026

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro

Run ID: 17de77f5-f209-43bd-922a-b3dceb88e21a

📥 Commits

Reviewing files that changed from the base of the PR and between 9d9026b and 0eff23c.

📒 Files selected for processing (1)
  • .husky/pre-push

Walkthrough

O hook Git .husky/pre-push foi refatorado para executar typecheck condicionalmente via variável de ambiente HUSKY_FULL. Por padrão, apenas lint:baseline executa; com HUSKY_FULL=1, typecheck é executado antes do lint, mantendo validações completas opcionais.

Alterações

Configuração Condicional do Hook Pre-Push

Layer / File(s) Resumo
Lógica Condicional do Hook
.husky/pre-push
Estrutura if/else baseada em HUSKY_FULL adicionada: executa apenas npm run lint:baseline por padrão, e npm run typecheck && npm run lint:baseline quando HUSKY_FULL=1.

Pontos de Revisão Críticos

🔍 Segurança & Performance:

  • ✅ Nenhum secret hardcoded detectado
  • ✅ Variável de ambiente usa default seguro (${HUSKY_FULL:-0})
  • ⚠️ Verifique: o comportamento padrão (sem typecheck) não introduz regressions em CI/CD — confirme se pipelines de merge/deploy usam HUSKY_FULL=1

🔍 Funcionalidade:

  • Mudança reduz fricção de push local ao remover typecheck por padrão
  • Garanta que revisores/CI usem HUSKY_FULL=1 para validação total antes de merge

Estimated code review effort

🎯 1 (Trivial) | ⏱️ ~3 minutos

🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check name Status Explanation
Title check ✅ Passed O título refere-se ao objetivo real da mudança (tornar o pre-push leve por padrão), mas é vago quanto ao mecanismo (não menciona que é condicional via HUSKY_FULL). Ainda assim, comunica a essência da mudança.
Description check ✅ Passed A descrição está bem estruturada e completa: explica o problema, a solução, o impacto esperado, o plano de testes e até a sequência de merge. Cobre a intenção e a validação. Não segue exatamente o template (não é um formulário checkbox), mas fornece todas as informações críticas de forma mais narrativa e clara.
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch chore/pre-push-hook-light

Comment @coderabbitai help to get the list of available commands and usage tips.

Copy link
Copy Markdown

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Ajusta o hook pre-push do Husky para ser “leve” por padrão, executando apenas o gate do ESLint baseline, com opção opt-in para rodar também o typecheck via variável de ambiente.

Changes:

  • Troca o pre-push de typecheck + lint:baseline para lint:baseline por padrão.
  • Adiciona flag HUSKY_FULL=1 para executar typecheck + lint:baseline quando desejado.
  • Documenta a motivação e o modo de uso diretamente no hook.

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

Comment thread .husky/pre-push
Comment on lines +7 to +12
# Motivação: o gate de typecheck completo (npm run typecheck) demora 4-5min
# por causa dos 1620 arquivos do app. Isso atrapalha DX em pushes frequentes.
# O CI já roda o typecheck completo em todo PR — não precisa duplicar localmente.

if [ "${HUSKY_FULL:-0}" = "1" ]; then
npm run typecheck && npm run lint:baseline
@adm01-debug adm01-debug merged commit d0b6ed0 into main May 9, 2026
18 of 19 checks passed
@adm01-debug adm01-debug deleted the chore/pre-push-hook-light branch May 9, 2026 16:47
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants