Я делюсь файлами .proto между несколькими проектами, используя git-submodules.
Теперь мой вопрос: как правильно настроить импорт?
В микросервисной среде все сервис-репозитории имеют подмодуль git, содержащий общие файлы .proto:
- git.dev / fooservice
- proto (содержит
git.dev/proto
в качестве подмодуля)
- ... немного кода Java
- git.dev / barservice
- proto (содержит
git.dev/proto
в качестве подмодуля)
- ... некоторые идут код
- git.dev / bazservice
- proto (содержит
git.dev/proto
в качестве подмодуля)
- ... некоторый код JavaScript
- git.dev / прото
- общий
- fooservice
- fooservice.proto (импорт
shared/shared.proto
)
- barservice
- barservice.proto (импорт
shared/shared.proto
)
Типичный заголовок служебного файла протока в настоящее время выглядит следующим образом:
git.dev/proto/fooservice/fooservice.proto
syntax = "proto3";
package abc.foo;
import "shared/shared.proto";
option go_package = "foopb";
option java_multiple_files = true;
option java_outer_classname = "FooProto";
option java_package = "com.abc.foo";
Вопрос 1: путь импорта
- Наличие
import "shared/shared.proto";
работает для хранения репозитория git.dev/proto, но вызывает проблемы с импортом при генерации кода.
- Наличие
import "proto/shared/shared.proto";
работает для генерации кода в сервис-репозиториях, но, конечно, вызывает проблемы с линтингом в репозитории git.dev/proto
- Должен ли оператор import содержать папку
proto
?
Вопрос 2: опция go_package
- для создания заглушек go мы в настоящее время используем prototool и устанавливаем
go_options.import_path
например git.dev/fooservice
, который генерирует правильные пути импорта golang
- другой вариант - запустить что-то вроде
for x in proto/**/*.proto; do protoc -Iproto --go_out=plugins=grpc,paths=source_relative:src/proto $x; done
но это не приводит к действительным путям импорта golang, если я не добавляю полный путь git к опции go_package. Это, конечно, противоречит подходу git-submodule (какой путь для git repo выбрать, / proto или /*service.git?).
- Как лучше всего использовать go_package в сочетании с git-подмодулями?
Вопрос 3: субмодули и сторонние инструменты
- Является ли использование git-submodules и сторонних инструментов, таких как prototool, правильным способом работы с прототипами в нескольких проектах?
Спасибо!