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

Хуки

zoryn выполняет shell-скрипты из двух каталогов во время zoryn up:

КаталогКогда выполняется
.gear/merge-up.d/После merge с upstream-тэгом, до обновления spec
.gear/up.d/После обновления spec, до коммита

Скрипты выполняются в лексикографическом порядке. Должны быть исполняемыми (chmod +x).

.gear/merge-up.d/

Скрипты выполняются после merge upstream-тэга, но до обновления spec. Полезно для регенерации vendored-зависимостей, которые должны соответствовать новой версии.

Интерфейс:

СимволЗначение
$1Очищенная версия, выведенная из $TAG (префикс снят — см. ниже)
$TAGПолное имя upstream-тэга, как оно есть в git (например, v1.2.3, release-1.2.3)
$COMMITПолный SHA1 коммита, на который указывает $TAG
$SHORTCOMMITПервые 7 символов $COMMIT

$1 (или $VERSION, если предварительно сделать export VERSION="$1") — это значение для поля Version: в spec. $TAG — для запросов к git, скачивания тарбола или иных операций, требующих исходную строку тэга.

Пример .gear/merge-up.d/01-vendor.sh:

#!/bin/bash
# $1 = "1.2.3", $TAG = "v1.2.3"
go mod vendor

.gear/up.d/

Скрипты выполняются после обновления spec-файла, до коммита. Полезно для синхронизации сопутствующих файлов с версией.

Интерфейс:

СимволЗначение
$1Новая версия, только что записанная в Version: spec-файла (то же значение, что и $1 в merge-up.d)

Хукам up.d передаётся только позиционный $1 — переменные $TAG, $COMMIT, $SHORTCOMMIT не устанавливаются. К моменту запуска up.d merge уже завершён, и осмысленна только версия.

Пример .gear/up.d/10-version.sh:

#!/bin/bash
sed -i "s/VERSION=.*/VERSION=$1/" configure.ac

Как из $TAG получается $1

$1 выводится из $TAG в четыре уровня (срабатывает первое совпадение):

  1. Маппинг [version] в .gear/version-up. Если в файле объявлены pattern / template (и опционально strip-prefix, filter), тэг парсится этим DSL и $1 — это отрендеренный template. См. [version] в конфигурации. Всегда побеждает, если паттерн совпадает.
  2. Явный префикс из .gear/rules. Если в .gear/rules есть tar: <префикс>@version@:. (например tar: v@version@:. или tar: libssh2-@version@:.), <префикс> снимается с $TAG.
  3. Префикс по имени пакета. Если $TAG начинается с <имя-пакета>- (значение из Name: в spec), этот префикс снимается.
  4. Префикс v/V. Ведущая v или V снимается безусловно как последняя попытка.

После снятия префикса (уровни 2–4) разделители - и _ приводятся к ., чтобы результат был корректной RPM-версией. Уровень 1 выдаёт template как есть — пунктуация полностью на ответственности шаблона.

$TAG[version] в .gear/version-up.gear/rulesName: в spec$1
v1.2.3(нет)tar: v@version@:.foo1.2.3
1.2.3(нет)tar: @name@-@version@:.foo1.2.3
foo-1.2.3(нет)tar: @name@-@version@:.foo1.2.3
libssh2-1.11.0(нет)tar: libssh2-@version@:.libssh21.11.0
release-2_0_4(нет)tar: release-@version@:.foo2.0.4
V1.2.3(нет)(нет)foo1.2.3
20260514pattern = "{year:4}{month:2}{day:2}", template = "{year}.{month}.{day}"(любое)foo2026.5.14
v1_11_0pattern = "v{major:+}_{minor:+}_{patch:+}", template = "{major}.{minor}.{patch}"(любое)libssh21.11.0

Песочница

По умолчанию хуки запускаются в hybrid-песочнице (bubblewrap + chroot hasher), чтобы вредоносный или ошибочный хук не мог прочитать ~/.ssh или ~/.gnupg. См. Песочницу о трёх режимах и том, как выбрать подходящий.

Подсветка синтаксиса

zoryn подсвечивает вывод логов с помощью формата sublime-syntax. Встроенный log.sublime-syntax (из bat) распознаёт уровни, даты, время, IP-адреса, URL, строки в кавычках, числа и key=value.

Цветовые темы — формат .tmTheme (совместим с TextMate/Sublime Text). Тема по умолчанию — Monokai.

Пользовательские файлы перекрывают встроенные:

ФайлНазначение
~/.config/zoryn/syntaxes/*.sublime-syntaxСвои синтаксисы
~/.config/zoryn/theme.tmThemeСвоя цветовая тема

Подсветка работает в:

Автоматически отключается, если вывод не в TTY или установлена переменная NO_COLOR.

Окружение

SSH-алиасы в ~/.ssh/config (создаются командой zoryn gen environment):

Host gitery
    HostName gitery.altlinux.org
    Port 222
    User alt_username

Host gyle
    HostName gyle.altlinux.org
    Port 222
    User alt_username