UNPKG

@followthecode/cli

Version:

CLI tool for Git repository analysis and data collection

158 lines (132 loc) 6.33 kB
#!/usr/bin/env node const fs = require('fs'); const path = require('path'); const { execSync, spawn } = require('child_process'); console.log('🔧 Configurando FTC CLI após instalação...'); // Função para verificar e instalar dependências nativas no Linux function checkAndInstallNativeDependencies() { if (process.platform !== 'linux') { console.log('📋 Sistema não é Linux, pulando verificação de dependências nativas'); return true; } console.log('🔍 Verificando dependências nativas...'); try { // Verifica se as bibliotecas necessárias estão disponíveis const requiredLibs = ['libssl', 'libcurl', 'libz']; const missingLibs = []; for (const lib of requiredLibs) { try { execSync(`ldconfig -p | grep -q "${lib}"`, { stdio: 'pipe' }); console.log(`✅ ${lib} encontrado`); } catch (error) { missingLibs.push(lib); console.log(`❌ ${lib} não encontrado`); } } // Verifica se a biblioteca do LibGit2Sharp está presente const libgit2Path = path.join(__dirname, '..', 'bin', 'linux-x64', 'libgit2-3f4182d.so'); if (fs.existsSync(libgit2Path)) { console.log('✅ Biblioteca LibGit2Sharp encontrada'); // Tenta definir LD_LIBRARY_PATH para incluir o diretório da biblioteca const libDir = path.join(__dirname, '..', 'bin', 'linux-x64'); const currentLdPath = process.env.LD_LIBRARY_PATH || ''; const newLdPath = currentLdPath ? `${libDir}:${currentLdPath}` : libDir; console.log(`📋 Configurando LD_LIBRARY_PATH: ${newLdPath}`); // Salva a configuração em um arquivo para ser carregado pelo wrapper const wrapperConfig = `#!/bin/bash export LD_LIBRARY_PATH="${newLdPath}:\$LD_LIBRARY_PATH" exec "$@" `; const wrapperPath = path.join(__dirname, '..', 'bin', 'ftc-wrapper.sh'); fs.writeFileSync(wrapperPath, wrapperConfig); fs.chmodSync(wrapperPath, 0o755); console.log('✅ Wrapper de biblioteca criado'); } else { console.log('❌ Biblioteca LibGit2Sharp não encontrada'); } if (missingLibs.length > 0) { console.log('⚠️ Algumas dependências nativas estão faltando. Tentando instalar...'); try { // Tenta instalar as dependências execSync('sudo apt-get update', { stdio: 'inherit' }); execSync('sudo apt-get install -y libssl-dev libcurl4-openssl-dev zlib1g-dev', { stdio: 'inherit' }); console.log('✅ Dependências nativas instaladas com sucesso!'); return true; } catch (installError) { console.warn('⚠️ Não foi possível instalar dependências automaticamente:', installError.message); console.log('💡 Execute manualmente: sudo apt-get install -y libssl-dev libcurl4-openssl-dev zlib1g-dev'); return false; } } return true; } catch (error) { console.warn('⚠️ Erro ao verificar dependências nativas:', error.message); return false; } } // Função para copiar arquivo de configuração function copyConfigFile() { try { // Tenta diferentes locais para o arquivo de configuração const possibleSources = [ path.join(__dirname, '..', 'bin', 'linux-x64', 'appsettings.json'), path.join(__dirname, '..', 'bin', 'win-x64', 'appsettings.json'), path.join(__dirname, '..', 'bin', 'osx-x64', 'appsettings.json'), path.join(__dirname, '..', 'appsettings.json') ]; let configSource = null; for (const source of possibleSources) { if (fs.existsSync(source)) { configSource = source; console.log(`📁 Arquivo de configuração encontrado em: ${source}`); break; } } if (!configSource) { console.error('❌ Arquivo de configuração não encontrado!'); console.error('💡 Verifique se o pacote foi compilado corretamente.'); return false; } // Copia para o diretório de instalação global const globalDest = path.join(__dirname, '..', 'appsettings.json'); fs.copyFileSync(configSource, globalDest); console.log(`✅ Arquivo de configuração copiado para: ${globalDest}`); return true; } catch (error) { console.error('❌ Erro ao copiar arquivo de configuração:', error.message); return false; } } // Função para definir permissões function setPermissions() { try { const ftcJsPath = path.join(__dirname, '..', 'bin', 'ftc.js'); const ftcShellPath = path.join(__dirname, '..', 'bin', 'ftc'); if (fs.existsSync(ftcJsPath)) { fs.chmodSync(ftcJsPath, 0o755); console.log('✅ Permissões definidas para ftc.js'); } if (fs.existsSync(ftcShellPath)) { fs.chmodSync(ftcShellPath, 0o755); console.log('✅ Permissões definidas para ftc (shell)'); } return true; } catch (error) { console.warn('⚠️ Erro ao definir permissões:', error.message); return false; } } // Executa as configurações const nativeDepsSuccess = checkAndInstallNativeDependencies(); const configSuccess = copyConfigFile(); const permissionsSuccess = setPermissions(); if (configSuccess && permissionsSuccess) { console.log('🎉 FTC CLI configurado com sucesso!'); console.log('💡 Execute: ftc --help'); if (!nativeDepsSuccess) { console.log('⚠️ Dependências nativas podem precisar de instalação manual'); } } else { console.error('❌ Alguns problemas foram encontrados durante a configuração.'); process.exit(1); }