Golang: раздельное управление версиями нескольких модулей

Представьте, что у меня есть репозиторий github.com/user/golang-examples, и я предоставляю версии для каждого примерного модуля в нем отдельно:

guthub.com/user/golang-examples
  /modA
    /go.mod
    /pkgA1
    /pkgA2

  /modB
    /go.mod
    /pkgB1
    /pkgB2

(Я знаю, что это идиома «одно репо - один модуль», но есть варианты использования и для многомодульных проектов, поэтому это не является предметом обсуждения)

В то же время семантическая маркировка git (v1.0.0, v2.0.0 и т. Д.) Происходит на уровне репо, а не его подпапок. Это делает невозможным тегирование модулей по отдельности, например

  1. Во-первых, modA опережает modB в разработке основной версией, а тег v2.0.0 проталкивается на уровне репо с целью версии modA
  2. Позже, когда кто-то захочет обновить modB до v2, нельзя будет повторно вставить тот же тег v2.0.0 git в версию modB.

Как можно решить эту задачу в соответствии с парадигмой управления версиями golang? Опять же, речь идет о многомодульном проекте. Очевидное решение для разделения модулей на репозитории здесь отчасти неблагоприятно, потому что желательна всеобъемлющая семантика «примеров» верхнего репо.

Спасибо!


person agronskiy    schedule 05.11.2020    source источник


Ответы (1)


Хорошо, после продолжительного поиска я нашел этот ресурс: https://github.com/go-modules-by-example/index/blob/master/009_submodules/README.md

Применительно к моей ситуации ответ - использовать:

  • для модуля modA используйте теги формы modA/vX.Y.Z (с использованием семантического управления версиями)
  • для модуля modB используйте теги вида modB/vX.Y.Z

Для контекста цитата из приведенного выше линта:

Согласно официальному предложению модулей, большинство проектов будут следовать простейшему подходу с использованием одного модуля Go для каждого репозитория, что обычно означает создание одного файла go.mod, расположенного в корневом каталоге репозитория.

По какой-то причине я до сих пор не могу найти правильную ссылку на документы / спецификации.

person agronskiy    schedule 05.11.2020