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
JavaScript
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();
}