[devel] I: girar-nmu 2.0

Igor Vlasenko vlasenko на imath.kiev.ua
Пн Июн 18 21:56:39 MSK 2018


Уважаемые коллеги!

Кто пользовался пакетом girar-nmu.
Я собираюсь выпустить girar-nmu 2.0,
улучшенный, но, к сожалению,
не полностью совместимый с girar-nmu 1.x --
с изменениями в опциях и переименованными утилитами.

Чтобы не создавать проблем, делаю заранее анонс с планами.

girar-nmu 2.0
---------

== Введение ==

girar-nmu был создан как набор утилит для проведения
различных массовых пересборок пакетов, например, с новой библиотекой.

Для этого в нем есть набор скриптов
girar-nmu-sort-transaction -- вычислить порядок сборки (если она важна)
girar-nmu-prepare -- подготовить пакеты для транзакции
girar-nmu-local-build -- локально пересобрать транзакцию
girar-nmu-task-add -- добавить пакеты транзакции в task
girar-nmu-task-for-each -- или отправить на сборку в отдельных task'ах.

Кроме того, в его состав вошли вспомогательные утилиты-помощники
(helpers), часть с префиксом girar-nmu-helper-* и часть girar-*.
Со временем оказалось, что я эти вспомогательные утилиты
использую гораздо чаще, чем основной набор girar-nmu-*.
Более того, у пакета girar-nmu-* появились пользователи,
которые тоже делают акцент на вспомогательных утилитах.

После того, как мне поступил запрос от Григория Устинова
на добавление в набор утилиты Михаила Гордеева, стало ясно,
что утилиты-помощники пользуются спросом сами по себе.
У нас уже есть пакет girar-utils, но он по функциональности
практически не перекрывается с утилитами из girar-nmu.
Пришлось заняться приданием этим утилитам товарного вида.
Я обновил документацию, навел порядок с опциями --
добавил длинные опции, добавил новые возможности и привел
во всех утилитах опции в единообразный вид, заодно и добавил
поддержку всех имеющих смысл опций в каждой утилите.

К сожалению, лучшее -- враг хорошего, наведение единообразия
сломало для некоторых опций совместимость. Поэтому я решил
пойти дальше и переименовать утилиты, где совместимость нарушена,
убрав -nmu-helper-, раз уже эти утилиты используются независимо
от скриптов girar-nmu-*.

Представляю вашему вниманию girar-nmu 2.0.

=== общие опции ===

<-V|--version>, <-v|--verbose>, <-q|--quiet>, <-h|--help>
в представлении не нуждаются. Как и <-b|--branch> sisyphus|p8|...

==== <-R|--girar|--gyle> <girar ssh alias>, <-H|--gitery> <gitery ssh alias>. ====

В большинстве случаев, к girar и gitery(git.alt) нужен ssh доступ,
там, где нельзя обойтись git.altlinux.org.
По правилам, эти хосты надо прописать алиасами в ~/.ssh/config.
Однако исторически сложилось несколько возможных алиасов.
Их можно указать опциями -R/-H (--girar/--gitery), если
значения по умолчанию (girar и git.alt) не подходят,
а можно прописать в
/etc/girar-nmu/default (лучше в $HOME/.config/girar-nmu/default).

==== <-P|--profile> <profile>. ====

Поддержка e2k. Кроме умолчальных girar и gitery, у нас появились
дополнительные girar и gitery для дополнительных архитектур,
таких, как e2k. Чтобы работать с ними, утилитам надо каждый раз
указывать -R girar.e2k -H git.e2k . Вместо этого -P e2k
загрузит /etc/girar-nmu/e2k, профиль для работы с e2k,
где girar и gitery переопределены.
Можно создавать и другие свои профили настроек, в
/etc/girar-nmu/<profile> и в $HOME/.config/girar-nmu/<profile>.

=== girar-clone-*, girar-fetch-*, ... ===

утилиты клонирования gear репозитория
 girar-clone-build-commit
 girar-clone-srpm-build
 girar-clone-task-git

