Files
core/scripts/test-ci-local.sh

120 lines
3.7 KiB
Bash
Raw Normal View History

2025-08-17 11:09:29 +03:00
#!/bin/bash
"""
Локальный тест CI - запускает серверы и тесты как в GitHub Actions
"""
set -e # Останавливаемся при ошибке
echo "🚀 Запуск локального CI теста..."
# Проверяем что мы в корневой папке
if [ ! -f "pyproject.toml" ]; then
echo "❌ Запустите скрипт из корневой папки проекта"
exit 1
fi
# Очищаем предыдущие процессы
echo "🧹 Очищаем предыдущие процессы..."
pkill -f "python dev.py" || true
pkill -f "npm run dev" || true
pkill -f "vite" || true
pkill -f "ci-server.py" || true
rm -f backend.pid frontend.pid ci-server.pid
# Проверяем зависимости
echo "📦 Проверяем зависимости..."
if ! command -v uv &> /dev/null; then
echo "❌ uv не установлен. Установите uv: https://docs.astral.sh/uv/getting-started/installation/"
exit 1
fi
if ! command -v npm &> /dev/null; then
echo "❌ npm не установлен. Установите Node.js: https://nodejs.org/"
exit 1
fi
# Устанавливаем зависимости
echo "📥 Устанавливаем Python зависимости..."
uv sync --group dev
echo "📥 Устанавливаем Node.js зависимости..."
cd panel
npm ci
cd ..
# Создаем тестовую базу
echo "🗄️ Инициализируем тестовую базу..."
touch database.db
uv run python -c "
from orm.base import Base
from orm.community import Community, CommunityFollower, CommunityAuthor
from orm.draft import Draft
from orm.invite import Invite
from orm.notification import Notification
from orm.rating import Rating
from orm.reaction import Reaction
from orm.shout import Shout
from orm.topic import Topic
from services.db import get_engine
engine = get_engine()
Base.metadata.create_all(engine)
print('Test database initialized')
"
# Запускаем серверы
echo "🚀 Запускаем серверы..."
python scripts/ci-server.py &
CI_PID=$!
echo "CI Server PID: $CI_PID"
# Ждем готовности серверов
echo "⏳ Ждем готовности серверов..."
timeout 120 bash -c '
while true; do
if curl -f http://localhost:8000/ > /dev/null 2>&1 && \
curl -f http://localhost:3000/ > /dev/null 2>&1; then
echo "✅ Все серверы готовы!"
break
fi
echo "⏳ Ожидаем серверы..."
sleep 2
done
'
if [ $? -ne 0 ]; then
echo "❌ Таймаут ожидания серверов"
kill $CI_PID 2>/dev/null || true
exit 1
fi
echo "🎯 Серверы запущены! Запускаем тесты..."
# Запускаем тесты
echo "🧪 Запускаем unit тесты..."
uv run pytest tests/ -m "not e2e" -v --tb=short
echo "🧪 Запускаем integration тесты..."
uv run pytest tests/ -m "integration" -v --tb=short
echo "🧪 Запускаем E2E тесты..."
uv run pytest tests/ -m "e2e" -v --tb=short
echo "🧪 Запускаем browser тесты..."
uv run pytest tests/ -m "browser" -v --tb=short || echo "⚠️ Browser тесты завершились с ошибками"
# Генерируем отчет о покрытии
echo "📊 Генерируем отчет о покрытии..."
uv run pytest tests/ --cov=. --cov-report=html
echo "🎉 Все тесты завершены!"
# Очищаем
echo "🧹 Очищаем ресурсы..."
kill $CI_PID 2>/dev/null || true
pkill -f "python dev.py" || true
pkill -f "npm run dev" || true
pkill -f "vite" || true
rm -f backend.pid frontend.pid ci-server.pid
echo "✅ Локальный CI тест завершен!"