Files

116 lines
4.1 KiB
JavaScript

#!/usr/bin/env node
const { execSync } = require('child_process');
const fs = require('fs');
const path = require('path');
/**
* Build System Helper - Shows available build commands and their descriptions
*/
const commands = {
'Development Commands': {
'npm run dev': 'Start development server with hot reload',
'npm run watch': 'Watch mode TypeScript compilation',
'npm run typecheck': 'Type checking without code generation'
},
'Build Commands': {
'npm run build': 'Standard build: clean → compile → copy assets',
'npm run build:clean': 'Clean the dist directory',
'npm run build:compile': 'Compile TypeScript to JavaScript',
'npm run build:copy-assets': 'Copy non-TS files to dist directory',
'npm run build:docker': 'Build for Docker (no tests/migrations)'
},
'Production Build Commands': {
'npm run build:production': 'Full production build with linting, tests, and migrations',
'npm run build:advanced': 'Advanced build script with custom options',
'npm run build:advanced:prod': 'Advanced production build with all validations',
'npm run build:advanced:ci': 'CI/CD friendly build (skips linting)',
'npm run deploy:prod': 'Build for production deployment'
},
'Database Commands': {
'npm run migration:run': 'Run pending database migrations',
'npm run migration:show': 'Show migration status',
'npm run migration:generate <name>': 'Generate new migration',
'npm run migration:create <name>': 'Create empty migration',
'npm run migration:revert': 'Revert last migration',
'npm run migration:full <name>': 'Create, generate, and run migration'
},
'Testing Commands': {
'npm test': 'Run all tests',
'npm run test:watch': 'Run tests in watch mode',
'npm run test:coverage': 'Run tests with coverage report',
'npm run test:redis': 'Run Redis-specific tests'
},
'Deployment Scripts': {
'scripts/deploy.sh': 'Full Linux/Mac deployment script',
'scripts/deploy.bat': 'Full Windows deployment script'
}
};
function showCommands() {
console.log('🔧 SerpentRace Backend Build System\n');
Object.entries(commands).forEach(([category, categoryCommands]) => {
console.log(`\x1b[36m${category}\x1b[0m`);
console.log('=' .repeat(category.length));
Object.entries(categoryCommands).forEach(([command, description]) => {
console.log(` \x1b[32m${command.padEnd(35)}\x1b[0m ${description}`);
});
console.log('');
});
console.log('\x1b[33mQuick Start:\x1b[0m');
console.log(' npm run build # Basic build');
console.log(' npm run build:production # Production build');
console.log(' npm run dev # Development server\n');
console.log('\x1b[33mDocumentation:\x1b[0m');
console.log(' See BUILD.md for detailed documentation');
}
function checkBuildStatus() {
const distPath = path.join(__dirname, '..', 'dist');
if (fs.existsSync(distPath)) {
const stats = fs.statSync(distPath);
console.log(`\x1b[32m✅ Last build:\x1b[0m ${stats.mtime.toLocaleString()}`);
const indexPath = path.join(distPath, 'Api', 'index.js');
if (fs.existsSync(indexPath)) {
console.log('\x1b[32m✅ Main entry point built successfully\x1b[0m');
} else {
console.log('\x1b[31m❌ Main entry point missing\x1b[0m');
}
} else {
console.log('\x1b[33m⚠️ No build found - run "npm run build" first\x1b[0m');
}
}
// Handle command line arguments
const args = process.argv.slice(2);
if (args.includes('--help') || args.includes('-h')) {
showCommands();
} else if (args.includes('--status') || args.includes('-s')) {
checkBuildStatus();
} else if (args.includes('--quick') || args.includes('-q')) {
console.log('🚀 Quick build starting...');
try {
execSync('npm run build', { stdio: 'inherit' });
} catch (error) {
console.error('❌ Quick build failed');
process.exit(1);
}
} else {
showCommands();
checkBuildStatus();
console.log('\n\x1b[33mOptions:\x1b[0m');
console.log(' --help, -h Show this help');
console.log(' --status, -s Show build status only');
console.log(' --quick, -q Run quick build');
}