#!/bin/bash # Script to check if deployment is ready # Run this before attempting deployment set -e # Change to project root SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)" PROJECT_ROOT="$(cd "$SCRIPT_DIR/../../.." && pwd)" cd "$PROJECT_ROOT" echo "🔍 Checking deployment readiness..." # Colors RED='\033[0;31m' GREEN='\033[0;32m' YELLOW='\033[1;33m' BLUE='\033[0;34m' NC='\033[0m' SERVER_IP="147.45.152.129" SSH_KEY="${SSH_DEPLOY_KEY:-$HOME/.ssh/forgejo_deploy}" print_status() { echo -e "${GREEN}[OK]${NC} $1" } print_warning() { echo -e "${YELLOW}[WARN]${NC} $1" } print_error() { echo -e "${RED}[ERROR]${NC} $1" } print_info() { echo -e "${BLUE}[INFO]${NC} $1" } # Check 1: SSH key exists echo "1. Checking SSH key..." if [ -f "$SSH_KEY" ]; then print_status "SSH private key found at $SSH_KEY" else print_error "SSH private key not found at $SSH_KEY" echo " Generate with: ssh-keygen -t ed25519 -C 'forgejo-deploy@memo-cards.online' -f $SSH_KEY" exit 1 fi # Check 2: SSH connection echo "2. Checking SSH connection..." if ssh -o ConnectTimeout=10 -o BatchMode=yes -i "$SSH_KEY" root@$SERVER_IP "echo 'SSH OK'" 2>/dev/null; then print_status "SSH connection to server successful" else print_error "Cannot connect to server via SSH" echo " Possible causes:" echo " 1. SSH key has a passphrase - remove it with: ssh-keygen -p -f $SSH_KEY" echo " 2. Public key not added to server: ssh-copy-id -i $SSH_KEY.pub root@$SERVER_IP" echo " 3. Wrong permissions on ~/.ssh directory: chmod 700 ~/.ssh && chmod 600 ~/.ssh/*" echo " 4. Server firewall blocks SSH: check ufw status on server" exit 1 fi # Check 3: Required software on server echo "3. Checking server software..." if ssh -i "$SSH_KEY" root@$SERVER_IP "which dart nginx" >/dev/null 2>&1; then print_status "Dart and Nginx are installed on server" else print_error "Dart or Nginx not found on server" echo " Install with: apt update && apt install -y dart nginx" exit 1 fi # Check 4: DNS resolution echo "4. Checking DNS resolution..." for domain in "memo-cards.online" "api.memo-cards.online" "code.memo-cards.online"; do if nslookup "$domain" 2>/dev/null | grep -q "$SERVER_IP"; then print_status "DNS for $domain resolves to $SERVER_IP" else print_warning "DNS for $domain may not be configured correctly" echo " Expected: $domain -> $SERVER_IP" fi done # Check 5: Network connectivity echo "5. Checking network connectivity..." for port in 22 80 443 8443 8081; do if nc -z -w5 $SERVER_IP $port 2>/dev/null; then print_status "Port $port is accessible" else print_warning "Port $port is not accessible" fi done # Check 6: Local tests echo "6. Running local CI/CD tests..." if ./test_ci_locally.sh 2>&1 | grep -q "SUCCESS.*CORS configuration check completed"; then print_status "Local CI/CD tests passed" else print_warning "Local CI/CD tests failed - check output above" fi # Summary echo "" print_info "=== DEPLOYMENT READINESS SUMMARY ===" print_info "Server IP: $SERVER_IP" print_info "SSH Key: $SSH_KEY" print_info "" print_info "If all checks passed, you can proceed with deployment!" print_info "Run: git push origin main" echo ""