120 lines
3.7 KiB
Bash
Executable File
120 lines
3.7 KiB
Bash
Executable File
#!/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 тест завершен!"
|