Перейти к содержанию
zoryn/ maintainer-assistant

zoryn up

Автоматическое обновление пакета до новой upstream-версии. 14-стадийный конвейер с сохранением состояния — можно приостановить, возобновить и откатить.

Использование

zoryn up [-t|--tarball] [--tag TAG] [--allow-unrelated-histories] [-f|--force]
         [-r|--rebuild] [--top] [--switch-to-upstream-git]
         [--sandbox=RUNNER] [--no-sandbox]
         [-b|--builder PATTERN] [-a|--arch ARCH] [-B|--branch BRANCH]
         [-p|--parallel] [-s|--sequential] [--fail-if-busy] [--skip-busy]
         [--skip-check[=LIST]] [--batch-pkgs=PKGS] [-d] [-v]

Опции

  • -t, --tarball — принудительный режим tarball (скачивание вместо git merge).
  • --tag TAG — использовать указанный upstream-тэг (пропустить автоопределение версии).
  • --allow-unrelated-histories — слияние несвязанных историй (для пакетов с импортированным чистым upstream).
  • -f, --force — принудительное обновление с пререлиза на стабильный релиз, когда нет новой версии.
  • -b, --builder PATTERN — выбрать билдеры по имени или паттерну (см. Паттерны билдеров).
  • -a, --arch ARCH — выбрать билдер по архитектуре (через запятую для нескольких).
  • -B, --branch BRANCH — выбрать билдер по ветке (через запятую).
  • -p, --parallel — параллельная сборка при нескольких билдерах.
  • -s, --sequential — последовательная сборка (переопределяет parallel = on).
  • --fail-if-busy — завершить с ошибкой, если билдер занят (по умолчанию: ждать).
  • --skip-busy — пропускать занятые билдеры без ошибки.
  • --skip-check[=LIST] — пропустить проверки (через запятую). Значения: rpmbuild (пропустить %check), имена инструментов (sisyphus_check), all. Без значения — пропускает всё.
  • --batch-pkgs=PKGS — собрать только указанные batch-значения (через запятую) вместо всех значений из [batch].
  • -r, --rebuild — использовать hsh-rebuild вместо hsh (пересборка в существующем hasher без пересоздания chroot).
  • --top — интерактивный TUI для мониторинга сборок (в стиле htop).
  • --switch-to-upstream-git — миграция tarball-репозитория на схему upstream-git (см. ниже).
  • --sandbox=RUNNER — бэкенд песочницы для хуков: hybrid (по умолчанию), bwrap или direct.
  • --no-sandbox — отключить песочницу для хуков.
  • --no-python-auto-deps — отключить автообновление pyproject_deps.json и повтор сборки при изменении Python-зависимостей.
  • -v, --verbose — показывать вывод сборки на экран (в дополнение к лог-файлу).

Управление конвейером

Если стадия упала, можно возобновить, откатить или запустить изолированно:

ФлагОписание
--continueВозобновить с последней упавшей стадии
--abortОткатить изменения к состоянию до обновления
--restartСбросить сохранённое состояние, начать заново
--stage=STAGEЗапустить одну стадию изолированно
--from=STAGEЗапустить с указанной стадии до конца

Доступные стадии: detect, fetch, find-version, merge, merge-hooks, spec, gear-tags, up-hooks, build, batch-build.

Состояние конвейера хранится в активной git-директории — .git/zoryn-up-state.json в обычном клоне или .git/worktrees/<name>/zoryn-up-state.json внутри git worktree — так что каждый worktree продолжает свой конвейер независимо.

Поддерживаемые схемы репозиториев

zoryn автоматически распознаёт четыре схемы ведения.

1. Git merge (стандартная)

Рабочее дерево содержит исходный код upstream плюс файлы ALT Linux (.gear/, .spec). Примеры: php, curl, nginx.

.gear/rules: tar: v@version@:.

Код upstream сливается в рабочее дерево. Патчи — коммиты поверх upstream. При обновлении git merge интегрирует новую версию с локальными изменениями.

2. Скачиваемый tarball

Upstream-тарболл скачивается и распаковывается в подкаталог. Файлы ALT Linux (.spec, .gear/, патчи) рядом. Используется с zoryn up --tarball или автоопределяется по watch-файлу.

.gear/rules: tar: @name@
             copy?: *.patch

Тарболл скачивается с upstream URL из watch-файла и импортируется в подкаталог.

3. Чистый tarball + подшивка истории

Рабочее дерево содержит только файлы ALT Linux (.spec, .gear/, *.patch). Исходный код upstream существует только в истории git, подшитой через merge. Примеры: libssh2, openssl.

.gear/rules: tar: @name@-@version@:.
             copy?: *.patch

При обновлении zoryn использует git merge -s ours — подшивает историю upstream без изменения файлов рабочего дерева. Патчи поддерживаются вручную.

Определение автоматическое: zoryn сравнивает файлы в HEAD и в upstream-тэге. Если нет общих исходных файлов (только .spec, .patch, .gear/), определяется схема «чистый tarball» и используется -s ours.

Импорт без общей истории. Когда локальная ветка не имеет общего предка с upstream (например, свежий импорт upstream-исходников), используйте --allow-unrelated-histories. Это merge с -s ours --allow-unrelated-histories, затем восстанавливает файлы upstream, сохраняя ALT-специфичные каталоги (.gear/, каталог spec, каталоги из copy в .gear/rules).

4. Subtree

Исходный код upstream — в подкаталоге, файлы ALT Linux — в корне. Пример: apache2-mod_auth_openidc.

.gear/rules: tar:  v@version@:.
             diff: v@version@:. mod_auth_openidc/

Директива diff: указывает gear создавать патч из различий между тэгом и подкаталогом. При обновлении zoryn использует git subtree pull. Локальные изменения в подкаталоге автоматически становятся патчами.

Определение автоматическое: zoryn анализирует историю коммитов каждого подкаталога. Если недавние коммиты преимущественно в стиле "Merge commit 'HASH'" (характерно для git subtree pull --squash), определяется subtree.

Последовательность действий

  1. Находит spec-файл и извлекает текущую версию.
  2. Проверяет, указывает ли URL: на pypi.org/project/<name>/ — если да, использует PyPI как источник версий (фильтрует отозванные/пре-релизные по PEP 440, создаёт alias-тэги при различии нормализации PEP 440 и git-тэга). --tag отключает обнаружение PyPI.
  3. Читает URL репозитория из VCS: в spec-файле.
  4. Добавляет upstream remote и получает тэги.
  5. Применяет маппинг версий из .gear/version-up (если есть).
  6. Находит более новые версии и выбирает последнюю.
  7. Определяет стратегию merge (стандартная или -s ours).
  8. Выполняет merge upstream-тэга (или скачивает тарболл с --tarball).
  9. Запускает хуки из .gear/merge-up.d/.
  10. Обновляет версию в spec, сбрасывает release в alt1.
  11. Сканирует upstream changelog на CVE (если настроено).
  12. Добавляет запись в changelog.
  13. Запускает хуки из .gear/up.d/.
  14. Обновляет gear-тэги.

Переход на схему upstream-git

Перевести tarball-пакет на схему upstream-git:

zoryn up --switch-to-upstream-git

С явным указанием upstream-тэга:

zoryn up --switch-to-upstream-git --tag v2007f

См. также