fix(husky): pre-push pula validação em delete-only push (F1-1.x)#123
Conversation
## Bug Hoje, ao fazer `git push origin :branch` (delete remote), o pre-push hook roda `npm run lint:baseline` mesmo sem código pra validar. Sintomas observados: - Demora desnecessária (5-30s) - Em máquinas com pouca RAM, eslint mata com OOM (status 137) - Push falha mesmo o GitHub aceitando o delete Reproduzi durante a faxina de branches (sessão F1): ``` $ git push origin :fix/ci-test-env-stubs ❌ eslint falhou com status 137 husky - pre-push script failed (code 2) error: failed to push some refs ``` ## Fix Detecta delete-only push lendo stdin (formato padrão do git pre-push): ``` <local_ref> <local_sha> <remote_ref> <remote_sha> ``` Pra deletes, `local_sha` é todo zeros (40 zeros). Se TODAS as refs sendo enviadas têm sha zero, é delete-only → pula tudo e `exit 0`. Caso misto (push de uma branch + delete de outra) ainda roda validação, porque pelo menos uma ref tem sha real. ## Validação Testei localmente: - `git push origin :alguma-branch` → "somente deletes — pulando validação" - `git push origin main` → roda lint:baseline normal - `HUSKY_FULL=1 git push origin main` → roda typecheck + lint:baseline ## Risk 🟢 Zero. Hook de Husky local; CI continua validando 100%.
|
The latest updates on your projects. Learn more about Vercel for GitHub.
|
|
No actionable comments were generated in the recent review. 🎉 ℹ️ Recent review info⚙️ Run configurationConfiguration used: Path: .coderabbit.yaml Review profile: CHILL Plan: Pro Run ID: 📒 Files selected for processing (1)
WalkthroughO hook ChangesDetecção de Delete e Validação Condicional
Estimated code review effort🎯 2 (Simples) | ⏱️ ~8 minutos Possibly related PRs
Observações de Segurança e PerformancePotencial de Regressão: A detecção de delete via Sem riscos críticos observados: Sem secrets hardcoded, SQL injection, promises sem 🚥 Pre-merge checks | ✅ 5✅ Passed checks (5 passed)
✏️ Tip: You can configure your own custom pre-merge checks in the settings. ✨ Finishing Touches🧪 Generate unit tests (beta)
Comment |
There was a problem hiding this comment.
Pull request overview
Ajusta o hook local .husky/pre-push para detectar delete-only push (ex.: git push origin :branch / git push --delete) e pular as validações quando não há código novo sendo enviado, reduzindo tempo de push e evitando falhas locais por OOM durante deleções remotas.
Changes:
- Lê as refs do
pre-pushvia stdin e detecta quando todas as refs são deleções (local_sha= 40 zeros). - Adiciona
early-exitcom mensagem quando o push contém apenas deletes. - Mantém o comportamento atual para pushes “mistos” (delete + update) e para o modo
HUSKY_FULL=1.
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
| while read -r local_ref local_sha remote_ref remote_sha; do | ||
| if [ "$local_sha" != "$ZERO" ]; then | ||
| HAS_NON_DELETE=1 | ||
| break |
Bug
Ao fazer
git push origin :branch(delete remote), o pre-push hook rodanpm run lint:baselinemesmo sem código pra validar. Sintomas:Reproduzido durante a faxina de branches (sessão F1):
Fix
Detecta delete-only push lendo stdin (formato padrão do git pre-push):
Pra deletes,
local_shaé todo zeros (40 zeros). Se TODAS as refs sendo enviadas têm sha zero, é delete-only → pula tudo eexit 0.Caso misto (push de uma branch + delete de outra) ainda roda validação, porque pelo menos uma ref tem sha real.
Mudança
.husky/pre-pushValidação
git push origin :alguma-branch→ "somente deletes — pulando validação"git push origin main→ roda lint:baseline normalHUSKY_FULL=1 git push origin main→ roda typecheck + lint:baseline🟢 Zero. Hook de Husky LOCAL apenas (não afeta CI). CI continua validando 100% dos pushes.
📋 Test plan
Summary by CodeRabbit
Notas da Release