Как организовать несколько буферных протокольных файлов в подмодуле git? - PullRequest
0 голосов
/ 24 июня 2019

Я делюсь файлами .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 / прото
    • общий
      • shared.proto
    • 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, правильным способом работы с прототипами в нескольких проектах?

Спасибо!

...