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_branch | Git-ветка для чтения 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") |
mode | build (по умолчанию), rebuild или auto; перекрывает mode из [batch] |
exclude | TOML-массив или строка через запятую — репозитории, где пакет исключён |
only | TOML-массив или строка через запятую — репозитории, где пакет включён (эксклюзивно) |
skip | true для временного отключения |
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: