Как совместно использовать и протоколировать интерфейс протокольных буферов (прото) между проектами и командами? - PullRequest
0 голосов
/ 30 апреля 2018

Я работаю над серией проектов на Python, которая включает предоставление данных другим командам разработчиков (C ++ / Python) через различные сервисы с gRPC. В начале этой инициативы все файлы содержались внутри проекта сервера, включая файл прото. Кстати, я версии моего проекта с https://semver.org/.

Затем я приступил к реализации библиотеки клиент / API, поэтому я перемещаю файл Proto / сгенерированный код в проект клиента. Я также сделал сервер зависимым от клиентской библиотеки, используя пакет Python.

Сервер упаковывается в RPM из-за характера моей среды (без Docker), в то время как клиент генерирует два артефакта: 1) RPM, который может быть статически связан для проектов C ++, 2) пакет Pypi, который можно загрузить и загружается через репозиторий Pypi. сервер загружает зависимость Pypi через PIP.

Проблема, с которой я столкнулся, заключается в том, что SemVer в клиентской / API-библиотеке дает неверное значение, так как это связывает как версию интерфейса proto, так и реальную версию клиента. Это проблема, потому что если в клиентской библиотеке есть ошибка, которая вызывает увеличение номера версии, это даст преимущество, которое протокольный интерфейс изменил, когда это не соответствует действительности.

В этот момент я начинаю думать, что у меня должен быть третий проект, который содержит только файл прото и сгенерированный код. Тем не менее, это будет причиной и взрывом небольшого проекта (3х) в моем git-репо каждый раз, когда мне нужно будет внедрить новый сервис или, возможно, мне придется сгруппировать все свои прото в один проект.

Буду признателен за любые предложения или советы о том, как поделиться прототипами, сохраняя семантику за номером моей версии?

1 Ответ

0 голосов
/ 30 апреля 2018

Подмодуль Git для управления общим прото может решить вашу проблему.

Когда вы определяете подмодуль, вы уверены, что эта часть кода является общей для всего репо, указывающего на этот модуль.

Кроме того, ваш подмодуль в действительности указывает на коммит. Поэтому, если в вашем модуле (прототипе) есть обновление, вам придется вручную вставить это обновление в свой код.

С другой стороны, если вы сообщаете об ошибке, если вы не обновляете подмодуль, вы не будете повторно доставлять прото.

...