Files
Connect-5/setup-auto-deploy.sh
DeNNiiInc 6c4aedec1d Add automatic deployment system to fix database disconnection after git pull
- Create post-merge git hook for auto service restart
- Add setup-auto-deploy.sh for easy installation
- Hook detects PM2, systemd, or manual process management
- Automatically runs npm install if package.json changes
- Eliminates need to manually run deploy.sh after updates
2025-12-22 16:09:19 +11:00

108 lines
3.8 KiB
Bash
Raw Permalink Blame History

This file contains invisible Unicode characters
This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
#!/bin/bash
# Auto-Deploy Setup Script
# Run this once to set up automatic service restarts after git pull
echo "╔════════════════════════════════════════════════════════════╗"
echo "║ Connect-5 Auto-Deploy Setup ║"
echo "║ Fixes: Database connection after git pull ║"
echo "╚════════════════════════════════════════════════════════════╝"
echo ""
# Colors
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
RED='\033[0;31m'
BLUE='\033[0;34m'
NC='\033[0m'
# Get the directory where this script is located
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
PROJECT_DIR="$SCRIPT_DIR"
HOOKS_DIR="$PROJECT_DIR/.git/hooks"
echo -e "${BLUE}📁 Project Directory:${NC} $PROJECT_DIR"
echo ""
# Check if .git directory exists
if [ ! -d "$PROJECT_DIR/.git" ]; then
echo -e "${RED}❌ Error: .git directory not found${NC}"
echo "This doesn't appear to be a git repository"
exit 1
fi
# Create hooks directory if it doesn't exist
if [ ! -d "$HOOKS_DIR" ]; then
echo -e "${YELLOW}Creating hooks directory...${NC}"
mkdir -p "$HOOKS_DIR"
fi
# Copy the post-merge hook
echo -e "${BLUE}📄 Installing git post-merge hook...${NC}"
if [ -f "$PROJECT_DIR/git-hooks/post-merge" ]; then
cp "$PROJECT_DIR/git-hooks/post-merge" "$HOOKS_DIR/post-merge"
chmod +x "$HOOKS_DIR/post-merge"
echo -e "${GREEN}✅ Hook installed: .git/hooks/post-merge${NC}"
else
echo -e "${RED}❌ Error: git-hooks/post-merge file not found${NC}"
exit 1
fi
# Test which service manager is available
echo ""
echo -e "${BLUE}🔍 Detecting service manager...${NC}"
SERVICE_TYPE="none"
if command -v pm2 &> /dev/null; then
SERVICE_TYPE="pm2"
echo -e "${GREEN}✅ Detected: PM2${NC}"
echo " The hook will use: pm2 restart"
elif systemctl list-units --full --all 2>/dev/null | grep -q 'connect5.service'; then
SERVICE_TYPE="systemd"
echo -e "${GREEN}✅ Detected: Systemd service${NC}"
echo " The hook will use: systemctl restart connect5"
else
SERVICE_TYPE="manual"
echo -e "${YELLOW}⚠️ No service manager detected${NC}"
echo " The hook will use: pkill + restart"
fi
echo ""
echo "╔════════════════════════════════════════════════════════════╗"
echo "║ Setup Complete! ║"
echo "╚════════════════════════════════════════════════════════════╝"
echo ""
echo -e "${GREEN}✅ Auto-deploy is now configured!${NC}"
echo ""
echo "How it works:"
echo "1. Git auto-pulls changes to your server"
echo "2. The post-merge hook automatically runs"
echo "3. If package.json changed, it runs: npm install"
echo "4. It restarts the Node.js service automatically"
echo "5. Database reconnects without manual intervention"
echo ""
echo "To test it:"
echo "1. Make a change to your code"
echo "2. Git push from your local machine"
echo "3. Wait for auto-pull on server"
echo "4. Service should restart automatically!"
echo ""
echo -e "${BLUE} Service type detected:${NC} $SERVICE_TYPE"
echo ""
# Optional: Test run the hook
read -p "Do you want to test the hook now? (y/n): " -n 1 -r
echo
if [[ $REPLY =~ ^[Yy]$ ]]; then
echo ""
echo -e "${BLUE}🧪 Testing hook...${NC}"
echo ""
bash "$HOOKS_DIR/post-merge"
fi
echo ""
echo -e "${GREEN}🎉 You're all set!${NC}"
echo "You won't need to run deploy.sh manually anymore."
echo ""