diff --git a/QUICK_REFERENCE.md b/QUICK_REFERENCE.md new file mode 100644 index 0000000..50e2f95 --- /dev/null +++ b/QUICK_REFERENCE.md @@ -0,0 +1,90 @@ +# 🔥 GUIA RÁPIDO - REMOÇÃO DE ARQUIVO SENSÍVEL / QUICK GUIDE - SENSITIVE FILE REMOVAL + +## ⚡ AÇÃO IMEDIATA EM 3 PASSOS / IMMEDIATE ACTION IN 3 STEPS + +### 1️⃣ REVOGAR API KEYS (5 minutos) +``` +→ https://www.binance.com/en/my/settings/api-management +→ REVOKE todas as keys antigas +→ DELETE as keys antigas +→ Gere novas (se precisar) +``` + +### 2️⃣ EXECUTAR O SCRIPT (10 minutos) +```bash +cd /path/to/SbeSourceGenerator +bash scripts/remove-sensitive-file-from-history.sh +``` + +### 3️⃣ NOTIFICAR COLABORADORES +``` +Todos devem: +1. Deletar clone local +2. Re-clonar: git clone https://github.com/pedrosakuma/SbeSourceGenerator.git +``` + +--- + +## 📚 DOCUMENTAÇÃO COMPLETA / FULL DOCUMENTATION + +| Documento | Descrição | +|-----------|-----------| +| 🚨 `SECURITY_INCIDENT_RESPONSE.md` | Guia de resposta imediata | +| 📖 `docs/REMOVE_SENSITIVE_FILE_FROM_HISTORY.md` | Documentação completa (4 métodos) | +| 📝 `SOLUTION_SUMMARY.md` | Explicação do problema e solução | +| 🔧 `scripts/remove-sensitive-file-from-history.sh` | Script automatizado | + +--- + +## 🔍 VERIFICAÇÃO RÁPIDA / QUICK VERIFICATION + +Após executar o script: + +```bash +# Deve retornar vazio / Should return empty +git log --all --full-history -- "**/launchSettings.json" +``` + +--- + +## ❓ DÚVIDAS COMUNS / FAQ + +**Q: Posso apenas deletar o arquivo do working tree?** +A: ❌ Não é suficiente. O arquivo ainda está no histórico do Git. + +**Q: Por que não foi removido automaticamente?** +A: ⚠️ Requer `git push --force`, que não é permitido neste ambiente. + +**Q: É seguro usar BFG?** +A: ✅ Sim! BFG é a ferramenta recomendada pelo GitHub para este tipo de tarefa. + +**Q: O que acontece se eu não revogar as keys?** +A: 🔥 CRÍTICO! Qualquer pessoa com acesso ao histórico pode usar as keys. + +**Q: Preciso notificar colaboradores?** +A: ✅ Sim! Após force push, todos devem re-clonar o repositório. + +--- + +## 🆘 PRECISA DE AJUDA? / NEED HELP? + +1. Leia `SECURITY_INCIDENT_RESPONSE.md` primeiro +2. Consulte `docs/REMOVE_SENSITIVE_FILE_FROM_HISTORY.md` para detalhes +3. GitHub Support: https://support.github.com/ + +--- + +## ⏱️ TEMPO ESTIMADO / ESTIMATED TIME + +| Etapa | Tempo | +|-------|-------| +| Revogar API keys | 5 min | +| Executar script | 10 min | +| Force push | 2 min | +| Notificar colaboradores | 5 min | +| **TOTAL** | **~22 min** | + +--- + +**⚠️ LEMBRE-SE:** Quanto mais rápido agir, menor o risco! +**⚠️ REMEMBER:** The faster you act, the lower the risk! diff --git a/README.md b/README.md index 31366f8..f5b58b4 100644 --- a/README.md +++ b/README.md @@ -6,6 +6,10 @@ A Roslyn-based source generator that converts FIX Simple Binary Encoding (SBE) XML schemas into efficient, type-safe C# code. +## 🔒 Security Notice + +⚠️ **Important**: If you need to remove sensitive files from Git history, please see [SECURITY_INCIDENT_RESPONSE.md](./SECURITY_INCIDENT_RESPONSE.md) for immediate action steps. + ## Features ✅ **Fully Implemented SBE Features**: diff --git a/SECURITY_INCIDENT_RESPONSE.md b/SECURITY_INCIDENT_RESPONSE.md new file mode 100644 index 0000000..00b2ef2 --- /dev/null +++ b/SECURITY_INCIDENT_RESPONSE.md @@ -0,0 +1,79 @@ +# 🚨 INCIDENTE DE SEGURANÇA - AÇÃO IMEDIATA NECESSÁRIA + +## Resumo do Problema + +O arquivo `examples/SbeBinanceConsole/Properties/launchSettings.json` contém **API keys do Binance** vazadas no histórico do Git. + +**Commits afetados:** +- `b97aba181660ba29d5c5b2353424195c14a69633` - Arquivo adicionado/modificado (28 Oct 2025) +- `80a8edb47f62c1cceb5ec8814bb8db643020282f` - Arquivo removido (29 Oct 2025) + +## ⚡ AÇÕES IMEDIATAS (FAÇA AGORA!) + +### 1. REVOGAR API KEYS COMPROMETIDAS ⏰ + +**CRÍTICO:** Vá agora para o painel do Binance e: + +1. Acesse: https://www.binance.com/en/my/settings/api-management (URL verificada em 2025-10-31) +2. **REVOGUE** todas as API keys que estavam no arquivo +3. **DELETE** as API keys antigas +4. Gere novas API keys se necessário +5. **NÃO** commit as novas keys no Git! + +### 2. VERIFICAR GitHub Secret Scanning + +1. Visite: https://github.com/pedrosakuma/SbeSourceGenerator/security/secret-scanning +2. Se houver alertas, siga as instruções do GitHub + +### 3. REMOVER DO HISTÓRICO GIT + +**Método Recomendado: BFG Repo Cleaner** + +```bash +# Download BFG +wget https://repo1.maven.org/maven2/com/madgag/bfg/1.14.0/bfg-1.14.0.jar + +# Clone mirror +git clone --mirror https://github.com/pedrosakuma/SbeSourceGenerator.git + +# Remove file from history +java -jar bfg-1.14.0.jar --delete-files launchSettings.json SbeSourceGenerator.git + +# Clean up +cd SbeSourceGenerator.git +git reflog expire --expire=now --all +git gc --prune=now --aggressive + +# Force push (AVISO: reescreve histórico!) +git push --force +``` + +**IMPORTANTE:** Depois do force push, todos os colaboradores precisam deletar e re-clonar o repositório! + +## 📋 Checklist + +- [ ] ✅ API keys do Binance foram REVOGADAS +- [ ] ✅ Novas API keys geradas (se necessário) +- [ ] ✅ GitHub Secret Scanning verificado +- [ ] ✅ Histórico do Git limpo com BFG +- [ ] ✅ Force push executado +- [ ] ✅ Colaboradores notificados para re-clonar +- [ ] ✅ Verificado que arquivo não está mais no histórico + +## 🔍 Verificação Final + +```bash +# Verificar se arquivo foi removido do histórico +git log --all --full-history -- "**/launchSettings.json" +# Deve retornar vazio! +``` + +## 📞 Precisa de Ajuda? + +- Documentação completa: `docs/REMOVE_SENSITIVE_FILE_FROM_HISTORY.md` +- GitHub Support: https://support.github.com/ +- BFG Docs: https://rtyley.github.io/bfg-repo-cleaner/ + +--- + +**⏰ TEMPO É CRÍTICO:** Quanto mais tempo as API keys permanecerem ativas, maior o risco de comprometimento! diff --git a/SOLUTION_SUMMARY.md b/SOLUTION_SUMMARY.md new file mode 100644 index 0000000..44b799f --- /dev/null +++ b/SOLUTION_SUMMARY.md @@ -0,0 +1,160 @@ +# Relatório sobre Remoção de Arquivo Sensível do Histórico Git + +## Problema Reportado + +Foi solicitado a remoção do arquivo `examples/SbeBinanceConsole/Properties/launchSettings.json` do histórico do Git devido ao vazamento de secrets (credenciais da API Binance). + +## Análise Realizada + +### Status do Arquivo + +✅ **Situação Atual:** +- O arquivo foi **removido do working tree** no commit `80a8edb47f62c1cceb5ec8814bb8db643020282f` (29 Out 2025) +- O `.gitignore` foi **corretamente configurado** (linha 373: `**/launchSettings.json`) +- Novos arquivos `launchSettings.json` **não serão commitados** no futuro + +❌ **Problema Restante:** +- O arquivo ainda existe no **histórico do Git** em commits anteriores +- Especialmente no commit `b97aba181660ba29d5c5b2353424195c14a69633` (28 Out 2025) +- Qualquer pessoa com acesso ao repositório pode acessar o histórico e ver as credenciais + +### Commits Afetados + +| Commit | Data | Ação | Status | +|--------|------|------|--------| +| `b97aba181660ba29d5c5b2353424195c14a69633` | 28 Out 2025 | Arquivo adicionado/modificado | ⚠️ Contém secrets | +| `620633ea9c243a1cf15ad03a5d4f69a8aa7b2c5d` | 29 Out 2025 | .gitignore atualizado | ✅ Prevenção | +| `0b3a37607a54ecc9ed9fe7449565e5bddcbd2c20` | 29 Out 2025 | .gitignore recursivo | ✅ Prevenção | +| `80a8edb47f62c1cceb5ec8814bb8db643020282f` | 29 Out 2025 | Arquivo removido | ✅ Limpeza local | + +## Limitações Técnicas + +**Por que não posso remover o arquivo do histórico automaticamente:** + +1. ❌ **Force Push não permitido**: O ambiente de execução não tem permissão para fazer `git push --force` +2. ❌ **Reescrita de histórico**: Ferramentas como `git filter-branch`, `git filter-repo` e `BFG` requerem force push +3. ❌ **Limitação de segurança**: Esta é uma medida de proteção intencional para evitar danos acidentais + +## Solução Fornecida + +Ao invés de realizar a remoção automaticamente (o que não é possível), foram criados os seguintes recursos: + +### 1. Guia de Resposta Imediata +📄 **Arquivo:** `SECURITY_INCIDENT_RESPONSE.md` + +Um guia rápido e direto com: +- Checklist de ações imediatas (revogar API keys) +- Comandos prontos para usar +- Método recomendado (BFG Repo Cleaner) + +### 2. Documentação Completa +📄 **Arquivo:** `docs/REMOVE_SENSITIVE_FILE_FROM_HISTORY.md` + +Documentação abrangente incluindo: +- Explicação detalhada do problema +- 4 métodos diferentes de remoção: + 1. BFG Repo Cleaner (Recomendado) + 2. git-filter-repo (Moderno) + 3. git filter-branch (Legado) + 4. GitHub Support (Se não puder fazer force push) +- Avisos e considerações +- Checklist de segurança completo +- Instruções de verificação + +### 3. Script Automatizado +📄 **Arquivo:** `scripts/remove-sensitive-file-from-history.sh` + +Um script Bash executável que: +- Baixa automaticamente o BFG Repo Cleaner +- Clona o repositório em modo mirror +- Remove o arquivo do histórico +- Executa limpeza e verificação +- Solicita confirmação antes do force push +- Fornece instruções claras em português e inglês + +### 4. Atualização do README +📄 **Arquivo:** `README.md` + +Adicionado aviso de segurança no topo do README que direciona para o guia de resposta imediata. + +## Próximos Passos (Ação do Proprietário do Repositório) + +O **proprietário do repositório** deve executar os seguintes passos: + +### Passo 1: CRÍTICO - Revogar Credenciais (FAZER AGORA!) +``` +1. Acessar: https://www.binance.com/en/my/settings/api-management +2. REVOGAR todas as API keys que estavam no arquivo +3. Gerar novas API keys (se necessário) +4. NÃO commitar as novas keys! +``` + +### Passo 2: Verificar GitHub Secret Scanning +``` +1. Visitar: https://github.com/pedrosakuma/SbeSourceGenerator/security/secret-scanning +2. Revisar alertas +3. Seguir instruções do GitHub +``` + +### Passo 3: Limpar Histórico Git +```bash +# Opção 1: Usar o script fornecido (Recomendado) +bash scripts/remove-sensitive-file-from-history.sh + +# Opção 2: Seguir as instruções manualmente +# Ver: SECURITY_INCIDENT_RESPONSE.md +``` + +### Passo 4: Notificar Colaboradores +Após o force push, **TODOS os colaboradores** devem: +1. Deletar seus clones locais +2. Re-clonar o repositório + +## Verificação de Sucesso + +Para confirmar que o arquivo foi removido do histórico: + +```bash +# Deve retornar vazio se foi removido com sucesso +git log --all --full-history -- "**/launchSettings.json" +``` + +## Resumo + +✅ **O que foi feito:** +- Documentação completa criada +- Script automatizado fornecido +- Guias em português e inglês +- Prevenção futura garantida (.gitignore) +- README atualizado com aviso de segurança + +❌ **O que NÃO foi feito (e por quê):** +- Remoção automática do histórico Git ➜ Requer force push (não permitido no ambiente) +- Revogação de API keys ➜ Deve ser feito pelo proprietário da conta Binance + +⚠️ **Ação Requerida:** +- O **proprietário do repositório** deve executar os passos documentados +- **TEMPO É CRÍTICO**: Quanto mais tempo as keys ficarem ativas, maior o risco + +## Recursos Criados + +| Arquivo | Propósito | +|---------|-----------| +| `SECURITY_INCIDENT_RESPONSE.md` | Guia rápido de ação imediata | +| `docs/REMOVE_SENSITIVE_FILE_FROM_HISTORY.md` | Documentação completa | +| `scripts/remove-sensitive-file-from-history.sh` | Script automatizado | +| `README.md` | Atualizado com aviso de segurança | + +## Contato e Suporte + +Se houver dúvidas ou problemas: +1. Revisar a documentação fornecida +2. Contatar GitHub Support: https://support.github.com/ +3. Consultar BFG docs: https://rtyley.github.io/bfg-repo-cleaner/ + +--- + +**Data:** 2025-10-31 +**Agente:** GitHub Copilot SWE Agent +**Status:** Documentação e ferramentas fornecidas ✅ +**Ação Pendente:** Execução pelo proprietário do repositório ⏳ diff --git a/docs/REMOVE_SENSITIVE_FILE_FROM_HISTORY.md b/docs/REMOVE_SENSITIVE_FILE_FROM_HISTORY.md new file mode 100644 index 0000000..0e47753 --- /dev/null +++ b/docs/REMOVE_SENSITIVE_FILE_FROM_HISTORY.md @@ -0,0 +1,226 @@ +# Remover Arquivo Sensível do Histórico do Git / Remove Sensitive File from Git History + +## 🔒 Problema de Segurança / Security Issue + +O arquivo `examples/SbeBinanceConsole/Properties/launchSettings.json` contém secrets (credenciais) vazadas e precisa ser completamente removido do histórico do Git. + +The file `examples/SbeBinanceConsole/Properties/launchSettings.json` contains leaked secrets (credentials) and needs to be completely removed from Git history. + +## ✅ Status Atual / Current Status + +- ✅ O arquivo foi removido do working tree no commit `80a8edb47f62c1cceb5ec8814bb8db643020282f` +- ✅ O `.gitignore` foi atualizado para ignorar `**/launchSettings.json` (linha 373) +- ❌ O arquivo ainda existe no histórico do Git (commit `b97aba181660ba29d5c5b2353424195c14a69633` e outros) + +- ✅ The file was removed from the working tree in commit `80a8edb47f62c1cceb5ec8814bb8db643020282f` +- ✅ The `.gitignore` was updated to ignore `**/launchSettings.json` (line 373) +- ❌ The file still exists in Git history (commit `b97aba181660ba29d5c5b2353424195c14a69633` and others) + +## 🚨 Ações Imediatas Necessárias / Immediate Actions Required + +### 1. Rotacionar Secrets Comprometidos / Rotate Compromised Secrets + +**ANTES de remover o histórico, você DEVE rotacionar todos os secrets expostos:** + +**BEFORE removing the history, you MUST rotate all exposed secrets:** + +- [ ] Binance API Keys +- [ ] Quaisquer outros tokens ou credenciais que estavam no arquivo + +Qualquer pessoa com acesso ao repositório pode ter copiado esses secrets. + +Anyone with access to the repository may have copied these secrets. + +### 2. Verificar GitHub Secret Scanning + +GitHub pode ter detectado automaticamente os secrets: + +1. Visite: https://github.com/pedrosakuma/SbeSourceGenerator/security/secret-scanning +2. Revise todos os alertas +3. Revogue e regenere todos os secrets detectados + +GitHub may have automatically detected the secrets: + +1. Visit: https://github.com/pedrosakuma/SbeSourceGenerator/security/secret-scanning +2. Review all alerts +3. Revoke and regenerate all detected secrets + +## 🛠️ Opções para Remover do Histórico / Options to Remove from History + +### Opção 1: BFG Repo Cleaner (Recomendado / Recommended) + +O BFG é mais rápido e mais fácil que git-filter-branch. + +BFG is faster and easier than git-filter-branch. + +```bash +# 1. Fazer backup do repositório +git clone --mirror https://github.com/pedrosakuma/SbeSourceGenerator.git + +# 2. Baixar BFG +# https://rtyley.github.io/bfg-repo-cleaner/ +# wget https://repo1.maven.org/maven2/com/madgag/bfg/1.14.0/bfg-1.14.0.jar + +# 3. Remover o arquivo do histórico +java -jar bfg-1.14.0.jar --delete-files launchSettings.json SbeSourceGenerator.git + +# 4. Limpar e compactar o repositório +cd SbeSourceGenerator.git +git reflog expire --expire=now --all +git gc --prune=now --aggressive + +# 5. Force push para o remote (CUIDADO!) +git push --force +``` + +### Opção 2: git filter-repo (Moderno / Modern) + +```bash +# 1. Instalar git-filter-repo +# pip install git-filter-repo + +# 2. Clonar o repositório +git clone https://github.com/pedrosakuma/SbeSourceGenerator.git +cd SbeSourceGenerator + +# 3. Remover o arquivo +git filter-repo --path examples/SbeBinanceConsole/Properties/launchSettings.json --invert-paths + +# 4. Force push para o remote +git remote add origin https://github.com/pedrosakuma/SbeSourceGenerator.git +git push --force --all +git push --force --tags +``` + +### Opção 3: git filter-branch (Legado / Legacy) + +```bash +# 1. Clonar o repositório +git clone https://github.com/pedrosakuma/SbeSourceGenerator.git +cd SbeSourceGenerator + +# 2. Remover o arquivo do histórico +git filter-branch --force --index-filter \ + 'git rm --cached --ignore-unmatch examples/SbeBinanceConsole/Properties/launchSettings.json' \ + --prune-empty --tag-name-filter cat -- --all + +# 3. Limpar referências +git for-each-ref --format='delete %(refname)' refs/original | git update-ref --stdin +git reflog expire --expire=now --all +git gc --prune=now --aggressive + +# 4. Force push para o remote +git push --force --all +git push --force --tags +``` + +### Opção 4: GitHub Support (Se você não puder fazer force push) + +Se você não tiver permissões para force push ou preferir assistência: + +If you don't have permissions for force push or prefer assistance: + +1. Abra um ticket no GitHub Support: https://support.github.com/ +2. Selecione "Repository security" como categoria +3. Explique que você precisa remover secrets expostos do histórico +4. Forneça o caminho do arquivo: `examples/SbeBinanceConsole/Properties/launchSettings.json` +5. Forneça os commits: `b97aba181660ba29d5c5b2353424195c14a69633` e `80a8edb47f62c1cceb5ec8814bb8db643020282f` + +## ⚠️ Avisos Importantes / Important Warnings + +### Antes de Reescrever o Histórico / Before Rewriting History + +1. **Notifique todos os colaboradores** - Eles precisarão re-clonar o repositório +2. **Faça backup completo** - Mantenha um backup local antes de começar +3. **Revogue os secrets** - Secrets antigos devem ser considerados comprometidos +4. **Considere o impacto** - PRs abertos e branches precisarão ser recriados + +1. **Notify all collaborators** - They will need to re-clone the repository +2. **Full backup** - Keep a local backup before starting +3. **Revoke secrets** - Old secrets should be considered compromised +4. **Consider the impact** - Open PRs and branches will need to be recreated + +### Após Reescrever o Histórico / After Rewriting History + +Todos os colaboradores devem executar: + +All collaborators should run: + +```bash +# DELETAR o clone local antigo +rm -rf SbeSourceGenerator + +# Re-clonar do repositório limpo +git clone https://github.com/pedrosakuma/SbeSourceGenerator.git +``` + +## 📋 Checklist de Segurança / Security Checklist + +- [ ] Secrets foram rotacionados/revogados +- [ ] Novos secrets foram gerados +- [ ] Verificar GitHub Secret Scanning +- [ ] Notificar colaboradores +- [ ] Fazer backup do repositório +- [ ] Executar BFG/git-filter-repo/git-filter-branch +- [ ] Force push para o remote +- [ ] Verificar que o arquivo foi removido do histórico +- [ ] Todos os colaboradores re-clonaram o repositório +- [ ] Atualizar documentação sobre o incidente + +- [ ] Secrets were rotated/revoked +- [ ] New secrets were generated +- [ ] Check GitHub Secret Scanning +- [ ] Notify collaborators +- [ ] Backup repository +- [ ] Run BFG/git-filter-repo/git-filter-branch +- [ ] Force push to remote +- [ ] Verify file was removed from history +- [ ] All collaborators re-cloned the repository +- [ ] Update documentation about the incident + +## 🔍 Verificação / Verification + +Após remover o arquivo do histórico, verifique: + +After removing the file from history, verify: + +```bash +# Procurar o arquivo em todo o histórico +git log --all --full-history -- "**/launchSettings.json" + +# Deve retornar vazio se foi removido com sucesso +# Should return empty if successfully removed + +# Verificar o conteúdo de todos os commits +git rev-list --all | while read commit; do + if git ls-tree -r $commit | grep -q "launchSettings.json"; then + echo "Found in commit: $commit" + fi +done +``` + +## 📚 Recursos Adicionais / Additional Resources + +- [BFG Repo Cleaner](https://rtyley.github.io/bfg-repo-cleaner/) +- [git-filter-repo](https://github.com/newren/git-filter-repo) +- [GitHub: Removing sensitive data](https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/removing-sensitive-data-from-a-repository) +- [GitHub Secret Scanning](https://docs.github.com/en/code-security/secret-scanning/about-secret-scanning) + +## 🆘 Precisa de Ajuda? / Need Help? + +Se você tiver dúvidas ou problemas: + +If you have questions or problems: + +1. Revise a documentação do GitHub sobre remoção de dados sensíveis +2. Abra um issue no repositório (SEM incluir os secrets!) +3. Contate GitHub Support para assistência + +1. Review GitHub documentation about removing sensitive data +2. Open an issue in the repository (WITHOUT including the secrets!) +3. Contact GitHub Support for assistance + +--- + +**Data da Criação / Creation Date:** 2025-10-31 +**Última Atualização / Last Updated:** 2025-10-31 diff --git a/scripts/remove-sensitive-file-from-history.sh b/scripts/remove-sensitive-file-from-history.sh new file mode 100755 index 0000000..be87b15 --- /dev/null +++ b/scripts/remove-sensitive-file-from-history.sh @@ -0,0 +1,136 @@ +#!/bin/bash +# Script para remover launchSettings.json do histórico do Git usando BFG Repo Cleaner +# Script to remove launchSettings.json from Git history using BFG Repo Cleaner + +set -e # Exit on error + +# Colors for output +RED='\033[0;31m' +GREEN='\033[0;32m' +YELLOW='\033[1;33m' +NC='\033[0m' # No Color + +echo -e "${RED}╔════════════════════════════════════════════════════════════════╗${NC}" +echo -e "${RED}║ AVISO: Este script reescreve o histórico do Git! ║${NC}" +echo -e "${RED}║ WARNING: This script rewrites Git history! ║${NC}" +echo -e "${RED}╚════════════════════════════════════════════════════════════════╝${NC}" +echo "" +echo -e "${YELLOW}ANTES de continuar, certifique-se de que:${NC}" +echo -e "${YELLOW}BEFORE continuing, make sure that:${NC}" +echo "1. ✅ Você REVOGOU todas as API keys expostas" +echo " ✅ You REVOKED all exposed API keys" +echo "2. ✅ Você notificou todos os colaboradores" +echo " ✅ You notified all collaborators" +echo "3. ✅ Você fez backup do repositório" +echo " ✅ You backed up the repository" +echo "" +read -p "Você confirma que completou todas as etapas acima? (yes/no): " -r +echo "" +if [[ ! $REPLY =~ ^[Yy][Ee][Ss]$ ]]; then + echo -e "${RED}Operação cancelada. Complete as etapas acima primeiro!${NC}" + echo -e "${RED}Operation cancelled. Complete the steps above first!${NC}" + exit 1 +fi + +# Configuration - can be overridden via environment variables +REPO_URL="${REPO_URL:-https://github.com/pedrosakuma/SbeSourceGenerator.git}" +REPO_NAME="${REPO_NAME:-SbeSourceGenerator}" +BFG_VERSION="1.14.0" +BFG_JAR="bfg-${BFG_VERSION}.jar" +BFG_URL="https://repo1.maven.org/maven2/com/madgag/bfg/${BFG_VERSION}/${BFG_JAR}" +WORK_DIR="git-history-cleanup" +FILE_TO_REMOVE="launchSettings.json" + +echo -e "${GREEN}Step 1: Criando diretório de trabalho / Creating work directory${NC}" +mkdir -p "$WORK_DIR" +cd "$WORK_DIR" + +# Download BFG if not exists +if [ ! -f "$BFG_JAR" ]; then + echo -e "${GREEN}Step 2: Baixando BFG Repo Cleaner / Downloading BFG Repo Cleaner${NC}" + wget "$BFG_URL" -O "$BFG_JAR" +else + echo -e "${YELLOW}BFG já existe, pulando download / BFG already exists, skipping download${NC}" +fi + +# Clone mirror +if [ ! -d "${REPO_NAME}.git" ]; then + echo -e "${GREEN}Step 3: Clonando repositório (mirror) / Cloning repository (mirror)${NC}" + git clone --mirror "$REPO_URL" +else + echo -e "${YELLOW}Repositório mirror já existe / Mirror repository already exists${NC}" + cd "${REPO_NAME}.git" + echo -e "${GREEN}Atualizando mirror / Updating mirror${NC}" + git fetch --all + cd .. +fi + +# Run BFG +echo -e "${GREEN}Step 4: Removendo arquivo do histórico / Removing file from history${NC}" +java -jar "$BFG_JAR" --delete-files "$FILE_TO_REMOVE" "${REPO_NAME}.git" + +# Cleanup +echo -e "${GREEN}Step 5: Limpando repositório / Cleaning up repository${NC}" +cd "${REPO_NAME}.git" +git reflog expire --expire=now --all +git gc --prune=now --aggressive + +# Verification +echo "" +echo -e "${GREEN}Verificação / Verification:${NC}" +echo "Procurando $FILE_TO_REMOVE no histórico..." +echo "Searching for $FILE_TO_REMOVE in history..." + +# Use explicit pattern for better compatibility +if git log --all --full-history -- "**/launchSettings.json" | grep -q commit; then + echo -e "${RED}❌ ERRO: O arquivo ainda existe no histórico!${NC}" + echo -e "${RED}❌ ERROR: The file still exists in history!${NC}" + exit 1 +else + echo -e "${GREEN}✅ Sucesso! O arquivo foi removido do histórico.${NC}" + echo -e "${GREEN}✅ Success! The file was removed from history.${NC}" +fi + +echo "" +echo -e "${YELLOW}╔════════════════════════════════════════════════════════════════╗${NC}" +echo -e "${YELLOW}║ PRÓXIMO PASSO CRÍTICO / NEXT CRITICAL STEP ║${NC}" +echo -e "${YELLOW}╚════════════════════════════════════════════════════════════════╝${NC}" +echo "" +echo -e "${RED}Para aplicar as mudanças ao repositório remoto, execute:${NC}" +echo -e "${RED}To apply changes to the remote repository, run:${NC}" +echo "" +echo -e "${GREEN} git push --force${NC}" +echo "" +echo -e "${YELLOW}AVISO: Após o force push, todos os colaboradores devem:${NC}" +echo -e "${YELLOW}WARNING: After force push, all collaborators must:${NC}" +echo "1. Deletar seus clones locais / Delete their local clones" +echo "2. Re-clonar o repositório / Re-clone the repository" +echo "" +echo -e "${YELLOW}Executar force push agora? (yes/no): ${NC}" +read -p "" -r +echo "" +if [[ $REPLY =~ ^[Yy][Ee][Ss]$ ]]; then + echo -e "${GREEN}Executando force push... / Executing force push...${NC}" + # Push all branches and tags explicitly for safety + git push --force origin --all + git push --force origin --tags + echo "" + echo -e "${GREEN}✅ CONCLUÍDO! Histórico limpo e enviado ao remote.${NC}" + echo -e "${GREEN}✅ COMPLETE! History cleaned and pushed to remote.${NC}" + echo "" + echo -e "${YELLOW}⚠️ NOTIFIQUE todos os colaboradores para re-clonar!${NC}" + echo -e "${YELLOW}⚠️ NOTIFY all collaborators to re-clone!${NC}" +else + echo -e "${YELLOW}Force push cancelado. Você pode executá-lo manualmente mais tarde:${NC}" + echo -e "${YELLOW}Force push cancelled. You can run it manually later:${NC}" + echo "" + echo " cd $(pwd)" + echo " git push --force origin --all" + echo " git push --force origin --tags" +fi + +cd ../.. + +echo "" +echo -e "${GREEN}Diretório de trabalho: $(pwd)/$WORK_DIR${NC}" +echo -e "${GREEN}Working directory: $(pwd)/$WORK_DIR${NC}"