Skip to main content
Glama
build.js4.02 kB
#!/usr/bin/env node const { execSync } = require('child_process'); const fs = require('fs'); const path = require('path'); console.log('Android UI Assist MCP Server - Build Script'); console.log('============================================'); // Function to execute a command and handle errors function executeCommand(command, errorMessage) { try { console.log(`Executing: ${command}`); execSync(command, { stdio: 'inherit' }); return true; } catch (error) { console.error(`Error: ${errorMessage}`); console.error(error.message); return false; } } // Function to copy directory recursively function copyDir(src, dest) { fs.mkdirSync(dest, { recursive: true }); const entries = fs.readdirSync(src, { withFileTypes: true }); for (const entry of entries) { const srcPath = path.join(src, entry.name); const destPath = path.join(dest, entry.name); if (entry.isDirectory()) { copyDir(srcPath, destPath); } else { fs.copyFileSync(srcPath, destPath); } } } // Clean previous build console.log('\nCleaning previous build...'); if (fs.existsSync('dist')) { fs.rmSync('dist', { recursive: true, force: true }); } console.log('✓ Previous build cleaned'); // Install dependencies console.log('\nInstalling dependencies...'); if (!executeCommand('npm ci --only=production', 'Failed to install dependencies')) { process.exit(1); } console.log('✓ Dependencies installed'); // Build TypeScript console.log('\nBuilding TypeScript...'); if (!executeCommand('npx tsc', 'Failed to build TypeScript')) { process.exit(1); } console.log('✓ TypeScript built successfully'); // Copy package.json to dist console.log('\nCopying package.json...'); const packageJson = JSON.parse(fs.readFileSync('package.json', 'utf8')); // Remove dev dependencies and scripts for distribution delete packageJson.devDependencies; delete packageJson.scripts; delete packageJson.jest; delete packageJson.eslintConfig; delete packageJson.prettier; delete packageJson.husky; // Add bin field if not exists if (!packageJson.bin) { packageJson.bin = { 'android-ui-assist-mcp': 'index.js' }; } // Update main field packageJson.main = 'index.js'; // Write to dist fs.writeFileSync(path.join('dist', 'package.json'), JSON.stringify(packageJson, null, 2)); console.log('✓ package.json copied and updated'); // Copy README.md console.log('\nCopying README.md...'); if (fs.existsSync('README.md')) { fs.copyFileSync('README.md', path.join('dist', 'README.md')); console.log('✓ README.md copied'); } else { console.warn('Warning: README.md not found'); } // Copy LICENSE console.log('\nCopying LICENSE...'); if (fs.existsSync('LICENSE')) { fs.copyFileSync('LICENSE', path.join('dist', 'LICENSE')); console.log('✓ LICENSE copied'); } else { console.warn('Warning: LICENSE not found'); } // Create a .npmignore file console.log('\nCreating .npmignore...'); const npmignoreContent = `# Source files src/ tests/ examples/ docs/ scripts/ docker/ # Build files tsconfig.json .eslintrc.json .prettierrc jest.config.json # Development files .gitignore .gitattributes .npmignore .nycrc CHANGELOG.md CONTRIBUTING.md IMPLEMENTATION_PLAN.md # IDE files .vscode/ .idea/ *.swp *.swo *~ # OS files .DS_Store Thumbs.db `; fs.writeFileSync(path.join('dist', '.npmignore'), npmignoreContent); console.log('✓ .npmignore created'); // Create a distribution package console.log('\nCreating distribution package...'); if (fs.existsSync('package')) { fs.rmSync('package', { recursive: true, force: true }); } // Copy dist to package copyDir('dist', 'package'); console.log('✓ Distribution package created'); console.log('\n============================================'); console.log('Build completed successfully!'); console.log('\nDistribution package created in ./package/'); console.log('To publish to npm, run:'); console.log('cd package && npm publish');

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/infiniV/Android-Ui-MCP'

If you have feedback or need assistance with the MCP directory API, please join our Discord server