UNPKG

backend-mcp

Version:

Generador automático de backends con Node.js, Express, Prisma y módulos configurables. Servidor MCP compatible con npx para agentes IA. Soporta PostgreSQL, MySQL, MongoDB y SQLite.

124 lines (105 loc) 4.7 kB
#!/usr/bin/env node const { execSync } = require('child_process'); const chalk = require('chalk'); const fs = require('fs'); const path = require('path'); const packagePath = path.join(__dirname, '..', 'package.json'); const packageJson = JSON.parse(fs.readFileSync(packagePath, 'utf8')); console.log(chalk.blue('🚀 Iniciando proceso de publicación de Backend MCP...\n')); // Función para ejecutar comandos function runCommand(command, description) { console.log(chalk.yellow(`📋 ${description}...`)); try { execSync(command, { stdio: 'inherit', cwd: path.join(__dirname, '..') }); console.log(chalk.green(`✅ ${description} completado\n`)); } catch (error) { console.error(chalk.red(`❌ Error en: ${description}`)); console.error(error.message); process.exit(1); } } // Función para verificar login de NPM function checkNpmLogin() { try { const username = execSync('npm whoami', { encoding: 'utf8' }).trim(); console.log(chalk.green(`✅ Logueado en NPM como: ${username}\n`)); return username; } catch (error) { console.error(chalk.red('❌ No estás logueado en NPM')); console.log(chalk.yellow('Por favor ejecuta: npm login')); process.exit(1); } } // Función para verificar repositorio Git function checkGitStatus() { try { const status = execSync('git status --porcelain', { encoding: 'utf8' }); if (status.trim()) { console.log(chalk.yellow('⚠️ Hay cambios sin commitear:')); console.log(status); console.log(chalk.yellow('Recomendamos hacer commit antes de publicar\n')); } else { console.log(chalk.green('✅ Repositorio Git limpio\n')); } } catch (error) { console.log(chalk.yellow('⚠️ No es un repositorio Git o Git no está disponible\n')); } } // Función principal function main() { console.log(chalk.cyan(`📦 Preparando publicación de ${packageJson.name} v${packageJson.version}\n`)); // Verificaciones previas checkNpmLogin(); checkGitStatus(); // Validaciones runCommand('npm run validate', 'Validando módulos'); runCommand('npm test', 'Ejecutando tests'); runCommand('npm run test:auth', 'Verificando sistema de autenticación'); // Generar documentación runCommand('npm run docs', 'Generando documentación'); // Verificar que el paquete se puede construir runCommand('npm pack --dry-run', 'Verificando contenido del paquete'); console.log(chalk.blue('🎯 Todas las verificaciones pasaron. Procediendo con la publicación...\n')); // Publicar runCommand('npm publish', 'Publicando en NPM'); console.log(chalk.green.bold('🎉 ¡Publicación exitosa!\n')); // Verificación post-publicación console.log(chalk.blue('🔍 Verificando publicación...')); runCommand(`npm view ${packageJson.name}`, 'Verificando paquete en NPM'); console.log(chalk.green.bold('\n✨ ¡Backend MCP publicado exitosamente!')); console.log(chalk.cyan('\n📋 Próximos pasos:')); console.log(chalk.white('1. Probar instalación: npx backend-mcp --help')); console.log(chalk.white('2. Actualizar documentación si es necesario')); console.log(chalk.white('3. Anunciar la nueva versión')); console.log(chalk.yellow('\n🔑 Tokens JWT de demostración disponibles:')); console.log(chalk.white('Ejecuta: npm run auth:demo')); } // Manejo de argumentos const args = process.argv.slice(2); if (args.includes('--help') || args.includes('-h')) { console.log(chalk.cyan('📖 Script de Publicación NPM - Backend MCP\n')); console.log(chalk.white('Uso: node scripts/publish-npm.js [opciones]\n')); console.log(chalk.white('Opciones:')); console.log(chalk.white(' --help, -h Mostrar esta ayuda')); console.log(chalk.white(' --dry-run Ejecutar sin publicar (solo validaciones)')); console.log(chalk.white('\nEste script:')); console.log(chalk.white('✅ Verifica login de NPM')); console.log(chalk.white('✅ Ejecuta validaciones y tests')); console.log(chalk.white('✅ Genera documentación')); console.log(chalk.white('✅ Publica el paquete')); console.log(chalk.white('✅ Verifica la publicación')); process.exit(0); } if (args.includes('--dry-run')) { console.log(chalk.yellow('🧪 Modo DRY RUN - No se publicará\n')); // Ejecutar solo validaciones checkNpmLogin(); checkGitStatus(); runCommand('npm run validate', 'Validando módulos'); runCommand('npm test', 'Ejecutando tests'); runCommand('npm run test:auth', 'Verificando sistema de autenticación'); runCommand('npm pack --dry-run', 'Verificando contenido del paquete'); console.log(chalk.green('✅ Todas las validaciones pasaron. Listo para publicar.')); } else { main(); }