name: Deploy to Production on: push: branches: [ main, master ] jobs: deploy-production: runs-on: ubuntu-latest steps: - name: Deploy to Production Server uses: appleboy/ssh-action@v1.0.0 with: host: ${{ secrets.PROD_HOST }} username: ${{ secrets.PROD_USER }} key: ${{ secrets.SSH_PRIVATE_KEY }} use_insecure_cipher: true debug: true script_stop: true script: | set -e cd /var/www/platform/prod echo "đŸ“Ļ Pulling latest changes from repository..." git pull origin main || git pull origin master || git pull origin develop || git pull origin dev || true echo "🔄 Restarting Docker services..." docker compose restart echo "📊 Running migrations (if needed)..." docker compose exec -T web python manage.py migrate || true echo "📁 Collecting static files (if needed)..." docker compose exec -T web python manage.py collectstatic --noinput --clear || echo "âš ī¸ collectstatic failed, but continuing..." echo "✅ Dev deployment completed successfully" echo "â„šī¸ You can continue working directly on the server" - name: Health Check uses: appleboy/ssh-action@v1.0.0 with: host: ${{ secrets.PROD_HOST }} username: ${{ secrets.PROD_USER }} key: ${{ secrets.SSH_PRIVATE_KEY }} use_insecure_cipher: true debug: true script_stop: true script: | set -e cd /var/www/platform/prod echo "âŗ Waiting for services to start..." sleep 10 echo "📊 Checking Docker containers status..." docker compose ps | head -10 echo "" echo "đŸĨ Checking health endpoint..." HEALTH_RESPONSE=$(curl -s http://localhost:8123/health/ 2>&1) if [ -n "$HEALTH_RESPONSE" ]; then echo "✅ Health endpoint is responding" echo "$HEALTH_RESPONSE" | python3 -m json.tool 2>/dev/null | head -10 || echo "$HEALTH_RESPONSE" | head -5 if echo "$HEALTH_RESPONSE" | grep -q '"database".*"healthy"'; then echo "✅ Database is healthy - deployment successful!" else echo "âš ī¸ Database check unclear, but endpoint responds" fi else echo "âš ī¸ Health endpoint not available yet, but deployment completed" fi