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