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

Batch-конфигурация

Batch-конфиги описывают группы связанных пакетов для совместной сборки — PHP-extensions, OCaml-библиотеки, привязанные к общей версии toolchain, и подобные случаи, где все пакеты делят настройки и должны попасть в одну задачу.

Используется командой zoryn task batch.

Расположение

Файлы конфигурации хранятся в ~/.config/zoryn/batch/ с расширением .conf. Ссылаться по имени (без расширения) или полным путём:

zoryn task batch php-8.4                      # ~/.config/zoryn/batch/php-8.4.conf
zoryn task batch ~/configs/mypackages.conf    # полный путь

Формат

TOML: таблица [batch] для глобальных настроек, отдельная таблица для каждого пакета.

[batch]
name = "PHP 8.4 extensions"
basedir = "~/packages/php8.4"
specsubst = "phpver=8.4"
main = "php"
main_branch = "8.4"

[php]
# Главный пакет, версия/тэг берутся отсюда

[php-memcached]
# Использует настройки по умолчанию

[pecl-imagick]
path = "~/packages/imagick"
# Свой путь, не basedir/pecl-imagick

[php-unit]
mode = "rebuild"
# Пересборка вместо сборки из исходников

[php-xdebug]
skip = true
# Временно отключён

[php-pgsql]
exclude = ["p10", "c10f2"]
# Не собирать для p10 и c10f2

[php-redis]
only = ["sisyphus", "p11"]
# Собирать только для sisyphus и p11

[php-sodium]
specsubst = "none"
# Отключить specsubst для этого пакета

Опции секции [batch]

ОпцияОписание
nameОтображаемое имя batch (по умолчанию: имя файла конфига)
basedirБазовый каталог для пакетов, поддерживает ~
specsubstОбязательный. specsubst по умолчанию для gear-create-tag (например, phpver=8.4); none — отключить подстановку
modeРежим по умолчанию для всех пакетов: build (по умолчанию), rebuild или auto (см. Режим auto)
mainИмя главного пакета для получения версии/тэга
main_branchGit-ветка для чтения spec главного пакета
tag_formatШаблон имени тэга (по умолчанию: {main_name}-{main_version}-{main_release})
tag_messageШаблон сообщения тэга (по умолчанию: такой же, как tag_format)

Плейсхолдеры tag format

  • {main_name} — имя главного пакета (например, php8.4).
  • {main_version} — версия главного пакета (8.4.17).
  • {main_release} — release главного пакета (alt1).
  • {name} — имя текущего пакета (php8.4-apcu).

Опции секции пакета

ОпцияОписание
pathСвой путь к репозиторию вместо basedir/name; поддерживает ~. Абсолютный или ~-путь берётся как есть; относительный разрешается относительно basedir (чтобы specsubst-варианты делили один репозиторий, напр. path = "dune")
modebuild (по умолчанию), rebuild или auto; перекрывает mode из [batch]
excludeTOML-массив или строка через запятую — репозитории, где пакет исключён
onlyTOML-массив или строка через запятую — репозитории, где пакет включён (эксклюзивно)
skiptrue для временного отключения
specsubstПереопределить specsubst, или none для отключения

Режим auto

При mode = "auto" — глобально в [batch] или у отдельного пакета — zoryn сам решает, что делать с каждым пакетом в каждом целевом репозитории, сравнивая version-release из spec самого пакета с тем, что уже есть в репозитории (через RDB API):

  • в репозитории та же version-release — пакет добавляется в задание как обычный rebuild;
  • в репозитории версия старее, пакета нет совсем или RDB недоступен — пакет получает собственный тег <version>-<release> и собирается из исходников;
  • репозиторий новее, чем spec, — пакет для этого репозитория пропускается с предупреждением: локальная копия отстала.

Пакет, который есть в конфиге, но которого нет локально (каталог отсутствует), просто добавляется на rebuild — сравнивать и собирать из исходников нечего.

Теги в режиме auto всегда строятся из собственного <version>-<release> пакета; tag_format и tag_message действуют только для связанных батчей с главным пакетом. Если собирать ничего не нужно, но в рабочей копии остались незакоммиченные изменения, zoryn предупредит: скорее всего, забыли поднять release.

Режим auto ищет пакет в RDB по имени из spec (Name:); переименование через specsubst не учитывается — для таких вариантов решение может быть неверным, лучше задать явный mode = "build"/"rebuild".

Проверка

Batch-конфиги проверяются при загрузке: неизвестный ключ (например, опечатка excludes) или нераспознанная опция в секции [batch] выводят предупреждение в stderr с указанием пути к файлу. Сборка при этом продолжается — предупреждение лишь помогает заметить ошибку. Неверное значение mode (в любой секции) — это ошибка, а не предупреждение.

Значения specsubst тоже проверяются: имя переменной — ASCII-буква и дальше ASCII-буквы и цифры (оно становится ключом git config gear.specsubst.<имя>, ничего другого git не примет), значение — печатный ASCII. В ошибке недопустимый символ называется явно, с кодом и юникодным именем — так что кириллический двойник латинской буквы, неотличимый на глаз, будет виден сразу (например, 'с' (U+0441 CYRILLIC SMALL LETTER ES)).

Генерация из существующей задачи

Bootstrap batch-конфига из уже имеющейся задачи — zoryn task genbatch:

zoryn task genbatch 404784 --main php --output ~/.config/zoryn/batch/php-8.4.conf