Этот документ содержит инструкции по настройке и активации CI/CD workflows для проекта.
В проекте настроены следующие автоматизации:
- CI Workflow - основная проверка кода и тесты
- Pull Request Workflow - расширенные проверки для PR
- Dependabot - автоматическое обновление зависимостей
git add .github/
git commit -m "ci: add GitHub Actions workflows"
git push origin mainПосле пуша перейдите на GitHub:
- Откройте вкладку Actions в вашем репозитории
- Вы увидите запущенный workflow CI
- Убедитесь, что все проверки прошли успешно ✅
Автоматически запускается при:
- Push в ветку
main - Создании/обновлении Pull Request в
main
Что делает:
- ✅ Проверяет код с помощью Ruff (linter + formatter)
- ✅ Запускает все тесты с pytest
- ✅ Генерирует отчет о покрытии кода
- ✅ Сохраняет отчеты в артефакты
Как просмотреть артефакты:
- Перейдите в Actions → выберите конкретный запуск workflow
- Прокрутите вниз до секции Artifacts
- Скачайте
coverage-reportдля просмотра покрытия кода
Автоматически запускается при:
- Создании Pull Request в
mainилиdevelop - Обновлении (push) в ветку с открытым PR
Что делает:
- ✅ Проверяет формат заголовка PR (conventional commits)
- ✅ Запускает Ruff linter и formatter
- ✅ Проверяет измененные файлы с pre-commit
- ✅ Запускает тесты с проверкой покрытия
- ✅ Выполняет security-проверки
- ✅ Формирует общий отчет о статусе всех проверок
Требования к заголовкам PR:
PR должны следовать формату Conventional Commits:
<type>: <description>
Примеры:
feat: add user authentication
fix: resolve database connection timeout
docs: update API documentation
test: add tests for user service
ci: update GitHub Actions workflow
Допустимые типы:
feat- новая функциональностьfix- исправление багаdocs- документацияstyle- форматирование кодаrefactor- рефакторингperf- улучшение производительностиtest- тестыbuild- сборка проектаci- CI/CDchore- рутинные задачиrevert- откат изменений
Автоматически:
- Проверяет обновления Python пакетов каждый понедельник в 09:00
- Проверяет обновления GitHub Actions каждый понедельник в 09:00
- Создает PR с группированными обновлениями (minor + patch вместе)
Настройка уведомлений:
Dependabot автоматически создаст PR при обнаружении обновлений. Чтобы настроить уведомления:
- Перейдите в Settings → Notifications вашего GitHub аккаунта
- Включите уведомления для Pull requests
- Можете настроить email/web уведомления по желанию
Автоматическое слияние Dependabot PR:
Чтобы автоматически мержить безопасные обновления:
# Включить auto-merge для Dependabot PR
gh pr list --author "app/dependabot" --json number --jq '.[].number' | \
xargs -I {} gh pr merge {} --auto --squashПеред отправкой кода в репозиторий рекомендуется проверить его локально:
# Установить pre-commit хуки (один раз)
uv run pre-commit install
# Проверить все файлы вручную
uv run pre-commit run --all-files# Проверить код линтером
uv run ruff check .
# Автоматически исправить проблемы
uv run ruff check . --fix
# Проверить форматирование
uv run ruff format --check .
# Отформатировать код
uv run ruff format .# Установить зависимости
uv sync --group test --group dev
# Запустить все тесты
uv run pytest tests/ -v
# Запустить с покрытием кода
uv run pytest tests/ --cov=src --cov-report=term --cov-report=html
# Открыть HTML отчет о покрытии
open htmlcov/index.html # macOS
xdg-open htmlcov/index.html # LinuxЕсли в будущем потребуется добавить секреты (API ключи, токены):
- Перейдите в Settings → Secrets and variables → Actions
- Нажмите New repository secret
- Добавьте секрет (например,
DATABASE_URL,API_KEY) - Используйте в workflow:
${{ secrets.YOUR_SECRET_NAME }}
В README уже добавлен badge статуса CI:
[](https://github.com/GAKiknadze/python_web_template/actions/workflows/ci.yml)Можно добавить дополнительные badges:
<!-- PR Checks -->
[](https://github.com/GAKiknadze/python_web_template/actions/workflows/pr.yml)
<!-- Coverage -->
[](https://codecov.io/gh/GAKiknadze/python_web_template)
<!-- Python Version -->
[](https://www.python.org/downloads/release/python-3130/)
<!-- Code Style -->
[](https://github.com/astral-sh/ruff)Проблема: После push workflow не появляется во вкладке Actions
Решение:
- Проверьте, что файлы workflow находятся в
.github/workflows/ - Убедитесь, что YAML файлы валидны (проверьте синтаксис)
- Проверьте, что вы запушили в правильную ветку (
main)
Проблема: Локально тесты работают, в CI - нет
Возможные причины:
- Разные версии зависимостей - проверьте
uv.lock - Отсутствие переменных окружения - добавьте в GitHub Secrets
- Разные версии Python - убедитесь, что
.python-versionактуален - Проблемы с путями - используйте относительные пути
Отладка:
# Запустить тесты точно так же, как в CI
uv sync --group test --group dev
uv run pytest tests/ -v --tb=shortПроблема: Pre-commit находит ошибки и не дает сделать commit
Решение:
# Автоматически исправить большинство проблем
uv run ruff check . --fix
uv run ruff format .
# Попробовать коммит снова
git add .
git commit -m "your message"Проблема: Dependabot создает много PR с обновлениями
Решение:
Измените .github/dependabot.yml:
# Ограничить количество открытых PR
open-pull-requests-limit: 3 # вместо 10
# Реже проверять обновления
schedule:
interval: "monthly" # вместо weekly- GitHub Actions Documentation
- Ruff Documentation
- pytest Documentation
- pre-commit Documentation
- Conventional Commits
- Dependabot Documentation
- Залить все файлы
.github/в репозиторий - Проверить, что workflows запускаются
- Установить pre-commit хуки локально
- Убедиться, что все тесты проходят
- Настроить уведомления от Dependabot
- Добавить CI badge в README
- Создать тестовый PR для проверки PR workflow
- Настроить branch protection rules (опционально)
Чтобы обязать проверки проходить перед мержем в main:
- Перейдите в Settings → Branches
- Нажмите Add rule для ветки
main - Включите:
- ✅ Require status checks to pass before merging
- ✅ Выберите:
Lint with Ruff,Run Tests - ✅ Require branches to be up to date before merging
- ✅ Require linear history (опционально)
- ✅ Include administrators (рекомендуется)
- Сохраните правила
Теперь нельзя будет мержить PR, если проверки не прошли! 🎉