feat: implement CI/CD pipeline with Gitea Actions

- Add Gitea Actions workflow with 4 stages: lint, test, build, push
- Configure ruff linting and formatting checks
- Set up Django tests with PostgreSQL and Redis services
- Implement Docker image building for web and celery services
- Add requirements.txt and requirements-dev.txt generation
- Fix ipdb compatibility issues in test runner
- Update ruff configuration for Django compatibility
- Add comprehensive CI/CD documentation
This commit is contained in:
2026-01-19 14:24:48 +01:00
parent cbfbd8652d
commit 06b30fca02
26 changed files with 1769 additions and 726 deletions

120
CI_CD_SUMMARY.md Normal file
View File

@@ -0,0 +1,120 @@
# CI/CD Pipeline Summary
## Что было сделано
### 1. Реализован Gitea Actions Pipeline
Создан файл конфигурации: `.gitea/workflows/ci-cd.yml`
Этапы pipeline:
- **lint** - проверка кода с помощью ruff
- **test** - запуск тестов Django с PostgreSQL и Redis
- **build** - сборка Docker образов (web и celery)
- **push** - пуш образов в Gitea Container Registry
### 2. Настройка зависимостей
- Созданы файлы `requirements.txt` и `requirements-dev.txt` из `pyproject.toml`
- Удалены проблемные зависимости (ipdb, pdbpp) из-за конфликтов
- Обновлена конфигурация ruff для игнорирования Django-специфичных ошибок
### 3. Исправления в коде
- Обновлен `ruff.toml` для корректной работы с Django
- Добавлен `TEST_RUNNER` в настройки Django
- Исправлен кастомный test runner
### 4. Docker-образы
- Проверена сборка обоих образов:
- `mostovik-web` - основное приложение
- `mostovik-celery` - worker и beat сервисы
## Как использовать
### 1. Настройка Gitea
В настройках репозитория установите:
**Secrets:**
```
GITEA_USERNAME = ваш_пользователь
GITEA_TOKEN = ваш_токен_доступа
```
**Variables:**
```
GITEA_REGISTRY_URL = адресашего_gitea_registry
```
### 2. Локальная проверка
Перед коммитом запускайте:
```bash
# Линтинг
uv run ruff check .
uv run ruff format . --check
# Тесты (если нужно)
uv run python run_tests.py
# Pre-commit
pre-commit run --all-files
```
### 3. Pipeline запускается автоматически
- При пуше в ветки `main` и `develop`
- При создании Pull Request'ов
## Особенности реализации
### Линтинг
- Используется **ruff** как основной линтер
- Проверяются все файлы проекта
- Автоматическое форматирование отключено в CI (только проверка)
### Тестирование
- Запускаются в изолированном окружении
- Используются сервисы PostgreSQL и Redis
- Для обхода проблем с ipdb используется специальный скрипт `run_tests.py`
### Сборка Docker
- Используются существующие Dockerfile'ы
- Кэширование слоев для ускорения сборки
- Multi-stage сборка не используется (по требованиям проекта)
### Пуш образов
- Только для веток `main` и `develop`
- Теги:
- `latest` для основной ветки
- `{branch-name}` для feature-веток
- `{commit-sha}` для каждого коммита
## Безопасность
- Все токены хранятся в Secrets
- Переменные окружения не попадают в логи
- Используются минимальные права для сервисов
## Мониторинг
Pipeline можно отслеживать в интерфейсе Gitea:
`Repository → Actions`
Каждый job имеет подробные логи для диагностики проблем.
## Возможные проблемы и решения
### 1. Ошибки линтинга
```bash
# Локальное исправление
uv run ruff check . --fix
uv run ruff format .
```
### 2. Проблемы с тестами
- Проверьте запущены ли PostgreSQL и Redis
- Убедитесь в корректности переменных окружения
- Проверьте наличие миграций
### 3. Ошибки сборки Docker
```bash
# Локальная проверка
docker build -f docker/Dockerfile.web -t test-web .
docker build -f docker/Dockerfile.celery -t test-celery .
```
## Поддержка
Документация по настройке находится в `docs/ci-cd-setup.md`