Files
igny8/docs/verify-venv-dependencies.sh
2025-11-09 19:07:06 +05:00

150 lines
6.2 KiB
Bash

#!/bin/bash
# Verification Script: Check if venv folders are in use
# Run this script to verify nothing active depends on .venv or venv folders
echo "=========================================="
echo "IGNY8 Venv Dependency Verification Script"
echo "=========================================="
echo ""
# Colors for output
GREEN='\033[0;32m'
RED='\033[0;31m'
YELLOW='\033[1;33m'
NC='\033[0m' # No Color
VENV_PATH="/data/app/igny8/backend/venv"
DOTVENV_PATH="/data/app/igny8/backend/.venv"
echo "Step 1: Check if any processes are using venv folders"
echo "------------------------------------------------------"
echo "Checking for processes with venv in command line..."
ps aux | grep -E "(venv|\.venv)" | grep -v grep || echo -e "${GREEN}✓ No processes found using venv${NC}"
echo ""
echo "Step 2: Check if Python processes are running from venv"
echo "------------------------------------------------------"
echo "Checking Python processes..."
ps aux | grep python | grep -v grep | while read line; do
if echo "$line" | grep -qE "(venv|\.venv)"; then
echo -e "${RED}✗ Found Python process using venv:${NC}"
echo " $line"
fi
done
echo -e "${GREEN}✓ No Python processes using venv found${NC}"
echo ""
echo "Step 3: Check if Docker containers reference venv"
echo "------------------------------------------------------"
echo "Checking Docker container mounts..."
docker inspect $(docker ps -q) --format '{{.Name}}: {{range .Mounts}}{{.Source}} {{end}}' 2>/dev/null | grep -E "(venv|\.venv)" || echo -e "${GREEN}✓ No Docker containers mount venv folders${NC}"
echo ""
echo "Step 4: Check if any files are open/locked in venv folders"
echo "------------------------------------------------------"
echo "Checking for open file handles..."
if command -v lsof >/dev/null 2>&1; then
lsof +D "$VENV_PATH" 2>/dev/null | head -20 || echo -e "${GREEN}✓ No open files in venv/${NC}"
lsof +D "$DOTVENV_PATH" 2>/dev/null | head -20 || echo -e "${GREEN}✓ No open files in .venv/${NC}"
else
echo -e "${YELLOW}⚠ lsof not available, skipping file handle check${NC}"
fi
echo ""
echo "Step 5: Check if any scripts reference venv paths"
echo "------------------------------------------------------"
echo "Checking for venv references in shell scripts..."
find /data/app/igny8 -name "*.sh" -type f 2>/dev/null | xargs grep -lE "(venv|\.venv)" 2>/dev/null | while read file; do
echo -e "${YELLOW}⚠ Found reference in: $file${NC}"
grep -nE "(venv|\.venv)" "$file" | head -3
done || echo -e "${GREEN}✓ No shell scripts reference venv${NC}"
echo ""
echo "Step 6: Check Docker container Python paths"
echo "------------------------------------------------------"
echo "Checking Python executable paths in containers..."
for container in igny8_backend igny8_celery_worker igny8_celery_beat; do
if docker ps --format '{{.Names}}' | grep -q "^${container}$"; then
echo "Container: $container"
docker exec "$container" which python3 2>/dev/null || echo " (container not accessible)"
docker exec "$container" python3 -c "import sys; print('Python path:', sys.executable)" 2>/dev/null | grep -v "Python path:" || echo " (container not accessible)"
docker exec "$container" sh -c 'echo $VIRTUAL_ENV' 2>/dev/null | grep -v "^$" && echo -e "${RED}✗ VIRTUAL_ENV is set${NC}" || echo -e "${GREEN} ✓ No VIRTUAL_ENV set${NC}"
fi
done
echo ""
echo "Step 7: Check if venv folders are in Dockerfile"
echo "------------------------------------------------------"
echo "Checking Dockerfile for venv references..."
if [ -f "/data/app/igny8/backend/Dockerfile" ]; then
grep -nE "(venv|\.venv)" /data/app/igny8/backend/Dockerfile 2>/dev/null && echo -e "${YELLOW}⚠ Found venv reference in Dockerfile${NC}" || echo -e "${GREEN}✓ No venv references in Dockerfile${NC}"
else
echo -e "${YELLOW}⚠ Dockerfile not found${NC}"
fi
echo ""
echo "Step 8: Check docker-compose files for venv references"
echo "------------------------------------------------------"
echo "Checking docker-compose files..."
find /data/app -name "docker-compose*.yml" -type f 2>/dev/null | while read file; do
if grep -qE "(venv|\.venv)" "$file" 2>/dev/null; then
echo -e "${YELLOW}⚠ Found reference in: $file${NC}"
grep -nE "(venv|\.venv)" "$file"
fi
done || echo -e "${GREEN}✓ No venv references in docker-compose files${NC}"
echo ""
echo "Step 9: Verify containers are running correctly"
echo "------------------------------------------------------"
echo "Checking container health..."
docker ps --format "table {{.Names}}\t{{.Status}}" | grep -E "(igny8_backend|igny8_frontend|igny8_celery)" | while read line; do
if echo "$line" | grep -q "healthy\|Up"; then
echo -e "${GREEN}$line${NC}"
else
echo -e "${RED}$line${NC}"
fi
done
echo ""
echo "Step 10: Test backend API endpoint (verify it works without venv)"
echo "------------------------------------------------------"
echo "Testing backend health endpoint..."
response=$(curl -s -o /dev/null -w "%{http_code}" http://localhost:8011/api/v1/system/status/ 2>/dev/null)
if [ "$response" = "200" ]; then
echo -e "${GREEN}✓ Backend API is responding (HTTP $response)${NC}"
else
echo -e "${RED}✗ Backend API not responding (HTTP $response)${NC}"
fi
echo ""
echo "Step 11: Check if venv folders exist and their sizes"
echo "------------------------------------------------------"
if [ -d "$VENV_PATH" ]; then
size=$(du -sh "$VENV_PATH" 2>/dev/null | cut -f1)
echo -e "${YELLOW}⚠ venv/ exists: $size${NC}"
else
echo -e "${GREEN}✓ venv/ does not exist${NC}"
fi
if [ -d "$DOTVENV_PATH" ]; then
size=$(du -sh "$DOTVENV_PATH" 2>/dev/null | cut -f1)
echo -e "${YELLOW}⚠ .venv/ exists: $size${NC}"
else
echo -e "${GREEN}✓ .venv/ does not exist${NC}"
fi
echo ""
echo "=========================================="
echo "Verification Complete"
echo "=========================================="
echo ""
echo "Summary:"
echo "- If all checks show ✓, venv folders are safe to delete"
echo "- If any check shows ✗, investigate before deleting"
echo "- If any check shows ⚠, review but likely safe"
echo ""
echo "To delete venv folders (if safe):"
echo " rm -rf $VENV_PATH"
echo " rm -rf $DOTVENV_PATH"