Contributing¶
Раздел описывает работу над библиотекой: настройку окружения, проверки, документацию, ветки и оформление pull request. Выпуск и публикация версий описаны отдельно в Releasing.
Общий порядок работы:
- Создайте рабочую ветку от актуальной
next. - Внесите небольшое, законченное изменение и добавьте тесты для изменённого поведения.
- Запустите подходящие локальные проверки.
- Оформите коммиты в формате gitmoji со скоупом.
- Отправьте pull request в
nextи дождитесь CI и review.
Local Setup¶
Окружениями управляет Hatch. Зависимости из pyproject.toml устанавливаются при первом запуске команды.
Тесты и dev-окружение используют Python 3.10, линтер, документация и релизные инструменты - Python 3.14.
Из корня репозитория выполните:
Команда настраивает git blame через .git-blame-ignore-revs и устанавливает хуки: pre-commit запускает Ruff для файлов библиотеки и pyproject.toml, commit-msg проверяет заголовки через gitlint. Форматирование и тесты проверяйте отдельно. hatch run remove отменяет настройку.
Checks¶
| Command | Purpose |
|---|---|
hatch run test:check |
Тесты с покрытием на Python 3.10 |
hatch run mtest:check |
Матрица Python × Requests с отчётом coverage.xml для каждого прогона |
hatch run lint:check |
Статический анализ Ruff |
hatch run lint:fmt-check |
Проверка форматирования без изменения файлов |
hatch run lint:format |
Автоисправление Ruff и форматирование |
hatch build --clean |
Чистая сборка sdist и wheel |
hatch run package:check |
Строгая проверка метаданных готовых дистрибутивов через Twine |
Матрица проверяет Requests 2.34.2 на Python 3.10-3.14 и Requests 2.28.2 на Python 3.10-3.11. Для одного сочетания используйте hatch run mtest.py3.10-2.28.2:check. Локальные прогоны перезаписывают coverage.xml, в CI каждый отчёт отдельно отправляется в Codecov.
Начинайте с тестов изменённого компонента, затем запускайте затронутый набор. Например, для подготовки параметров запроса:
Сетевые обращения в тестах блокирует pytest-socket. Подменяйте HTTP-ответы моками. Регрессионные тесты должны воспроизводить ошибку и проверять результат, а тесты сериализации - фактически переданные HTTP-параметры.
Для небольшого изменения ограничивайте автоформатирование конкретными файлами:
Перед package:check выполните hatch build --clean: проверка читает готовые дистрибутивы из dist/.
Documentation¶
Документация собирается через MkDocs Material. Навигация описана в docs/SUMMARY.md, справочник API генерируется из docstring с помощью mkdocstrings.
| Command | Purpose |
|---|---|
hatch run docs:build |
Строгая сборка сайта в site/ |
hatch run docs:links |
Проверка внутренних ссылок уже собранного сайта |
hatch run docs:serve |
Локальный сервер с обновлением при изменении исходников |
hatch run docs:versions |
Список опубликованных версий документации |
hatch run docs:links-external |
Отдельная сетевая проверка опубликованного сайта и внешних ссылок |
После изменения навигации, ссылок или API-справочника запускайте docs:build, затем docs:links. Публикация сайта описана в Releasing.
Главная страница включает README.md. Roadmap, Changelog и Contributing связаны символическими ссылками с корневыми файлами. Редактируйте ROADMAP.md, CHANGELOG.md и CONTRIBUTING.md, сохраняя ссылки: дата изменения на сайте берётся из Git-истории исходника.
Заголовки и меню пишите на английском, основной текст - на русском. Описание API храните в docstring на русском в Google style. Для перекрёстных ссылок используйте полные пути mkdocstrings, например [SberbankClient][gocream_pysberbank.http.SberbankClient].
Branches¶
Основные ветки:
next- разработка, RC-релизы и документацияnext;master- стабильные релизы.
После создания next в удалённом репозитории рабочую ветку можно подготовить так:
Имя рабочей ветки должно кратко описывать изменение. Из неё можно вручную выпустить beta. Для stable-релиза создайте PR в master. Предварительные beta и RC необязательны.
После stable-релиза синхронизируйте master обратно в next, включая release-коммит и тег.
Commits¶
Заголовок состоит из emoji-маркера gitmoji, скоупа и краткого описания на английском:
🐛 (client): Preserve zero request parameters
🔇 (client): Remove sensitive request logging
✨ (client): Add API method
🎨 (style): Format code
Скоуп обозначает затронутую область, например client, tests, docs или project. При необходимости в теле коммита поясните причину изменения и последствия для совместимости.
💥 повышает major, ✨ - minor. Поддерживаемые исправления и конфигурационные изменения повышают patch. 🎨, 🧪 и 📄 попадают в changelog без повышения версии. Полные списки находятся в [tool.semantic_release.commit_parser_options] в pyproject.toml.
Python Semantic Release определяет повышение версии по маркеру. При squash merge итоговое сообщение должно сохранять этот формат. Добавление маркера описано в Releasing.
Версию и CHANGELOG.md обновляет релизный workflow по коммитам. В обычном PR их менять не нужно. Для локальной проверки:
| Command | Purpose |
|---|---|
hatch run release:preview |
Показать следующую версию для текущей ветки без изменения файлов |
hatch run release:beta-preview |
Показать следующую beta-версию без изменения файлов |
hatch run release:changelog |
Сгенерировать и записать CHANGELOG.md локально для проверки содержимого и шаблонов |
Команды ничего не публикуют и не создают коммитов или тегов. Расчёт учитывает закоммиченные изменения и локальные теги v{version}. Перед проверкой загрузите историю и теги командой git fetch origin --tags.
release:changelog записывает файл. Просмотрите результат через git diff -- CHANGELOG.md и не коммитьте предварительный Unreleased как историю выпущенной версии.
Pull Requests¶
Перед отправкой PR:
- Добавьте или обновите тесты изменённого поведения.
- Запустите подходящие проверки из Checks, а при изменении структуры документации и ссылок - из Documentation.
- Уберите посторонние изменения из diff и выполните
git diff --check. - Опишите проблему, итоговое поведение и выполненные проверки.
- Отдельно отметьте изменения публичных сигнатур, исключений, формата ответов или совместимости с потребителями.
Дождитесь успешного CI и review. Существующие ошибки вне задачи отмечайте отдельно, не ослабляя тесты и проверки.
Один PR должен решать одну задачу. Для релизного PR в master дополнительно следуйте Releasing.