UNPKG

datapilot-cli

Version:

Enterprise-grade streaming multi-format data analysis with comprehensive statistical insights and intelligent relationship detection - supports CSV, JSON, Excel, TSV, Parquet - memory-efficient, cross-platform

176 lines (154 loc) โ€ข 6.12 kB
#!/usr/bin/env node /** * Test installation script * Helps users verify DataPilot is installed correctly */ const { execSync } = require('child_process'); const os = require('os'); const fs = require('fs'); const path = require('path'); console.log('๐Ÿงช Testing DataPilot Installation...\n'); // System info console.log('๐Ÿ“‹ System Information:'); console.log(`- Platform: ${os.platform()}`); console.log(`- Node.js: ${process.version}`); console.log(`- npm: ${execSync('npm --version').toString().trim()}`); console.log(`- Current directory: ${process.cwd()}\n`); // Check CLI availability - prioritize direct execution in CI environments console.log('๐Ÿ” Checking DataPilot CLI availability...'); let cliAvailable = false; let cliMethod = ''; let cliVersion = ''; // Method 1: Direct execution (works in all environments) const cliPath = path.resolve('./dist/cli/index.js'); if (fs.existsSync(cliPath)) { try { cliVersion = execSync(`node "${cliPath}" --version`, { encoding: 'utf8' }).trim(); cliAvailable = true; cliMethod = 'direct'; console.log(`โœ… DataPilot CLI found (direct): ${cliVersion}`); } catch (error) { console.log('โŒ Direct execution failed'); } } // Method 2: Global command (if available and direct method failed) if (!cliAvailable) { try { cliVersion = execSync('datapilot --version', { encoding: 'utf8' }).trim(); cliAvailable = true; cliMethod = 'global'; console.log(`โœ… DataPilot found (global): ${cliVersion}`); } catch (error) { console.log('โŒ Global datapilot command not found'); } } // Method 3: npx (if other methods failed) if (!cliAvailable) { try { cliVersion = execSync('npx datapilot-cli --version', { encoding: 'utf8' }).trim(); cliAvailable = true; cliMethod = 'npx'; console.log(`โœ… DataPilot found (npx): ${cliVersion}`); } catch (error) { console.log('โŒ npx execution failed'); } } // If CLI not available by any method, provide guidance if (!cliAvailable) { console.log('\nโŒ DataPilot CLI not accessible by any method'); console.log('\n๐Ÿ”ง Installation Options:'); console.log('1. Global: npm install -g datapilot-cli'); console.log('2. Local build: npm run build && node dist/cli/index.js'); console.log('3. npx: npx datapilot-cli --version'); // Check npm global configuration (using modern npm commands) try { const npmPrefix = execSync('npm config get prefix', { encoding: 'utf8' }).trim(); const npmBin = path.join(npmPrefix, process.platform === 'win32' ? '' : 'bin'); console.log(`\n๐Ÿ“ npm global bin: ${npmBin}`); console.log('๐Ÿ’ก Add this to your PATH environment variable'); if (process.platform === 'win32') { console.log('\nWindows PATH setup:'); console.log('1. Open System Properties โ†’ Advanced โ†’ Environment Variables'); console.log('2. Edit PATH variable'); console.log(`3. Add: ${npmBin}`); console.log('4. Restart your terminal'); } } catch (e) { console.log('\nโŒ Could not determine npm configuration'); } // Don't exit - continue with tests using available method console.log('\nโš ๏ธ Continuing with available CLI method...'); } // Create test CSV console.log('\n๐Ÿ“ Creating test CSV file...'); const testCsv = `Name,Age,Score Alice,25,95 Bob,30,87 Charlie,35,92 David,28,88 Eve,32,91`; const testFile = path.join(process.cwd(), 'datapilot-test.csv'); fs.writeFileSync(testFile, testCsv); console.log(`โœ… Created: ${testFile}`); // Test analysis using detected CLI method if (cliAvailable) { console.log(`\n๐Ÿ”ฌ Running test analysis (using ${cliMethod} method)...`); let analysisCommand = ''; switch (cliMethod) { case 'direct': analysisCommand = `node "${cliPath}" overview "${testFile}" --output json`; break; case 'global': analysisCommand = `datapilot overview "${testFile}" --output json`; break; case 'npx': analysisCommand = `npx datapilot-cli overview "${testFile}" --output json`; break; } try { execSync(analysisCommand, { stdio: 'inherit' }); // Verify output file exists (default naming pattern) const outputFile = path.join(process.cwd(), 'datapilot-test_datapilot_report.json'); if (fs.existsSync(outputFile)) { const output = JSON.parse(fs.readFileSync(outputFile, 'utf8')); if (output.metadata || output.overview) { console.log('โœ… Analysis completed successfully!'); console.log(`โœ… Generated analysis report using ${cliMethod} method`); fs.unlinkSync(outputFile); // Cleanup output } else { console.log('โŒ Analysis output incomplete'); } } else { console.log('โŒ No output file generated'); } } catch (error) { console.log(`โŒ Analysis failed using ${cliMethod} method`); console.log('Error:', error.message); // Try fallback to direct execution if not already using it if (cliMethod !== 'direct' && fs.existsSync(cliPath)) { console.log('\n๐Ÿ”„ Trying direct execution fallback...'); try { execSync(`node "${cliPath}" overview "${testFile}" --output json`, { stdio: 'inherit' }); console.log('โœ… Direct execution fallback successful!'); } catch (directError) { console.log('โŒ Direct execution fallback also failed'); console.log('Error:', directError.message); } } } } else { console.log('\nโš ๏ธ Skipping analysis test - no CLI method available'); console.log('๐Ÿ’ก Ensure DataPilot is built with: npm run build'); } // Cleanup fs.unlinkSync(testFile); console.log('\n๐Ÿงน Cleaned up test file'); // Proxy check if (process.env.HTTP_PROXY || process.env.HTTPS_PROXY) { console.log('\n๐Ÿ”’ Proxy Configuration:'); if (process.env.HTTP_PROXY) console.log(`- HTTP_PROXY: ${process.env.HTTP_PROXY}`); if (process.env.HTTPS_PROXY) console.log(`- HTTPS_PROXY: ${process.env.HTTPS_PROXY}`); console.log('โœ… DataPilot will use these proxy settings'); } console.log('\nโœจ Installation test complete!'); console.log('๐Ÿ“– Run "datapilot --help" for usage information');