Сборка пакета с git submodule: различия между версиями

Материал из ALT Linux Wiki
Нет описания правки
Нет описания правки
 
(не показана 1 промежуточная версия этого же участника)
Строка 1: Строка 1:
Описание проблемы. В последнее время в апстримах стало популярным использовать submodule в git для подтягивания зависимостей. В ряде случаев использование системной библиотеки вообще не предусматривается или невозможно (из-за особенностей подключаемого модуля). Дело дошло до того, что тарболы, выпускаемые разработчиками, не содержат заполненных каталогов с submodule (что, на мой взгляд, является просто недоработкой).
Описание проблемы. В последнее время в апстримах стало популярным использовать submodule в git для подтягивания зависимостей. В ряде случаев использование системной библиотеки вообще не предусматривается или невозможно (из-за особенностей подключаемого модуля). Дело дошло до того, что тарболы, выпускаемые разработчиками, не содержат заполненных каталогов с submodule (что, на мой взгляд, является просто недоработкой).


С другой стороны, система сборки в ALT не поддерживает submodule (прямая причина — поскольку submodule ориентированы на подгрузку из сети во время сборки).
С другой стороны, система сборки в ALT не поддерживает submodule (прямая причина — поскольку submodule ориентированы на подгрузку из сети во время сборки). Хотя git мог бы поддерживать механизм преобразования репозитория с submodule в полный репозиторий, содержащий весь код и все изменения со всех подрепозиториев.


Есть различные способы обхода.
Есть различные способы обхода.
Строка 7: Строка 7:
=== Поставка подпакетов отдельно ===
=== Поставка подпакетов отдельно ===


Самый просто вариант — это (вручную) закоммитить нужные тарболы в отдельные каталоги, создать в .gear/rules из них отдельные архивы и распаковать их в %setup -a1 -a2...
==== Вручную ====
Самый простой вариант — это (вручную) закоммитить нужные тарболы в отдельные каталоги, создать в .gear/rules из них отдельные архивы и распаковать их в %setup -a1 -a2...
 
Пример доведения этой идеи до абсурда:
https://packages.altlinux.org/ru/sisyphus/srpms/clickhouse/specfiles/
 
==== Автоматически ====
Автоматический способ реализован в etersoft-build-utils.  Он основан на сохранении полных, подготовленных к сборке исходников в репозитории.


Более сложный, но автоматический способ реализован в etersoft-build-utils 2.5.8.  Он основан на сохранении полных, подготовленных к сборке исходников в репозитории.
Примерная схема:
Примерная схема:
# работает только при сборке из репозитория, обновляемого из git upstream
# работает только при сборке из репозитория, обновляемого из git upstream

Текущая версия от 22:16, 25 апреля 2024

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

С другой стороны, система сборки в ALT не поддерживает submodule (прямая причина — поскольку submodule ориентированы на подгрузку из сети во время сборки). Хотя git мог бы поддерживать механизм преобразования репозитория с submodule в полный репозиторий, содержащий весь код и все изменения со всех подрепозиториев.

Есть различные способы обхода.

Поставка подпакетов отдельно

Вручную

Самый простой вариант — это (вручную) закоммитить нужные тарболы в отдельные каталоги, создать в .gear/rules из них отдельные архивы и распаковать их в %setup -a1 -a2...

Пример доведения этой идеи до абсурда: https://packages.altlinux.org/ru/sisyphus/srpms/clickhouse/specfiles/

Автоматически

Автоматический способ реализован в etersoft-build-utils. Он основан на сохранении полных, подготовленных к сборке исходников в репозитории.

Примерная схема:

  1. работает только при сборке из репозитория, обновляемого из git upstream
  2. создаём каталог .gear/@name@-postsubmodules
  3. в .gear/rules записываем так: tar: .gear/@name@-postsubmodules name=@name@-@version@
  4. при обновлении (rpmgs -f) будет выполнена инициализация и обновление подмодулей, а результат скопирован и закоммичен в каталог .gear/@name@-postsubmodules, из которого и будет производиться сборка.

Ссылки