This commit is contained in:
119
scripts/test-ci-local.sh
Executable file
119
scripts/test-ci-local.sh
Executable file
@@ -0,0 +1,119 @@
|
||||
#!/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 тест завершен!"
|
||||
Reference in New Issue
Block a user