@followthecode/cli
Version:
CLI tool for Git repository analysis and data collection
119 lines (101 loc) • 4.18 kB
JavaScript
const fs = require('fs');
const path = require('path');
const { execSync } = require('child_process');
console.log('🔧 Configurando wrapper do FTC CLI...');
// Detecta a plataforma
const platform = process.platform;
const isWindows = platform === 'win32';
// Verifica se o Node.js está disponível
function checkNodeAvailability() {
try {
execSync('node --version', { stdio: 'pipe' });
return true;
} catch (error) {
return false;
}
}
// Caminhos dos wrappers
const ftcJsPath = path.join(__dirname, '..', 'bin', 'ftc.js');
const ftcShellPath = path.join(__dirname, '..', 'bin', 'ftc');
// Verifica qual wrapper usar
const nodeAvailable = checkNodeAvailability();
const ftcJsExists = fs.existsSync(ftcJsPath);
const ftcShellExists = fs.existsSync(ftcShellPath);
console.log(`📋 Detecção de ambiente:`);
console.log(` Plataforma: ${platform}`);
console.log(` Node.js disponível: ${nodeAvailable ? '✅ Sim' : '❌ Não'}`);
console.log(` Wrapper Node.js: ${ftcJsExists ? '✅ Existe' : '❌ Não existe'}`);
console.log(` Wrapper Shell: ${ftcShellExists ? '✅ Existe' : '❌ Não existe'}`);
// Recomenda o wrapper apropriado
if (nodeAvailable && ftcJsExists) {
console.log('✅ Usando wrapper Node.js (ftc.js)');
console.log('💡 Execute: ftc --help');
} else if (ftcShellExists) {
console.log('✅ Usando wrapper Shell (ftc)');
console.log('💡 Execute: ftc --help');
if (!nodeAvailable) {
console.log('⚠️ Node.js não encontrado, usando wrapper shell como fallback');
}
} else {
console.error('❌ Nenhum wrapper disponível!');
console.error('💡 Certifique-se de que o projeto foi compilado corretamente.');
process.exit(1);
}
// Define permissões para os wrappers
if (ftcJsExists) {
try {
fs.chmodSync(ftcJsPath, 0o755);
console.log('✅ Permissões definidas para ftc.js');
} catch (error) {
console.warn('⚠️ Não foi possível definir permissões para ftc.js:', error.message);
}
}
if (ftcShellExists) {
try {
fs.chmodSync(ftcShellPath, 0o755);
console.log('✅ Permissões definidas para ftc (shell)');
} catch (error) {
console.warn('⚠️ Não foi possível definir permissões para ftc (shell):', error.message);
}
}
// Copia arquivo de configuração para o diretório de instalação global
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;
break;
}
}
if (!configSource) {
console.warn('⚠️ Arquivo de configuração não encontrado em nenhum local');
return;
}
// Copia para múltiplos locais para garantir que funcione
const destinations = [
path.join(__dirname, '..', 'appsettings.json'), // Raiz do pacote
path.join(process.cwd(), 'appsettings.json') // Diretório atual
];
for (const dest of destinations) {
try {
fs.copyFileSync(configSource, dest);
console.log(`✅ Arquivo de configuração copiado para: ${dest}`);
} catch (error) {
console.warn(`⚠️ Erro ao copiar para ${dest}:`, error.message);
}
}
} catch (error) {
console.warn('⚠️ Erro ao copiar arquivo de configuração:', error.message);
}
}
copyConfigFile();
console.log('🎉 Configuração concluída!');