Stabilize staff concurrency and premium emoji; enable verified Drone deployment
Some checks failed
continuous-integration/drone/push Build is failing
Some checks failed
continuous-integration/drone/push Build is failing
This commit is contained in:
144
.drone.yml
144
.drone.yml
@@ -1,113 +1,69 @@
|
||||
kind: pipeline
|
||||
type: docker
|
||||
name: default
|
||||
name: test-and-deploy
|
||||
|
||||
trigger:
|
||||
branch:
|
||||
- master
|
||||
- main
|
||||
- develop
|
||||
event:
|
||||
- push
|
||||
- pull_request
|
||||
|
||||
platform:
|
||||
os: linux
|
||||
arch: amd64
|
||||
|
||||
clone:
|
||||
depth: 1
|
||||
event: [push, pull_request]
|
||||
|
||||
steps:
|
||||
# Шаг 1: Проверка кода
|
||||
- name: code-quality
|
||||
- name: checks
|
||||
image: python:3.12-slim
|
||||
environment:
|
||||
PYTHONPATH: /drone/src
|
||||
BOT_TOKEN: "123456:TEST_TOKEN_FOR_ISOLATED_TESTS"
|
||||
commands:
|
||||
- apt-get update && apt-get install -y git
|
||||
- apt-get update && apt-get install -y --no-install-recommends git
|
||||
- pip install --upgrade pip
|
||||
- pip install flake8 black isort mypy
|
||||
- echo "🔍 Проверка стиля кода..."
|
||||
- flake8 --max-line-length=120 --ignore=E203,E501,W503 src/ main.py || echo "⚠️ Предупреждения flake8"
|
||||
- echo "🎨 Проверка форматирования..."
|
||||
- black --check --line-length=120 src/ main.py || echo "⚠️ Форматирование может быть улучшено"
|
||||
- echo "📋 Проверка импортов..."
|
||||
- isort --check-only --profile black src/ main.py || echo "⚠️ Импорты могут быть улучшены"
|
||||
- pip install -r requirements-dev.txt
|
||||
- python -m compileall -q src main.py scripts migrations
|
||||
- ruff check src main.py scripts tests migrations
|
||||
- python scripts/check_secrets.py
|
||||
- pip-audit -r requirements.txt
|
||||
- pytest -q
|
||||
|
||||
# Шаг 2: Установка зависимостей
|
||||
- name: install-dependencies
|
||||
- name: postgres-tests
|
||||
image: python:3.12-slim
|
||||
environment:
|
||||
PYTHONPATH: /drone/src
|
||||
BOT_TOKEN: "123456:TEST_TOKEN_FOR_ISOLATED_TESTS"
|
||||
DATABASE_URL: "postgresql+asyncpg://lottery_test:lottery_test@postgres:5432/lottery_test"
|
||||
TEST_DATABASE_URL: "postgresql+asyncpg://lottery_test:lottery_test@postgres:5432/lottery_test"
|
||||
commands:
|
||||
- echo "📦 Установка зависимостей..."
|
||||
- pip install --upgrade pip
|
||||
- pip install -r requirements.txt
|
||||
- echo "✅ Зависимости установлены"
|
||||
- pip install -r requirements-dev.txt
|
||||
- python scripts/wait_database.py
|
||||
- alembic upgrade head
|
||||
- python scripts/check_schema.py
|
||||
- pytest -q
|
||||
|
||||
# Шаг 3: Проверка импортов и синтаксиса
|
||||
- name: syntax-check
|
||||
- name: package
|
||||
image: python:3.12-slim
|
||||
commands:
|
||||
- python scripts/build_release.py
|
||||
|
||||
- name: deploy
|
||||
image: python:3.12-slim
|
||||
environment:
|
||||
PYTHONPATH: /drone/src
|
||||
DATABASE_URL: sqlite+aiosqlite:///./test.db
|
||||
DEPLOY_HOST: "192.168.40.112"
|
||||
DEPLOY_USER:
|
||||
from_secret: lottery_deploy_user
|
||||
DEPLOY_SSH_KEY:
|
||||
from_secret: lottery_deploy_ssh_key
|
||||
DEPLOY_KNOWN_HOSTS:
|
||||
from_secret: lottery_deploy_known_hosts
|
||||
DEPLOY_PATH:
|
||||
from_secret: lottery_deploy_path
|
||||
LOTTERY_ENV:
|
||||
from_secret: lottery_env
|
||||
commands:
|
||||
- pip install --upgrade pip
|
||||
- pip install -r requirements.txt
|
||||
- echo "🔍 Проверка синтаксиса Python..."
|
||||
- python -m py_compile main.py
|
||||
- python -m py_compile src/core/*.py || echo "⚠️ Некоторые файлы не компилируются"
|
||||
- python -m py_compile src/handlers/*.py || echo "⚠️ Некоторые файлы не компилируются"
|
||||
- python -m py_compile src/utils/*.py || echo "⚠️ Некоторые файлы не компилируются"
|
||||
- python -m py_compile src/display/*.py || echo "⚠️ Некоторые файлы не компилируются"
|
||||
- echo "🧪 Проверка импортов..."
|
||||
- python -c "from src.core import config, database, models, services; print('✅ Core модули OK')" || echo "⚠️ Проблема с импортами"
|
||||
- python -c "from src.utils import utils, account_utils, admin_utils; print('✅ Utils модули OK')" || echo "⚠️ Проблема с импортами"
|
||||
- python -c "from src.display import winner_display; print('✅ Display модули OK')" || echo "⚠️ Проблема с импортами"
|
||||
- echo "✅ Проверка синтаксиса завершена"
|
||||
|
||||
# Шаг 4: Инициализация тестовой БД
|
||||
- name: database-init
|
||||
image: python:3.12-slim
|
||||
environment:
|
||||
PYTHONPATH: /drone/src
|
||||
DATABASE_URL: sqlite+aiosqlite:///./test.db
|
||||
commands:
|
||||
- pip install --upgrade pip
|
||||
- pip install -r requirements.txt
|
||||
- echo "🗄️ Инициализация тестовой базы данных..."
|
||||
- python -c "from src.core.database import init_db; import asyncio; asyncio.run(init_db())" || echo "⚠️ БД не инициализирована"
|
||||
- echo "✅ Тестовая БД готова"
|
||||
|
||||
# Шаг 5: Запуск тестов
|
||||
- name: run-tests
|
||||
image: python:3.12-slim
|
||||
environment:
|
||||
PYTHONPATH: /drone/src
|
||||
DATABASE_URL: sqlite+aiosqlite:///./test.db
|
||||
BOT_TOKEN: "dummy_token_for_tests"
|
||||
ADMIN_IDS: "123456789"
|
||||
commands:
|
||||
- pip install --upgrade pip
|
||||
- pip install -r requirements.txt
|
||||
- echo "🧪 Запуск тестов..."
|
||||
- python test_basic_features.py || echo "⚠️ Базовые тесты завершились с предупреждениями"
|
||||
- python test_new_features.py || echo "⚠️ Тесты новых функций завершились с предупреждениями"
|
||||
- echo "✅ Тесты выполнены"
|
||||
|
||||
# Шаг 6: Создание артефактов
|
||||
- name: build-artifacts
|
||||
image: python:3.12-slim
|
||||
commands:
|
||||
- echo "📦 Создание артефактов сборки..."
|
||||
- mkdir -p dist
|
||||
- tar -czf dist/lottery_bot_build_${DRONE_BUILD_NUMBER}.tar.gz src/ main.py requirements.txt Makefile README.md alembic.ini migrations/
|
||||
- echo "✅ Артефакты созданы"
|
||||
- ls -la dist/
|
||||
- apt-get update && apt-get install -y --no-install-recommends openssh-client
|
||||
- python scripts/drone_deploy.py
|
||||
when:
|
||||
branch:
|
||||
- main
|
||||
- master
|
||||
event:
|
||||
- push
|
||||
branch: [master]
|
||||
event: [push]
|
||||
status: [success]
|
||||
|
||||
services:
|
||||
- name: postgres
|
||||
image: postgres:16-alpine
|
||||
environment:
|
||||
POSTGRES_USER: lottery_test
|
||||
POSTGRES_PASSWORD: lottery_test
|
||||
POSTGRES_DB: lottery_test
|
||||
|
||||
Reference in New Issue
Block a user