girar-clone-build-commit -- склонировать gear репозиторий,
из которого собрался пакет в Симзиф или бранчи.
к примеру,
 girar-clone-build-commit --branch p8 pkg-config

girar-clone-srpm-build -- склонировать автоматический
gear репозиторий для src.rpm пакетов.

girar-clone-task-git -- склонировать gear репозиторий из таска.
к примеру,
 girar-clone-task-git 208431 100

Если же gear репозиторий уже есть, то втянуть нужный коммит
можно с помощью утилит
 girar-fetch-build-commit
 girar-fetch-srpm-build
 girar-fetch-task-git

и полезные утилиты
 girar-get-upload-method [-b branch] <имя>
 girar-print-build-commit [-b branch] <имя>

 girar-get-upload-method [-b branch] <имя>
применяется для определения, как залит пакет:
как src.rpm или из gear репозитория.

 girar-print-build-commit [-b branch] <имя>
применяется для вычисления аргументов task check-git-inheritance.
К примеру,
 ssh girar task check-git-inheritance 208523 100 disable `girar-print-build-commit -b sisyphus devscripts`

=== Работа с girar ===

Собственно создание тасков в girar представлено двумя семействами утилит
 girar-task-add-* [опции] [список задач]
 girar-task-for-each-* [опции] [список задач]
 (еще думаю добавить семейство girar-build-*, для запуска списка задач
 одним таsk'om).

именно,
 girar-task-add-srpm
 girar-task-add-git
 girar-task-add-copy
 girar-task-add-del
 girar-task-add-rebuild

 girar-task-for-each-srpm
 girar-task-for-each-git
 girar-task-for-each-copy
 girar-task-for-each-del
 girar-task-for-each-rebuild

girar-task-add-* по умолчанию добавляют задачи
в --task <task> [--before[-subtask] <subtask>]
girar-task-for-each-* по умолчанию создают новый task
для каждой задачи.

Все они оддерживают опции -S|--share (ssh girar task share enabled)
-d|--deps <dep1,...,depN> (ssh girar task deps <task> add dep1 ... add depN)
а girar-task-for-each-* -- и опции запуска:
--test-only,--swift.

В качестве аргумента принимается список:
имен, в случае -copy/del/rebuild
пример
 girar-build-del --share --deps 555111,555112 --test-only `cat names-to-del.txt`
src.rpm пакетов, в случае -srpm:
пример
 girar-task-for-each-srpm --no-test-only ~/hasher/repo/SRPMS.hasher/*.src.rpm
git каталогов, в случае -git:
 girar-task-add-git /path/to/foo.git /path/to/bar.git 

Утилиты girar-*-srpm выполняют подписывание srpm
(опция --rpm-sign=<...> и ряд коротких опций,
поддерживается несколько вариантов подписи, в т.ч. gpg и gpg2),
заливают srpm и добавляют их имена на сборку.

Утилиты girar-*-git проверяют, все ли изменения добавлены в git index.
Если есть изменения вне индекса, прерываются. Иначе коммитят изменения
(-с, --сommit, можно отключить --no-сommit), создают тег, если он не
указан -t|--tag и последний коммит тегом не является,
создают клонированием последней сборки репозиторий на gitery, если
там его нет, заливают туда сборочный тег, отправляют на сборку,
при необходимости могут сразу удалить репозиторий на gitery
(опция -K, --kill-after) и есть ряд других полезных опций.
Если git репозиторий(и) не указан(ы), то используется текущий каталог.

Изменения по сравнению с бывшей утилитой girar-nmu-helper-git-push-build
в поддержке списка аргументов и в настройках по умолчанию
(ранее я всегда запускал ее как girar-nmu-helper-git-push-build -c -T,
подумал, что это поведение имеет смысл включить по умолчанию).

Код пока только у меня в git, не выложен в Сизиф.
Замечания и пожелания приветствуются.

-- 

I V


Подробная информация о списке рассылки Devel