#!/bin/bash # Deployment Script for ScoreAIManage on Render # This script prepares the application for deployment set -e echo "๐Ÿš€ Starting deployment preparation for ScoreAIManage..." # Check if we're in the correct directory if [ ! -f "package.json" ]; then echo "โŒ Error: package.json not found. Please run this script from the project root." exit 1 fi # Install dependencies echo "๐Ÿ“ฆ Installing dependencies..." npm ci --production=false # Run tests echo "๐Ÿงช Running tests..." npm test # Build the application echo "๐Ÿ”จ Building application..." npm run build || echo "โš ๏ธ Build script not found, continuing..." # Create logs directory echo "๐Ÿ“ Creating logs directory..." mkdir -p logs # Set production environment echo "๐ŸŒ Setting production environment..." export NODE_ENV=production # Check environment variables echo "๐Ÿ” Checking environment variables..." if [ -f ".env.production" ]; then echo "โœ… Production environment file found" # Copy production env to .env for deployment cp .env.production .env else echo "โš ๏ธ Warning: .env.production not found" fi # Create database initialization script for production echo "๐Ÿ—„๏ธ Preparing database initialization..." cat > scripts/init-production-db.sql << 'EOF' -- Production Database Initialization for ScoreAIManage -- This script initializes the database with basic structure -- Run the main schema \i database_schema_postgresql.sql -- Create production user with limited privileges DO $$ BEGIN IF NOT EXISTS (SELECT FROM pg_catalog.pg_roles WHERE rolname = 'scoremanage_user') THEN CREATE ROLE scoremanage_user WITH LOGIN PASSWORD 'change_this_password'; END IF; END $$; -- Grant necessary permissions GRANT CONNECT ON DATABASE scoremanage TO scoremanage_user; GRANT USAGE ON SCHEMA public TO scoremanage_user; GRANT SELECT, INSERT, UPDATE, DELETE ON ALL TABLES IN SCHEMA public TO scoremanage_user; GRANT USAGE, SELECT ON ALL SEQUENCES IN SCHEMA public TO scoremanage_user; -- Set default privileges for future tables ALTER DEFAULT PRIVILEGES IN SCHEMA public GRANT SELECT, INSERT, UPDATE, DELETE ON TABLES TO scoremanage_user; ALTER DEFAULT PRIVILEGES IN SCHEMA public GRANT USAGE, SELECT ON SEQUENCES TO scoremanage_user; EOF echo "โœ… Database initialization script created" # Create health check endpoint echo "๐Ÿฅ Creating health check endpoint..." cat > health-check.js << 'EOF' // Health check script for Render const http = require('http'); const options = { hostname: 'localhost', port: process.env.PORT || 10000, path: '/api/health', method: 'GET', timeout: 5000 }; const req = http.request(options, (res) => { if (res.statusCode === 200) { console.log('โœ… Health check passed'); process.exit(0); } else { console.log(`โŒ Health check failed with status: ${res.statusCode}`); process.exit(1); } }); req.on('error', (err) => { console.log(`โŒ Health check error: ${err.message}`); process.exit(1); }); req.on('timeout', () => { console.log('โŒ Health check timeout'); req.destroy(); process.exit(1); }); req.end(); EOF echo "โœ… Health check script created" # Create deployment info file echo "๐Ÿ“‹ Creating deployment info..." cat > deployment-info.json << EOF { "deployed_at": "$(date -u +%Y-%m-%dT%H:%M:%S.%3NZ)", "version": "$(node -p "require('./package.json').version")", "environment": "production", "platform": "Render", "database": "PostgreSQL", "node_version": "$(node --version)", "npm_version": "$(npm --version)" } EOF echo "โœ… Deployment info created" # Final checks echo "๐Ÿ” Final deployment checks..." # Check if main entry point exists if [ -f "server.js" ] || [ -f "app.js" ] || [ -f "index.js" ]; then echo "โœ… Main entry point found" else echo "โš ๏ธ Warning: No main entry point (server.js, app.js, or index.js) found" fi # Check if package.json has start script if npm run | grep -q "start"; then echo "โœ… Start script found" else echo "โš ๏ธ Warning: No start script found in package.json" fi echo "" echo "๐ŸŽ‰ Deployment preparation completed!" echo "" echo "๐Ÿ“‹ Next steps:" echo "1. Push your code to GitHub" echo "2. Connect your repository to Render" echo "3. Configure environment variables in Render dashboard" echo "4. Deploy!" echo "" echo "๐ŸŒ Your application will be available at: https://scoreaimanage.onrender.com" echo "" echo "๐Ÿ“Š Health check endpoint: https://scoreaimanage.onrender.com/api/health" echo "๐Ÿ“š API documentation: https://scoreaimanage.onrender.com/api/docs" echo ""