mirror of
https://github.com/DeNNiiInc/Connect-5.git
synced 2026-04-17 18:26:01 +00:00
- 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
108 lines
3.8 KiB
Bash
108 lines
3.8 KiB
Bash
#!/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 ""
|