zoryn task¶
Управление задачами. Команды task show и task ls по умолчанию используют Tasks API для быстрого ответа, с fallback на SSH, если API недоступен. Текущий пользователь определяется из [tasks] user в ~/.zoryn или из email %packager в ~/.rpmmacros (rider@altlinux.org → rider).
zoryn task new¶
Создать новое задание в двоичном репозитории. Обёртка над ssh gyle task new.
Выводит ID нового задания при успехе.
zoryn task show¶
Показать детали задачи сборки.
Режимы вывода:
- по умолчанию — gyle-подобный key=value формат с раскрашенными state, repo, owner.
--brief— компактный вывод сабтасков (package.git=tag).--json— раскрашенный JSON (jq-стиль).
Без TASK_ID показывает последнюю задачу.
zoryn task show 409684 # детали задачи
zoryn task show --brief 409684 # кратко
zoryn task show --json 409684 # JSON
zoryn task show # последняя задача
zoryn task ls¶
Список задач сборки с цветным state.
zoryn task ls [-B repo] [--state STATE] [-p pkg] [--user NAME] [-a|--all]
[--test-only] [--needs-approval ROLE] [-d]
Показывает задачи пользователя из gyle. Фильтры по репозиторию, state, пакету, пользователю, test-only.
-B <repo>/--repo <repo>— через запятую (sisyphus,p11,p10).--state <STATE>— через запятую. Значения:NEW,AWAITING,BUILDING,COMMITTING,PENDING,TESTED,EPERM,FAILING,FAILED,POSTPONED,SWEPT,DONE.-p <pkg>— фильтр по имени пакета.--user <NAME>— задачи пользователя (по умолчанию: текущий;ALL— все пользователи).-a/--all— alias для--user ALL.--test-only— только тестовые задачи.--needs-approval <ROLE>— задачи, требующие approve отmaintилиtester.
zoryn task ls # все задачи
zoryn task ls -B p11 # только p11
zoryn task ls -B sisyphus,p11 # p11 и sisyphus
zoryn task ls --state FAILED # упавшие
zoryn task ls --state FAILED,EPERM # FAILED и EPERM
zoryn task ls -p php # задачи с пакетом php
zoryn task ls --user zerg # задачи пользователя zerg
zoryn task ls --all # всех пользователей
zoryn task ls --test-only # только test-only
zoryn task ls --needs-approval maint # нужен approve maintainer'а
zoryn task ls --needs-approval tester # нужен approve тестировщика
zoryn task download¶
Скачать собранные RPM из задачи в локальный репозиторий hasher.
Скачивает все собранные бинарные RPM. Аргумент — имя пакета или ID задачи. Если аргумент — число, используется как task ID; иначе ищет задачу с указанным пакетом.
По умолчанию путь назначения определяется из hsh --printenv. -o задаёт свой каталог (будет создан).
-b <repo>— целевой репозиторий (по умолчанию:sisyphus, игнорируется при указании task ID).--arch <arch>— архитектура (по умолчанию: изhsh --printenv, илиx86_64с-o).-o, --output <dir>— выходной каталог (по умолчанию: репозиторий hasher).
zoryn task download 404784 # по task ID
zoryn task download ffmpeg # из задачи sisyphus
zoryn task download 404784 -o /tmp/rpms # в свой каталог
zoryn task download libva -b p11 # из задачи p11
zoryn task download ffmpeg --arch i586 # i586 RPM
zoryn task gitclone¶
Клонирует git-репозитории всех подзаданий задачи в текущий каталог.
Клонирует репозиторий каждого подзадания в отдельный каталог (с именем пакета), на тот самый коммит, который собирался в задаче. Репозитории берутся из собственных gears задачи по протоколу git://, а не из общего репозитория gears — так вы получаете ровно то, что собиралось в задаче.
Подзадания типа delete (клонировать нечего) и srpm (собрано из загруженного src.rpm, git-репозитория нет) пропускаются. Задачи в состоянии DONE, перенесённые в архив, разрешаются автоматически.
zoryn task mkrepo¶
Экспериментальная
Команда активно дорабатывается и может измениться.
Собрать локальный объединённый apt-rpm-репозиторий, наложив бинарные RPM из задачи поверх зеркала базовой ветки. Это позволяет протестировать задачу на полном срезе репозитория (например, через task test-rebuild).
zoryn task mkrepo 404784 # собрать объединённый репозиторий
zoryn task mkrepo 404784 --builder p11 # использовать конкретный сборщик
zoryn task mkrepo 404784 --arch i586 # переопределить архитектуру сборщика
zoryn task mkrepo 404784 --clean # удалить собранный репозиторий и выйти
Сначала команда определяет целевую ветку задачи (из task show) и резолвит сборщиков, используя эту ветку как ветку выбора, — той же логикой resolve_all_builders, что и task test-rebuild. Какую ветку собирать, решает задача, а не список сборщиков. Без --builder берутся сконфигурированные сборщики этой ветки; @all и шаблоны сужаются до ветки задачи, а не берётся первый попавшийся. Из выбранных сборщиков читаются параметры repo (apt-URL базового зеркала), arch и repo_workdir (корневой каталог для собираемых репозиториев). RPM из задачи скачиваются и накладываются поверх базового зеркала, после чего индексируются. Вместо повторного запуска genbasedir по всему компоненту (который читает каждый RPM базы) индекс строится склейкой pkglist-ов: готовый base/pkglist.classic базового зеркала берётся как есть, заголовки заменённых пакетов удаляются, а заголовки из опубликованного задачей pkglist.task вставляются (с переписыванием каталога на RPMS.classic). Читаются только пакеты задачи, поэтому индексация почти мгновенна независимо от размера ветки. При успехе печатается путь file://…/repo к собранному репозиторию, а затем готовые строки для sources.list:
rpm file://<workdir>/<task_id>/repo <arch> classic
rpm file://<workdir>/<task_id>/repo noarch classic
Опции:
-b,--builder <name|pattern>— сборщик(и), из которых берутсяrepo/arch/repo_workdir(по умолчанию: сборщик по умолчанию). Принимает имя, список через запятую,@allили@host:<host>. Резолвинг использует ветку задачи как ветку выбора (см. выше), поэтому@allили много сборщиков передавать безопасно — шаблоны сужаются до ветки задачи, а не берётся первый попавшийся. Сборщики на одном хосте (одинаковыйuser@host, отличаются только архитектурой) объединяются в один многоархитектурный репозиторий (repo/<arch>/на каждый сборщик + общийrepo/noarch/); сборщики на разных хостах получают отдельный репозиторий каждый, разнесённый по подкаталогу хоста внутри workdir.--archнельзя сочетать с несколькими сборщиками.--arch <arch>— переопределить архитектуру сборщика. Должна быть известной бинарной архитектурой;noarchотклоняется (этот компонент создаётся отдельно автоматически).--workdir <dir>— переопределить рабочий каталог репозиториев.--force— удалить ранее собранный для задачи репозиторий перед сборкой (чистая пересборка).--compressed— писать сжатый индексpkglist.classic.xzвместо разжатогоpkglist.classic(по умолчанию). Пишется только один (apt читает любой); по умолчанию пропускается шаг xz и apt читает индекс напрямую.--clean— удалить собранный для задачи репозиторий и выйти. Ветка задачи определяется и здесь (от подходящих сборщиков зависит структура каталогов репозитория), поэтому задача должна по-прежнему быть доступна черезtask show.
Создаётся следующая структура:
<workdir>/<task_id>/
rpms/<arch>/ скачанные RPM из задачи
repo/<arch>/RPMS.classic/ симлинки: база ∪ задача
repo/<arch>/base/ apt-индекс (pkglist.classic, или .xz при --compressed)
repo/noarch/RPMS.classic/
repo/noarch/base/
aptconf/ готовые apt.conf + sources.list + priorities
В aptconf/ кладётся готовый apt-конфиг (стандартный для ветки шаблон apt.conf/priorities плюс sources.list на собранный репозиторий) — срез можно сразу скормить hasher/apt. Файлы release идентифицируют срез: Suite/Label — это ветка (например p11), а Description — <ветка> (<задание ветки> plus task <task_id>) (например p11 (416369 plus task 418566)); MD5Sum/BLAKE2b пересчитаны по склеенным индексам.
Параметр repo сборщика должен указывать на зеркало file://, локальное для машины, где идёт сборка
- Локальный сборщик → всё (скачивание, симлинки, индексация) выполняется на этой машине;
repoдолжен быть локальным зеркалом здесь. - Удалённый сборщик (
type = remote) → сборка идёт на удалённом хосте по SSH: RPM таска качаются там, удалённое базовое зеркало симлинкуется. Склеенный индекс строится локально (читая удалённыйbase/pkglist.classicпо SSH) и копируется обратно в каталогbase/на удалённом хосте. Готовый репозиторий лежит вrepo_workdirна удалённом хосте. На удалённом хосте нуженcurlи локальная копия базового зеркала.
Зеркало file:// — базовое зеркало подключается в собираемый репозиторий через симлинки, поэтому удалённый URL в качестве основы для наложения использовать нельзя.
Изменения пакетов берутся из авторитетного plan/bin.list.diff задания: каждая строка + добавляется, - — удаляется (так отражаются добавления, замены версий и удаления — задание только с удалениями или только с noarch тоже обрабатывается). Каждый компонент (целевая архитектура и noarch) — это набор симлинков на пакеты базы за вычетом удалённых плюс добавленные RPM задачи; его индекс в base/ склеивается из pkglist базового зеркала и pkglist задачи. Если plan/bin.list.diff недоступен (например, очень старое задание), команда прерывается. Повторный запуск для той же задачи пересобирает набор симлинков заново.
Накладывается только компонент classic; базовые зеркала с дополнительными компонентами (например, gostcrypto) пока не включаются в срез.
Рабочий каталог определяется в следующем порядке: флаг --workdir, параметр сборщика repo_workdir, затем глобальный [builders] repo_workdir. Описание этих ключей см. в разделе конфигурация.
Требуются утилиты xz и b2sum (стандартные xz/coreutils) — genbasedir больше не нужен. Удалённому сборщику дополнительно нужны xz и curl на хосте.
zoryn task add¶
Добавить сабтаск в задачу. Совместимо с ssh gyle task add.
zoryn task add [--before SUBTASK_ID] [--replace] <task_id>[^<subtask_id>|/<subtask_id>] <action> ...
Аргумент task_id принимает два опциональных суффикса (взаимно исключают --before / --replace):
^<subtask_id>— алиас для--before <subtask_id>(позиция вставки)./<subtask_id>— имплицитный--replace, нацеленный именно на этот сабтаск (обход auto-find по имени пакета; полезно когда несколько сабтасков ссылаются на один пакет).
Действия:
repo <repo> <tag>— добавить gear-сабтаск.<repo>.git=<tag>— короткий вариант repo (для copy-paste изtask ls).del <pkg>...— пометить пакеты на удаление.rebuild <pkg>...— пересобрать пакеты из репозитория.copy <pkg> [<from_repo>]— скопировать предсобранные бинарники.
Опции:
--before SUBTASK_ID— вставить новый сабтаск перед сабтаском с указанным идентификатором. Эквивалентно позиционному синтаксису<task_id>^<subtask_id>.--replace— заменить существующий сабтаск с тем же пакетом. Целевой сабтаск определяется по имени пакета из action (сопоставление идёт и по имени SRPM-пакета, и по имени gear-репозитория). Падает с ошибкой, если ни один сабтаск не найден или найдено больше одного; во втором случае удалите ненужный сабтаск вручную (zoryn task delete <task_id> <subtask_id>) и повторите команду без--replace. Нельзя комбинировать сdel/rebuildдля нескольких пакетов. При совместном использовании с--beforeновый сабтаск вставляется на указанную пользователем позицию; если--beforeуказывает на заменяемый сабтаск, вместо него используется следующий сабтаск, чтобы сохранить исходную позицию.
zoryn task add 123456 repo php-sphinx.git 8.2.30-alt1
zoryn task add 123456 php-sphinx.git=8.2.30-alt1
zoryn task add 123456 del php-sphinx php-foo
zoryn task add 123456 rebuild php-sphinx
zoryn task add 123456 copy php-sphinx p10
zoryn task add --before 100 123456 repo dune.git 3.17.2-alt1
zoryn task add 123456^100 repo dune.git 3.17.2-alt1
zoryn task add 418908/5 copy waked sisyphus
Заменить существующий сабтаск (например, заменить локальный rebuild на copy из sisyphus):
zoryn task run¶
Поставить задачу в очередь на сборку. Обёртка над ssh gyle task run.
zoryn task run [--test-only] [--commit] [--dry-run] [--fail-early] [--fail-late]
[--hurry] [--unhurry] [-m MESSAGE] [TASK_ID] [-d]
Без ID использует последнюю задачу текущего пользователя.
--test-only— остановиться после теста, не коммитить.--commit— коммит после тестов.--dry-run— остановиться перед постановкой в очередь.--fail-early— остановить сборку после первой ошибки.--fail-late— не останавливать после первой ошибки.--hurry/--unhurry— включить/выключить swift-режим.-m MESSAGE— причина сборки (многословные в кавычках).-m -— читать причину из stdin.
zoryn task run # последняя задача
zoryn task run 123456 # конкретная
zoryn task run --test-only -m "fix build for aarch64" 123456
zoryn task run --fail-early --hurry 123456
zoryn task run --dry-run 123456
echo "long reason" | zoryn task run -m - 123456 # причина из stdin
zoryn task abort¶
Отменить запущенную задачу. Обёртка над ssh gyle task abort.
Task ID поддерживает TAB-дополнение из списка задач текущего пользователя.
zoryn task approve¶
Approve сабтаска. Обёртка над ssh gyle task approve.
SUBTASK — номер сабтаска, имя пакета или all для approve всех. Для all выполняется один вызов ssh gyle task approve <id> all — gyle сам проходит только по реально существующим сабтаскам, поэтому ранее удалённые через task delsub подзадачи не приводят к паразитным ошибкам «subtask not found». Комментарий — через -m. Если -m не указан и stdin подан на вход, сообщение читается оттуда.
zoryn task approve 123456 1 # approve сабтаска #1
zoryn task approve 123456 php-sphinx -m "LGTM" # по имени пакета
zoryn task approve 123456 all # все сабтаски
zoryn task approve 123456 1 --revoke # отозвать approve
echo "Checked" | zoryn task approve 123456 1 # сообщение из stdin
zoryn task disapprove¶
Disapprove сабтаска. Обёртка над ssh gyle task disapprove. Синтаксис такой же, как у approve, включая поведение all: выполняется один вызов ssh gyle task disapprove <id> all, и gyle сам проходит по существующим сабтаскам.
zoryn task disapprove 123456 1 -m "Needs fixes"
zoryn task disapprove 123456 all -m "FTBFS"
zoryn task disapprove 123456 1 --revoke
zoryn task delete¶
Удалить сабтаск из задачи по имени пакета или номеру. Также доступна как zoryn task delsub (gyle-совместимый alias).
zoryn task delete <task_id> <package|subtask> [-d]
zoryn task delsub <task_id> <package|subtask> [-d]
Второй аргумент:
4200— номер сабтаска.php-sphinx— имя пакета.php-sphinx.git— имя пакета с.git.php-sphinx.git=8.2.30-alt1— имя с тэгом (для copy-paste изtask ls).
zoryn task rm¶
Удалить задачу.
zoryn task genbatch¶
Сгенерировать batch-конфиг из существующей задачи.
Читает структуру задачи и генерирует batch-конфиг для пересборки. См. Batch configs.
zoryn task refresh¶
Обновляет устаревшие сабтаски в задаче — подтягивает в задачу актуальные версии из репозитория вместо устаревших. По умолчанию сверяет rebuild-сабтаски с веткой задачи; --from <ветка> --types <список> распространяет обновление на другие типы сабтасков.
zoryn task refresh <task_id> [--from <branch>] [--types <list>] [--dry-run]
[--run [--test-only|--commit] [-m MESSAGE]]
Опции:
<task_id>— задача для обновления.--from <branch>— ветка репозитория для сверки (по умолчанию — ветка задачи).--types <list>— типы сабтасков для обновления (через запятую). Значения:rebuild(по умолчанию),copy,gear,srpm; плюс сокращенияALL(всё кромеdel) иbuild(=gear,srpm). Обязательно при использовании--from.--dry-run— показать, что будет обновлено, не меняя задачу. С--rungyle всё равно опрашивается по SSH, но постановка задачи выполняется в серверном dry-run (task run --dry-run), и задача не ставится в очередь.--run— после refresh поставить задачу на сборку. Срабатывает и когда обновлять нечего; пропускается (с предупреждением и exit 1), если хоть один сабтаск не удалось обновить.--test-only— передать--test-onlyвtask run. Требует--run.--commit— передать--commitвtask run. Требует--run. Несовместимо с--test-only.-m MESSAGE— причина сборки, передаётся вtask run(для стабильных веток gyle её требует).-m -— читать из stdin. Требует--run.
zoryn task refresh 123456 # rebuild-сабтаски на той же ветке
zoryn task refresh 123456 --from sisyphus --types ALL # все типы из sisyphus
zoryn task refresh 123456 --from sisyphus --types copy # только copy-сабтаски
zoryn task refresh 123456 --from sisyphus --types ALL --dry-run
zoryn task refresh 123456 --run # обновить и запустить сборку
zoryn task refresh 123456 --run --test-only # обновить и запустить в test-only
zoryn task refresh 123456 --run -m "fix CVE-2026-1234" # обновить и поставить на сборку с причиной
zoryn task batch¶
Собрать цепочку связанных пакетов из batch-конфига.
zoryn task batch <config> [--basedir dir] [--no-build] [--create-task] [--refresh]
[--dry-run] [--test] [--skip pkgs] [-b builder] [-B repo]
[--continue|--abort|--restart] [--allow-overwrite-tag] [-d]
Читает список пакетов из конфига и собирает каждый по порядку. Полезно для групп пакетов типа PHP-extensions, где все пакеты делят общие настройки.
Опции:
<config>— имя конфига (из~/.config/zoryn/batch/) или путь к.conf.--basedir <dir>— базовый каталог для пакетов (переопределяет конфиг, обязателен, если не указан).--no-build— пропустить локальную сборку, только commit/tag/push/submit.--create-task— создать новую задачу, если не найдена (добавляет main-пакет автоматически).--refresh— обновить пакеты с локальными изменениями.--dry-run— показать что будет сделано.--test— локальная тестовая сборка без gitery/gyle.--skip <pkgs>— пропустить пакеты (через запятую).-b <name>— билдер для локальных сборок.-B <repo>— целевой репозиторий (по умолчанию:sisyphus). Несколько репозиториев через запятую.--continue— возобновить прерванный batch.--abort— отбросить сохранённое состояние.--restart— начать заново, отбросив старое состояние.--allow-overwrite-tag— принудительно пересоздать существующие локальные тэги во время batch, минуя проверки gears/ancestor (см.zoryn submit). При--refreshне имеет эффекта: refresh всегда перезаписывает локальный тэг. При--continueтекущее значение флага всегда побеждает сохранённое в state — пере-передавайте флаг при каждом возобновлении, если хотите, чтобы overwrite оставался включённым.
zoryn task batch php-8.4 # ~/.config/zoryn/batch/php-8.4.conf
zoryn task batch ~/configs/mypackages.conf # явный путь
zoryn task batch php-8.4 --basedir ~/packages # переопределить basedir
zoryn task batch php-8.4 --no-build # пропустить локальную сборку
zoryn task batch php-8.4 --create-task # создать задачу, если нет
zoryn task batch php-8.4 --refresh # обновить с локальными изменениями
zoryn task batch php-8.4 --dry-run # предпросмотр
zoryn task batch php-8.4 --test # локальная тестовая сборка
zoryn task batch php-8.4 --test -b arm-server # тест на конкретном билдере
zoryn task batch php-8.4 --skip php-xdebug # пропустить пакеты
zoryn task batch php-8.4 -B p11 # в p11
zoryn task batch php-8.4 -B sisyphus,p11,p10 # 3 ветки с зависимостями
zoryn task batch php-8.4 --continue # возобновить прерванный
zoryn task batch php-8.4 --abort # отбросить состояние
zoryn task batch php-8.4 --restart # заново
zoryn task rebuild¶
Пересобрать пакеты, зависящие от пакета в существующей задаче.
zoryn task rebuild <task_id|package> [-b repo] [--from-log] [--deps-by-pkg <pkg>]
[--dptype=TYPE] [--depth=N] [--up <basedir>]
[--all-subtasks <basedir>] [--skip LIST] [--skip-gyle-done]
[-f|--force] [builder options] [-d]
Запрашивает RDB API о пакетах с двоичными зависимостями на указанный пакет, пересобирает их локально через hasher и добавляет успешные пересборки в задачу.
-b <repo>— целевой репозиторий (по умолчанию:sisyphus).--from-log— парсить affected-пакеты из лога FAILED задачи вместо RDB API.-f, --force— форсировать пересборку всех, игнорировать существующие лог-файлы ошибок.--deps-by-pkg <pkg>— запросить зависимости по имени пакета вместо task ID.--up <basedir>— обновлять пакеты с upstream вместо пересборки (см. ниже).--dptype=TYPE— тип зависимостей для RDB:source,binary(по умолчанию),both.--depth=N— глубина зависимостей (1–4, по умолчанию:1).--skip LIST— пропустить сабтаски по номеру или имени (через запятую,--skip 340,440,vtkaddon).--skip-gyle-done— пропускать уже собранные на gyle (только с--all-subtasks).
Опции билдера — как у zoryn build: --builder=PATTERN, -a/--arch, -B/--build-branch (-b — для целевого репозитория), -p, -s, --fail-if-busy, --skip-busy.
--from-log ищет во всех доступных логах (итерации и попытки) последний с секцией «ACLs of affected packages». Для старых/удалённых задач показывает список affected-пакетов без попыток пересборки.
Режим update (--up)¶
Вместо пересборки обновляет каждый зависимый пакет с upstream:
- Клонирует пакет в
<basedir>/<package>, если нет (черезzoryn clone). - Fetch и checkout ветки
gears/sisyphus. - Запускает
zoryn up. - Если уже актуальная версия: добавить как rebuild-сабтаск.
- Если обновлено: собрать локально и добавить как обычный сабтаск.
- При любой ошибке: немедленная остановка и возврат управления мейнтейнеру.
zoryn task copy¶
Скопировать задачу в другой репозиторий.
zoryn task copy -B <repo> <task_id> [options]
zoryn task copy --into <target_id> <task_id> [options]
Копирует все сабтаски существующей задачи в новую задачу в другом репозитории, используя имена пакетов (SRPM) из Tasks API. Если исходная задача ещё не завершена, новая зависит от неё.
С --into <target_id> сабтаски добавляются в указанную существующую задачу вместо создания новой. Целевой репозиторий берётся из этой задачи (-B игнорируется). Зависимости существующей задачи не изменяются; если исходная задача не DONE — выводится предупреждение, зависимости нужно проставить вручную.
Зачем нужен --into?¶
Типичные сценарии, когда сабтаски нужно дослать в существующую задачу, а не создавать новую:
- Добавление пакетов в уже подготовленную задачу. В стабильной ветке открыта задача, в ней уже выставлен build reason, выбран режим (
--commitили test-only) — переделывать всю настройку не хочется.--into <id>кладёт новые сабтаски прямо в неё. - Консолидация взаимозависимых пакетов. Пакет из другой задачи должен встать вместе с уже стоящим в вашей (например, при ABI-сборке вместе). Доливаем его через
--into, чтобы оба сабтаска собирались внутри одного gyle-прогона и разрешали зависимости друг друга, вместо гонки между двумя отдельными задачами. - Восстановление после FAILED без перезапуска с нуля. В FAILED-задачу можно дослать сабтаски и перезапустить её.
--into <failed_id>доливает недостающее на месте; задачу всё равно нужно будет перезапустить, и упавшие сабтаски пересоберутся.
По умолчанию копируются все сабтаски исходной задачи. Через --subtask (повторяемый, через запятую) можно отобрать только нужные. Аргумент принимает тот же синтаксис, что и у zoryn task delete:
- номер сабтаска —
--subtask 200; - имя пакета —
--subtask php-mbstring; pkg.git=tag—--subtask php-gd.git=php-8.2.31-alt1(удобно копировать из выводаzoryn task ls);- комбинации через запятую —
--subtask php,php-mbstring,200.
TAB-completion подсказывает сабтаски исходной задачи (нужно, чтобы ID исходной задачи уже стоял в командной строке). Если аргумент не находит совпадений, команда печатает список доступных сабтасков и выходит с ненулевым статусом.
Что не переносится при копировании сабтасков:
- Аппрувы. В gyle аппрувы привязаны к конкретному объекту сабтаска. Скопированные сабтаски — это новые объекты без аппрувов; их придётся ставить заново.
- Артефакты сборки. Каждый сабтаск пересобирается (или забирается заново через
task add copy) внутри целевой задачи. RPM-ки исходной задачи вслепую не переиспользуются. - Пер-сабтасочные метаданные (build reason у конкретного сабтаска, комментарии, ручные флаги). Метаданные целевой задачи сохраняются, исходной — отбрасываются.
- Номера сабтасков. Новые ID назначает gyle при
task add. - Зависимости исходной задачи. Зависимости существующей целевой задачи не трогаются (если источник не DONE, выводится предупреждение — при необходимости проставьте их через
zoryn task deps).
В сочетании с --dry-run можно предпросмотреть, какие сабтаски будут добавлены и каким способом (build / copy / rebuild / delete), не трогая целевую задачу. --rebuild-only / --copy-rebuilds отключают EVR-промпт — удобно для неинтерактивных скриптов и пакетной консолидации.
Состояние целевой задачи проверяется заранее:
- Отклонено:
DONE,SWEPT,EPERM— терминальные состояния, новые сабтаски не принимаются. - Предупреждение:
BUILDING,COMMITTING,FAILING,PENDING,POSTPONED— gyle может отклонить добавление. - Разрешено:
NEW,AWAITING,TESTED,FAILED.
Для rebuild-сабтасков сравнивает EVR (epoch:version-release) между источником и целью. При различии EVR запрашивает интерактивно: копировать или пересобирать. --copy-rebuilds / --rebuild-only пропускают запрос.
-B, --branch <repo>— целевой репозиторий. Обязателен, если не указан--into.--into <task_id>— добавить сабтаски в существующую задачу вместо создания новой.-r, --run— запустить после создания.-c, --commit— автокоммит после успешной сборки (только с--run).--copy-rebuilds— копировать из источника при различии EVR (не спрашивать); тот же EVR всё равно пересобирается.--rebuild-only— всегда пересобирать из цели, даже если EVR различается.-n, --dry-run— предпросмотр без создания задачи.<task_id>— исходная задача.
zoryn task copy -B p11 404765 # копировать в p11
zoryn task copy -B p11 --run 404765 # копировать и запустить test-only
zoryn task copy -B p11 --run --commit 404765 # копировать, запустить, auto-commit
zoryn task copy -B p11 --rebuild-only 404765 # всегда пересобирать
zoryn task copy -B p11 --copy-rebuilds 404765 # копировать при различии EVR
zoryn task copy -B p11 --dry-run 404765 # предпросмотр
zoryn task copy --into 500000 404765 # добавить в существующую задачу #500000
zoryn task copy -B p11 --subtask php --subtask 200 404765 # скопировать только выбранные сабтаски
zoryn task copy -B p11 --subtask php,php-mbstring,200 404765 # через запятую
zoryn task test-rebuild¶
Экспериментальная
Команда активно развивается и может измениться.
Тест-пересборка зависимых пакетов перед отправкой задачи.
zoryn task test-rebuild <task_id> [--arch <arch>] [--builder <pattern>]
[--package PKG]... [--packages-file FILE]
[--dptype=TYPE] [--depth=N] [--skip-ftbfs] [--verify-failures] [--without-task]
[--continue] [--continue-no-refresh] [--top] [-d]
Скачивает RPM из задачи, через RDB находит зависимые пакеты и тест-пересобирает каждый локально. Помогает убедиться, что пакеты собираются с новыми зависимостями до commit.
<task_id>— ID задачи для тестирования.--arch <arch>— архитектуры (через запятую,x86_64,aarch64).--builder <pattern>— выбор билдеров (см. Паттерны билдеров).--package PKG— добавить пакет в кастомный список (повторяемо). Пропускает авто-запрос RDB. Форматы: имя,name-version,name-version-release, с/без epoch и.rpm.--packages-file FILE— читать список из файла (один пакет на строку,#— комментарий). Комбинируется с--package.--dptype=TYPE— тип зависимостей:source(по умолчанию),binary,both.--depth=N— глубина зависимостей (1–4, по умолчанию:1).--skip-ftbfs— пропустить пакеты, уже сломанные на beehive.--verify-failures— после основной пересборки пересобрать упавшие без RPM из задачи, чтобы отличить регрессии от существующих ошибок.--without-task— пропустить скачивание RPM из задачи; пересобрать зависимые в текущем состоянии ветки без инъекции пакетов задачи в hasher. Используется для получения baseline до применения задачи.<task_id>всё равно обязателен — он используется для запроса RDB с целью получения списка зависимых пакетов. Логи получают префиксbaseline.. Взаимоисключает--verify-failuresи--local-rpms. При использовании с--continueили--continue-no-refreshRPM из hasher очищаются при каждом запуске — это гарантирует чистое baseline-состояние.--continue— продолжить с прошлого запуска, обновив список пакетов из RDB.--continue-no-refresh— продолжить без обновления списка.--top— интерактивный TUI с прогрессом.-d, --debug— отладочный вывод.
У задачи должен быть собранный репозиторий
Без --without-task или --local-rpms важно не состояние задачи, а наличие у неё собранного репозитория (RPMS.task). Задача, которая ещё строится — NEW, AWAITING, PENDING, BUILDING, COMMITTING, FAILING, — отклоняется сразу, так как её репозиторий пуст или собран лишь частично. Терминальные состояния допускаются, включая FAILED: у упавшей задачи часто всё равно есть пригодный (пусть частичный) репозиторий, и test-rebuild по ней — нормальный сценарий. Если RPM задачи скачались пусто или не полностью хотя бы для одной запрошенной архитектуры, команда завершается с ошибкой вместо пересборки против чистой ветки (которая дала бы ложный успех). DONE предупреждает, что overlay избыточен (пакеты уже в репозитории); FAILED предупреждает, что набор RPM может быть неполным.
При использовании --package / --packages-file zoryn получает текущую версию каждого пакета из RDB. Если указанная версия не совпадает, пакет пересобирается с текущей и показывается предупреждение. Отсутствующие в ветке пакеты пропускаются.
Возможности:
- Мультиархитектурная поддержка с параллельным запуском на нескольких билдерах.
- Автоматическое скачивание RPM из задачи по архитектуре.
- Обнаружение зависимых через RDB.
- Кастомный список пакетов через
--package/--packages-file. - Beehive FTBFS detection — показывает уже сломанные на beehive пакеты.
- Инкрементальная пересборка через
--continue/--continue-no-refresh. - Статистика в
rebuild-stats.json. - Мониторинг нагрузки хоста для защиты от перегрузки.
- TUI с
--top. - Постоянная история поиска: Up/Down или Ctrl+R в строке поиска логов.
zoryn task test-rebuild 404809 # базовый тест на локальном билдере
zoryn task test-rebuild 404809 -b @all --arch=x86_64 # на всех x86_64 билдерах
zoryn task test-rebuild 404809 --skip-ftbfs # пропустить сломанные на beehive
zoryn task test-rebuild 404809 --continue # продолжить прерванную
zoryn task test-rebuild 404809 -b @all --top # интерактивный TUI
zoryn task test-rebuild 404809 --verify-failures # проверка, что упавшие — регрессии
zoryn task test-rebuild 404809 --without-task # baseline: без RPM задачи
zoryn task test-rebuild 404809 --package foo --package bar-1.2.3-alt1
zoryn task test-rebuild 404809 --packages-file ~/rebuild-list.txt
Очистка между задачами¶
Очистка между задачами удаляет бинарные RPM из {hasher_dir}/repo/{arch}/RPMS.hasher/ и source RPM из {hasher_dir}/repo/SRPMS.hasher/. Chroot, aptbox и apt cache переиспользуются между задачами (для полного сброса используйте zoryn builder clean). Форкнутый worker также очищает унаследованный apt-tmpdir при SIGINT/SIGTERM, поэтому прерывание длительного батча больше не оставляет /tmp/.private/<user>/zoryn.XXXXXXXX/ на билдере.
zoryn task manage¶
Интерактивный полноэкранный TUI для просмотра и управления задачами.
zoryn task manage [TASK_ID] [--user NAME] [--state STATE] [--repo REPO]
[--needs-approval GROUP] [--no-color]
Опции:
TASK_ID— открыть задачу сразу (минуя список).--user NAME— фильтр по пользователю (по умолчанию: текущий;ALL— все).--state STATE— фильтр по state (TESTED,FAILED,BUILDING).--repo REPO— фильтр по целевому репозиторию (sisyphus,p11).--needs-approval GROUP— задачи, требующие approve (maintилиtester).--no-color— отключить цвет (также учитываетNO_COLOR).
Возможности:
- Mutt-style навигация в одной панели: список задач → детали → зависимости.
- Approve/disapprove сабтасков, run/abort/commit/test-only задач, переключение share, управление зависимостями.
- Отключение inheritance-проверок git/lastchange.
- Создание новых задач и добавление сабтасков прямо из TUI.
- Поиск задач (
/) и сабтасков (/на детальном экране,n/N— след./пред.). - Постоянная история поиска: Up/Down или Ctrl+R в строке поиска.
- Просмотрщик build-лога и event-лога с подсветкой и переносом по словам.
- Авто-обновление каждые 15 секунд, ручное —
R/F5. - Фильтры по state, repo, user, needs-approval — всё горячими клавишами.
- Read-only режим, когда SSH недоступен.
- Полная клавиатурная навигация и поддержка колеса мыши.
- Выделение текста мышью на любом экране — drag для выделения диапазона, double-click для слова; triple-click на строке в списке задач, содержащей wrap-блок пакетов, выделяет все
pkg=versionэтой задачи. Многострочные выделения склеиваются пробелами (без переносов) и копируются в буфер обмена при отпускании (OSC 52). Одиночный клик на#NNNвсё ещё копирует только цифры.
zoryn task manage # с фильтрами по умолчанию
zoryn task manage --user ALL # все пользователи
zoryn task manage --state TESTED --repo sisyphus # фильтр state и repo
zoryn task manage --needs-approval maint # требует approve maintainer'а
zoryn task manage 410005 # открыть задачу #410005
zoryn task manage --no-color # без цвета
Нажмите F1 в TUI для полной справки по горячим клавишам.
zoryn task log¶
Просмотр build- или event-логов в TUI.
zoryn task log <task_id> # event-лог
zoryn task log <task_id> <subtask> # выбор архитектуры
zoryn task log <task_id> <subtask> --arch x86_64 # build-лог
zoryn task log <task_id> <subtask> --arch x86_64 --srpm # SRPM-лог
Сабтаск — номер или имя пакета (TAB дополняет из задачи):
Опции:
--arch <arch>— архитектура (требует сабтаск).--srpm— смотретьsrpm.logвместо основного лога (требует--arch).--no-color— без цвета.