Руководство по внесению вклада в разработку
Добро пожаловать! Существует множество способов внести свой вклад, включая отправку сообщений об ошибках, улучшение документации, отправку запросов на новые функции, рассмотрение новых заявок или предоставление кода, который можно включить в проект.
Первоначальная настройка для локальной разработки
Установка git
Пожалуйста, следуйте инструкциям.
Создание форка
Если вы не являетесь членом команды разработчиков, создающей Data.SyncMaster, вам следует создать форк, прежде чем вносить какие-либо изменения.
Пожалуйста, следуйте инструкциям.
Клонирование репозитория
Откройте терминал и выполните эти команды:
git clone https://github.com/MobileTeleSystems/syncmaster -b develop
cd syncmaster
Установка окружения
Во-первых, установите make. Он используется для выполнения сложных команд в локальной среде.
Во-вторых, создайте virtualenv и установите зависимости:
make venv
Если у вас уже есть venv, но необходимо установить зависимости, необходимые для разработки:
make venv-install
Мы используем poetry для управления зависимостями и сборкой пакета. Это позволяет сохранить единую среду разработки для всех разработчиков благодаря использованию файла блокировки с фиксированными версиями зависимостей.
Есть дополнительные зависимости (включены в пакет как необязательные):
server— для запуска сервераworker— для запуска рабочих процессов Celery
И группы (не включены в пакет, используются локально и в непрерывной интеграции):
test— для запуска тестовdev— для разработки, например, линтеры, форматировщики, mypy, pre-commit и т. д.docs— для сборки документации
Включить хуки пре-коммита
пре-коммит Хуки позволяют проверять и исправлять содержимое репозитория перед созданием нового коммита. Они позволяют запускать линтеры, форматировщики, исправлять права доступа к файлам и т. д. Если что-то не так, изменения не могут быть зафиксированы.
Вр-первых, установите пре-коммит хуки:
pre-commit install --install-hooks
И затем протестируйте запуск хуков:
pre-commit run
Как
Запустить инстанс разработки локально
Запустить DB контейнер:
make db broker
Затем запустить сервер разработки:
make dev-server
И открыть http://localhost:8000/docs
Настройки хранятся в файле .env.local.
Чтобы запустить процесс разработки, откройте новое окно/вкладку терминала и выполните:
make dev-worker
Работать с миграциями
Запустить базу данных:
make db-start
Сгенерировать ревизию:
make db-revision ARGS="-m 'Message'"
Обновить версию базы данных до head миграции:
make db-upgrade
Понизить версию базы данных до head-1:
make db-downgrade
Запустить тестирование локально
Модульное тестирование
Это очень просто:
make test-unit
Эта команда запускает все необходимые контейнеры (Postgres, RabbitMQ), выполняет все необходимые миграции, а затем запускает Pytest.
Вы можете передать дополнительные аргументы pytest следующим образом:
make test-unit PYTEST_ARGS="-k some-test -lsx -vvvv --log-cli-level=INFO"
Получить механизмы, не используемые ни в одном тесте:
make test-check-fixtures
Интеграционное тестирование
ВНИМАНИЕ
Для локального запуска тестов HDFS и Hive необходимо добавить следующую строку в файл /etc/hosts (путь к файлу зависит от ОС):
# HDFS/Hive server returns container hostname as connection address, causing error in DNS resolution
127.0.0.1 test-hive
Для запуска специфических интеграционных тестов:
make test-integration-hdfs
Это запускает контейнеры базы данных, брокера и рабочего процесса, а также контейнер HDFS. Затем выполняются только интеграционные тесты, связанные с HDFS.
Чтобы запустить полный набор тестов:
make test-integration
Это запускает все контейнеры и все интеграционные тесты.
Как и в случае с модульными тестами, вы можете передавать Pytest дополнительные аргументы:
make test-integration-hdfs PYTEST_ARGS="-k some-test -lsx -vvvv --log-cli-level=INFO"
Остановите все контейнеры и удалите созданные тома:
make test-cleanup ARGS="-v"
Запустить продуктивный экземпляр локально
Сначала соберите пподуктивные образы:
make prod-build
И затем запустите все необходимые сервисы:
make prod
Затем откройте http://localhost:8000/docs
Настройки хранятся в файле .env.docker.
Сборка документации
Соберите документацию, используя Sphinx и откройте её:
make docs
Если документация должна быть построена отдельно, а не переиспользоваться существующий результат сборки:
make docs-fresh
Процесс проверки
Создайте новую задачу на GitHub для любых существенных изменений и улучшений, которые вы хотели бы внести. Укажите, какую функцию вы хотели бы внести, почему она вам нужна и как она будет работать. Обсудите свои идеи открыто и получите обратную связь от сообщества, прежде чем продолжить.
Значительные изменения, которые вы хотите внести в проект, следует сначала обсудить в задаче на GitHub, где четко описаны изменения и преимущества данной функции.
Небольшие изменения можно создать и отправить непосредственно в репозиторий GitHub в виде запроса на включение изменений.
Создание pull request
Сделайте коммит ваших изменений:
git commit -m "Commit message"
git push
Затем откройте интерфейс Github и создайте pull request.
Следуйте инструкциям из шаблона тела запроса на включение изменений.
После создания запроса на включение изменений ему присваивается соответствующий номер, например, 123 (pr_number).
Создайте описание релиза
Data.SyncMaster использует towncrier для управления журналом изменений.
Чтобы отправить заметку об изменении вашего запроса на изменение (PR), добавьте текстовый файл в папку docs/changelog/next_release. Он должен содержать объяснение того, как применение этого запроса на изменение (PR) изменит взаимодействие конечных пользователей с проектом. Обычно достаточно одного предложения, но вы можете добавить столько подробностей, сколько считаете нужным, чтобы пользователи поняли, что это значит.
Используйте прошедшее время для текста в вашем фрагменте, поскольку в сочетании с другими он станет частью «новостного дайджеста», рассказывающего читателям что изменилось в конкретной версии библиотеки по сравнению с предыдущей версией.
Синтаксис reStructuredText используется для выделения кода (встроенного или блочного),
ссылки на части документации или внешние сайты.
Если вы хотите подписать свои изменения, смело добавляйте -- by
:user:github-username` (в конце заменитеgithub-username`
своим!).
Наконец, назовите свой файл в соответствии с соглашением, которое понимает Towncrier: оно должно начинаться с номера выпуска или
PR, за которым следует точка, затем добавьте тип патча, например feature,
doc, misc и т. д., и добавьте .rst в качестве суффикса. Если вам
нужно добавить более одного фрагмента, вы можете добавить необязательный
порядковый номер (разделённый ещё одной точкой) между типом
и суффиксом.
Обычно имя следует шаблону <pr_number>.<category>.rst,
где категории:
feature: Любая новая функция. Добавление новой функциональности, которой ещё не было.removal: Обозначает прекращение поддержки или удаление публичного API.bugfix: Исправление ошибки.improvement: Улучшение. Улучшение уже существующей функциональности.doc: Изменение в документации.dependency: Изменения, связанные с зависимостями.misc: Изменения внутри репозитория, такие как изменения непрерывной интеграции, тестирования и сборки.breaking: Вносит критически важное изменение API.significant: Указывает на значительные изменения в коде.dependency: Указывает на изменения в зависимостях.
Запрос на включение изменений может содержать более одного из этих компонентов, например, изменение кода может ввести новую функцию, которая делает устаревшей старую, в этом случае следует добавить два фрагмента. Нет необходимости создавать отдельный фрагмент документации для изменений, сопровождающих соответствующие изменения кода.
Примеры добавления записей журнала изменений в ваши запросы на извлечение
Added a ``:github:user:`` role to Sphinx config -- by :github:user:`someuser`
Fixed behavior of ``server`` -- by :github:user:`someuser`
Added support of ``timeout`` in ``LDAP``
-- by :github:user:`someuser`, :github:user:`anotheruser` and :github:user:`otheruser`
Как пропустить проверку заметок об изменениях?
Просто добавьте метку ci:skip-changelog в pull request.
Процесс выпуска
Перед выпуском из ветки develop выполните следующие действия:
- Перейдите в ветку
developи обновите её до актуального состояния.
git checkout develop
git pull -p
- Произведите резервное копирование
NEXT_RELEASE.rst
cp "docs/changelog/NEXT_RELEASE.rst" "docs/changelog/temp_NEXT_RELEASE.rst"
- Создайте заметки о релизе с помощью Towncrier
VERSION=$(poetry version -s)
towncrier build "--version=${VERSION}" --yes
- Измените номер версии релиза в файле со списком изменений
mv docs/changelog/NEXT_RELEASE.rst "docs/changelog/${VERSION}.rst"
- Удалите содержимое над заголовком номера версии релиза в файле
${VERSION}.rst
awk '!/^.*towncrier release notes start/' "docs/changelog/${VERSION}.rst" > temp && mv temp "docs/changelog/${VERSION}.rst"
- Обновить индекс изменений
awk -v version=${VERSION} '/DRAFT/{print;print " " version;next}1' docs/changelog/index.rst > temp && mv temp docs/changelog/index.rst
- Восстановите
NEXT_RELEASE.rstфайл из резервной копии
mv "docs/changelog/temp_NEXT_RELEASE.rst" "docs/changelog/NEXT_RELEASE.rst"
- Сделайте коммит и добавьте изменения в ветку
develop
git add .
git commit -m "Prepare for release ${VERSION}"
git push
- Сделайте merge ветки
developвmaster, БЕЗ сжатия
git checkout master
git pull
git merge develop
git push
- Добавьте тег git к последнему коммиту в ветке
master
git tag "$VERSION"
git push origin "$VERSION"
- Обновление версии в ветке
developпосле релиза:
git checkout develop
NEXT_VERSION=$(echo "$VERSION" | awk -F. '/[0-9]+\./{$NF++;print}' OFS=.)
poetry version "$NEXT_VERSION"
git add .
git commit -m "Bump version"
git push