zoryn task¶
Task management. Commands task show and task ls use the Tasks API by default for faster response, falling back to SSH if the API is unavailable. The current user is determined from [tasks] user in ~/.zoryn, or from the %packager email in ~/.rpmmacros (rider@altlinux.org → rider).
zoryn task new¶
Create a new task in a binary repository. Wraps ssh gyle task new.
Prints the new task ID on success.
zoryn task show¶
Show detailed information about a build task.
Output modes:
- default — gyle-like key=value format with colorised state, repo, owner.
--brief— compact subtask display (package.git=tag).--json— colorised JSON output (jq-style).
If TASK_ID is omitted, shows the latest task.
zoryn task show 409684 # task details
zoryn task show --brief 409684 # brief format
zoryn task show --json 409684 # colorised JSON
zoryn task show # latest task
zoryn task ls¶
List build tasks with coloured state output.
zoryn task ls [-B repo] [--state STATE] [-p pkg] [--user NAME] [-a|--all]
[--test-only] [--needs-approval ROLE] [-d]
Displays the user's build tasks from gyle. Filterable by repository, state, package, user, and test-only flag.
-B <repo>/--repo <repo>— comma-separated list (sisyphus,p11,p10).--state <STATE>— comma-separated list. Values:NEW,AWAITING,BUILDING,COMMITTING,PENDING,TESTED,EPERM,FAILING,FAILED,POSTPONED,SWEPT,DONE.-p <pkg>— filter by package name.--user <NAME>— show tasks of a specific user (default: current user;ALLfor everyone).-a/--all— alias for--user ALL.--test-only— show only test-only tasks.--needs-approval <ROLE>— filter tasks needing approval frommaintortester.
zoryn task ls # list all tasks
zoryn task ls -B p11 # only p11 tasks
zoryn task ls -B sisyphus,p11 # p11 and sisyphus tasks
zoryn task ls --state FAILED # failed tasks
zoryn task ls --state FAILED,EPERM # failed and eperm
zoryn task ls -p php # tasks with package php
zoryn task ls --user zerg # tasks of user zerg
zoryn task ls --all # all users' tasks
zoryn task ls --test-only # only test-only tasks
zoryn task ls --needs-approval maint # needs maintainer approval
zoryn task ls --needs-approval tester # needs tester approval
zoryn task download¶
Download built RPMs from task to local hasher repository.
Downloads all built binary RPMs from a task. The argument can be a package name or a task ID. If the argument is a number, it is used directly as the task ID; otherwise zoryn searches for a task containing the specified package.
By default, the destination path is determined automatically from hsh --printenv. Use -o to specify a custom output directory (will be created if it doesn't exist).
Options:
-b <repo>— target repository (default:sisyphus, ignored when task ID is specified).--arch <arch>— target architecture (default: fromhsh --printenv, orx86_64with-o).-o, --output <dir>— output directory (default: hasher repo directory).
zoryn task download 404784 # by task ID
zoryn task download ffmpeg # from sisyphus task
zoryn task download 404784 -o /tmp/rpms # to custom directory
zoryn task download libva -b p11 # from p11 task
zoryn task download ffmpeg --arch i586 # i586 RPMs
zoryn task gitclone¶
Clone all subtask git repositories of a task into the current directory.
Clones the git repository of every subtask into a separate directory (named after the package), checked out at the exact commit that was built in the task. Repositories are fetched from the task's own gears over the git:// protocol — not from the public gears repository — so you get precisely what the task built.
Subtasks of type delete (nothing to clone) and srpm (built from an uploaded source RPM, no git repository) are skipped. DONE tasks that have been moved to the archive are resolved automatically.
zoryn task mkrepo¶
Experimental
This command is under active development and may change.
Generate a local merged apt-rpm repository by overlaying a task's binary RPMs on top of a base branch mirror, so the task can be tested against a complete repository snapshot (e.g. with task test-rebuild).
zoryn task mkrepo 404784 # build merged repo for the task
zoryn task mkrepo 404784 --builder p11 # use a specific builder
zoryn task mkrepo 404784 --arch i586 # override the builder arch
zoryn task mkrepo 404784 --clean # remove the generated repo and exit
The command first looks up the task's target branch (from task show) and resolves builders with that branch as the selection branch — the same resolve_all_builders logic as task test-rebuild, so the task, not the builder list, decides which branch's repo is built. With no --builder the branch's configured builders are used; @all and patterns are narrowed to the task's branch instead of grabbing the first one. From the resolved builders it reads repo (base mirror apt URL), arch, and repo_workdir (root directory for generated repos). The task's RPMs are downloaded and overlaid on the base mirror, then indexed. Instead of re-running genbasedir over the whole component (which reads every base RPM), the index is built by splicing pkglists: the base mirror's existing base/pkglist.classic is reused verbatim, superseded headers are dropped, and the task's published pkglist.task headers are spliced in (their directory rewritten to RPMS.classic). This reads only the task's packages, so indexing is near-instant regardless of branch size. On success the generated file://…/repo path is printed, followed by ready-to-paste apt source lines:
rpm file://<workdir>/<task_id>/repo <arch> classic
rpm file://<workdir>/<task_id>/repo noarch classic
Options:
-b,--builder <name|pattern>— builder(s) to readrepo/arch/repo_workdirfrom (default: the default builder). Accepts a name, a comma-list,@all, or@host:<host>. Resolution uses the task's branch as the selection branch (see above), so passing@allor many builders is safe — patterns are narrowed to the task's branch rather than grabbing the first one. Builders sharing a host (sameuser@host, differing only by architecture) are merged into one multi-arch repo (repo/<arch>/per builder + a sharedrepo/noarch/); builders on different hosts each get their own repo, kept apart by a host subdirectory under the workdir.--archcannot be combined with multiple builders.--arch <arch>— override the builder's architecture. Must be a known binary architecture;noarchis rejected (it is generated as a separate component automatically).--workdir <dir>— override the repo workdir.--force— remove any previously generated repo for this task before building (a clean rebuild).--compressed— write the compressedpkglist.classic.xzindex instead of the default plainpkglist.classic. Only one is written (apt reads either); the default avoids the xz step and lets apt read the index directly.--clean— remove the generated repo for this task and exit. The task's branch is resolved first here too (the repo's on-disk layout depends on the matching builders), so the task must still be resolvable viatask show.
The produced layout is:
<workdir>/<task_id>/
rpms/<arch>/ downloaded task RPMs
repo/<arch>/RPMS.classic/ symlinks: base ∪ task
repo/<arch>/base/ apt index (pkglist.classic, or .xz with --compressed)
repo/noarch/RPMS.classic/
repo/noarch/base/
aptconf/ ready apt.conf + sources.list + priorities
A ready apt config is written to aptconf/ (the branch's standard apt.conf/priorities template plus a sources.list pointing at the generated repo), so the snapshot can be fed to hasher/apt directly. The generated release files identify the snapshot: Suite/Label are the branch (e.g. p11) and Description is <branch> (<branch source task> plus task <task_id>) (e.g. p11 (416369 plus task 418566)), with MD5Sum/BLAKE2b recomputed over the spliced indices.
The builder's repo must point at a file:// mirror that is local to the machine the build runs on — the base mirror is symlinked into the generated repo, so an http(s):// URL cannot be used as the overlay base.
- Local builder → everything (download, symlinks, indexing) runs on this machine;
repomust be a local mirror here. - Remote builder (
type = remote) → the build runs on the remote host over SSH: the task RPMs are downloaded there and the remote base mirror is symlinked. The spliced index is built locally (reading the remotebase/pkglist.classicover SSH) and shipped back to the remotebase/dir. The generated repo lives under the remoterepo_workdir. The remote host needscurland a local copy of the base mirror.
The package changes come from the task's authoritative plan/bin.list.diff: every + line is added, every - line removed (so additions, version replacements, and deletions are all reflected — a delete-only or noarch-only task is handled). Each component (the target arch and noarch) is a symlink farm of the base packages minus the removed ones plus the added task RPMs; its base/ index is spliced from the base mirror's pkglist plus the task's. If plan/bin.list.diff cannot be fetched (e.g. a very old task) the command aborts. Re-running for the same task rebuilds the farm from scratch.
Only the classic component is overlaid; base mirrors with additional components (e.g. gostcrypto) are not yet included in the snapshot.
The repo workdir is resolved in this order: the --workdir flag, the builder's repo_workdir, then the global [builders] repo_workdir. See configuration for these keys.
Requires xz and b2sum (standard xz/coreutils tools) — genbasedir is no longer needed. A remote builder additionally needs xz and curl on the host.
zoryn task add¶
Add subtask to task. Compatible with ssh gyle task add syntax.
zoryn task add [--before SUBTASK_ID] [--replace] <task_id>[^<subtask_id>|/<subtask_id>] <action> ...
The task argument accepts two optional suffixes (mutually exclusive with --before / --replace):
^<subtask_id>— alias for--before <subtask_id>(insert position)./<subtask_id>— implicit--replacetargeting that exact subtask (skips the auto-find by package name; useful when several subtasks share the same package).
Supported actions:
repo <repo> <tag>— add gear repo subtask.<repo>.git=<tag>— shorthand for repo (for copy-paste fromtask ls).del <pkg>...— mark packages for deletion.rebuild <pkg>...— rebuild packages from repo.copy <pkg> [<from_repo>]— copy pre-built binaries.
Options:
--before SUBTASK_ID— insert the new subtask before the given subtask id. Equivalent to the<task_id>^<subtask_id>positional shorthand.--replace— replace the existing subtask for the same package. Target subtask is derived from the action's package name (matches both the SRPM package name and the gear repo name). Fails if no subtask matches or more than one matches; in the latter case delete the unwanted subtask manually (zoryn task delete <task_id> <subtask_id>) and re-run without--replace. Cannot be combined with multi-packagedelorrebuildactions. When combined with--before, the new subtask is inserted at the user-specified position; if--beforepoints at the subtask being replaced, the system falls back to the next subtask to keep the original position.
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
Replace an existing subtask (e.g. swap a local rebuild for copy from sisyphus):
zoryn task run¶
Queue a task for build. Wraps ssh gyle task run.
zoryn task run [--test-only] [--commit] [--dry-run] [--fail-early] [--fail-late]
[--hurry] [--unhurry] [-m MESSAGE] [TASK_ID] [-d]
If no task ID is specified, the latest task created by the current user is used.
--test-only— stop after test, do not commit.--commit— commit after tests.--dry-run— stop right before queueing.--fail-early— stop building after the first error.--fail-late— do not stop building after the first error.--hurry/--unhurry— enable/disable swift mode.-m MESSAGE— build reason (multi-word messages in quotes).-m -— read build reason from stdin.
zoryn task run # latest task
zoryn task run 123456 # specific task
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 # read message from stdin
zoryn task abort¶
Abort a running task. Wraps ssh gyle task abort.
Task ID supports TAB completion from the current user's task list.
zoryn task approve¶
Approve a task subtask. Wraps ssh gyle task approve.
SUBTASK can be a subtask number, package name, or all to approve every subtask. With all the ssh gyle task approve <id> all call is issued once and gyle picks the existing subtasks itself, so earlier task delsub removals never surface as spurious "subtask not found" errors. A comment message can be provided with -m. If -m is not given and stdin is piped, the message is read from stdin.
zoryn task approve 123456 1 # approve subtask #1
zoryn task approve 123456 php-sphinx -m "LGTM" # approve by package name
zoryn task approve 123456 all # approve all subtasks
zoryn task approve 123456 1 --revoke # revoke approval
echo "Checked" | zoryn task approve 123456 1 # pipe message from stdin
zoryn task disapprove¶
Disapprove a task subtask. Wraps ssh gyle task disapprove. Same usage as approve, including the all behaviour: a single ssh gyle task disapprove <id> all call is issued and gyle iterates over existing subtasks itself.
zoryn task disapprove 123456 1 -m "Needs fixes"
zoryn task disapprove 123456 all -m "FTBFS"
zoryn task disapprove 123456 1 --revoke
zoryn task delete¶
Delete subtask from task by package name or subtask number. Also available as zoryn task delsub (gyle-compatible alias).
zoryn task delete <task_id> <package|subtask> [-d]
zoryn task delsub <task_id> <package|subtask> [-d]
The second argument can be:
4200— subtask number.php-sphinx— package name.php-sphinx.git— package name with.gitsuffix.php-sphinx.git=8.2.30-alt1— package name with tag (for copy-paste fromtask ls).
zoryn task rm¶
Remove a task.
zoryn task genbatch¶
Generate batch config from an existing task.
Reads the task structure and generates a batch config file for rebuilding. See Batch configs for the format.
zoryn task refresh¶
Refresh stale subtasks in a task — pulls in newer package versions from the repo to replace stale ones. By default, compares rebuild subtasks against the task's branch; --from <branch> --types <list> extends to other subtask kinds.
zoryn task refresh <task_id> [--from <branch>] [--types <list>] [--dry-run]
[--run [--test-only|--commit] [-m MESSAGE]]
Options:
<task_id>— task to refresh.--from <branch>— repo branch to compare against (defaults to the task's branch).--types <list>— subtask types to touch (comma-separated). Values:rebuild(default),copy,gear,srpm; plus the shortcutsALL(everything exceptdel) andbuild(=gear,srpm). Required when--fromis given.--dry-run— show what would be refreshed without changing anything. With--run, gyle is still contacted over SSH but the queueing step is a server-side dry-run (task run --dry-run) so no task is enqueued.--run— queue the task for build after the refresh completes. Also runs when no stale subtasks were found, but is skipped (with a warning, exit 1) if any subtask failed to refresh.--test-only— pass--test-onlytotask run. Requires--run.--commit— pass--committotask run. Requires--run. Mutually exclusive with--test-only.-m MESSAGE— build reason forwarded totask run(required by gyle for stable branches). Use-m -to read from stdin. Requires--run.
zoryn task refresh 123456 # refresh rebuild subtasks on same branch
zoryn task refresh 123456 --from sisyphus --types ALL # all kinds from sisyphus
zoryn task refresh 123456 --from sisyphus --types copy # only copy subtasks
zoryn task refresh 123456 --from sisyphus --types ALL --dry-run
zoryn task refresh 123456 --run # refresh, then queue for build
zoryn task refresh 123456 --run --test-only # refresh, then run in test-only mode
zoryn task refresh 123456 --run -m "fix CVE-2026-1234" # refresh, then queue with build reason
zoryn task batch¶
Build a chain of related packages from a batch config.
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]
Reads the package list from the config file and builds each package in order. Useful for maintaining package groups like PHP extensions where all packages share common settings.
Options:
<config>— config name (from~/.config/zoryn/batch/) or path to.conffile.--basedir <dir>— base directory for packages (overrides config, required if not in config).--no-build— skip local build, only commit/tag/push/submit.--create-task— create new task if not found (adds main package automatically).--refresh— refresh packages with local changes (create new tag, push, replace subtask).--dry-run— show what would be done without making changes.--test— local-only test build mode: build packages locally without gitery/gyle interaction.--skip <pkgs>— skip packages (comma-separated names).-b <name>— select builder for local builds.-B <repo>— target repository (default:sisyphus). Multiple repos can be comma-separated.--continue— resume interrupted batch from the last checkpoint.--abort— discard interrupted batch state.--restart— discard old state and start fresh.--allow-overwrite-tag— force-recreate existing local tags during the batch, bypassing the gears/ancestor safety checks (seezoryn submit). Has no effect under--refresh, which always overwrites the local tag. On--continue, the flag's current value always wins over the saved-state value — re-pass it on every resume if you want overwrite to stay enabled.
zoryn task batch php-8.4 # build from ~/.config/.../batch/php-8.4.conf
zoryn task batch ~/configs/mypackages.conf # explicit path
zoryn task batch php-8.4 --basedir ~/packages # override basedir
zoryn task batch php-8.4 --no-build # skip local builds
zoryn task batch php-8.4 --create-task # create task if not found
zoryn task batch php-8.4 --refresh # refresh packages with local changes
zoryn task batch php-8.4 --dry-run # preview
zoryn task batch php-8.4 --test # local-only test build
zoryn task batch php-8.4 --test -b arm-server # test on specific builder
zoryn task batch php-8.4 --skip php-xdebug # skip specific packages
zoryn task batch php-8.4 -B p11 # build to p11
zoryn task batch php-8.4 -B sisyphus,p11,p10 # 3 branches with dependencies
zoryn task batch php-8.4 --continue # resume interrupted batch
zoryn task batch php-8.4 --abort # discard state
zoryn task batch php-8.4 --restart # start fresh
zoryn task rebuild¶
Rebuild packages that depend on a package in an existing task.
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]
Queries the RDB API for packages that have binary dependencies on the specified package, then rebuilds them locally using hasher and adds successful rebuilds to the task.
-b <repo>— target repository (default:sisyphus).--from-log— parse affected packages from FAILED task log instead of the RDB API.-f, --force— force rebuild all packages, ignore existing error logs.--deps-by-pkg <pkg>— query dependencies by package name instead of task ID.--up <basedir>— update packages from upstream instead of rebuilding (see below).--dptype=TYPE— dependency type for RDB query:source,binary(default), orboth.--depth=N— dependency depth for RDB query (1–4, default:1).--skip LIST— skip subtasks by number or package name (comma-separated, e.g.--skip 340,440,vtkaddon).--skip-gyle-done— skip subtasks already built on gyle for the target architecture (only with--all-subtasks).
Builder options (same as zoryn build): --builder=PATTERN, -a/--arch, -B/--build-branch (note: -b is reserved for target repo), -p, -s, --fail-if-busy, --skip-busy.
--from-log searches all available logs (iterations and tries) and finds the last one containing the "ACLs of affected packages" section. For old/deleted tasks, it displays the affected packages list without attempting rebuild.
Update mode (--up)¶
Instead of rebuilding packages from repository, this mode updates each dependent package from upstream:
- Clone package to
<basedir>/<package>if not present (usingzoryn clone). - Fetch and checkout
gears/sisyphusbranch. - Run
zoryn upto update from upstream. - If already up-to-date: add as rebuild subtask.
- If updated: build locally and add as regular subtask.
- On any error: stop immediately and return control to the maintainer.
zoryn task copy¶
Copy task to another repository.
zoryn task copy -B <repo> <task_id> [options]
zoryn task copy --into <target_id> <task_id> [options]
Copies all subtasks from an existing task to a new task in another repository using package names (SRPM names) from the Tasks API. If the source task is not yet completed, the new task will depend on it.
With --into <target_id> the subtasks are appended to the given existing task instead of creating a new one. The target repository is derived from that task (-B is ignored). Dependencies of the existing task are left untouched; if the source task is not DONE, a warning is printed and you must manage dependencies manually.
Why --into?¶
Typical scenarios for appending subtasks to an existing task instead of creating a new one:
- Adding more packages to a task you already prepared. You opened a task in a stable branch, possibly set its build reason, possibly switched its mode (
--commitvs test-only) — you don't want to redo that setup.--into <id>drops the new subtasks straight into it. - Consolidating interdependent packages. A package in another task needs to land together with one already queued in your task (e.g. ABI co-build). Append it via
--intoso both subtasks build inside the same gyle run and resolve each other's dependencies, instead of racing across two separate tasks. - Recovering from a FAILED build without starting over. A FAILED task can have more subtasks added and be re-run.
--into <failed_id>lets you patch the missing piece in place; you still need to re-run the task and the failed subtasks will be rebuilt.
By default, all subtasks from the source task are copied. Use --subtask (repeatable, comma-separated) to copy only the selected ones. The argument accepts the same syntax as zoryn task delete:
- numeric subtask ID —
--subtask 200; - package name —
--subtask php-mbstring; pkg.git=tag—--subtask php-gd.git=php-8.2.31-alt1(copy-paste fromzoryn task ls);- comma-separated combinations —
--subtask php,php-mbstring,200.
TAB completion lists the source task's subtasks (requires the source task ID earlier on the command line). If a filter argument matches nothing, the command prints the available subtasks and exits with a non-zero status.
What does not carry over when subtasks are copied:
- Approvals. Approvals in gyle are per-subtask and tied to the specific subtask object. Copied subtasks are new objects with no approvals — reviewers must re-approve in the target task.
- Build artifacts. Each subtask is rebuilt (or re-fetched via
task add copy) inside the target task. The source task's RPMs are not blindly reused. - Per-subtask metadata (build reasons attached to individual subtasks, comments, manual flags). The target task's own metadata is kept; the source's is dropped.
- Subtask numbering. New subtask IDs are assigned by gyle on
task add. - Source-task dependencies. Dependencies of the existing target task are left untouched (a warning is printed if the source is not DONE — set them with
zoryn task depsif you need them).
Combine with --dry-run to preview which subtasks would be added and how (build / copy / rebuild / delete) before touching the target task. With --rebuild-only / --copy-rebuilds the EVR-comparison prompt is suppressed — handy in non-interactive scripts and batch consolidations.
Target task state is validated up front:
- Rejected:
DONE,SWEPT,EPERM— terminal/dead states that cannot accept new subtasks. - Warned:
BUILDING,COMMITTING,FAILING,PENDING,POSTPONED— gyle may reject add operations. - Accepted:
NEW,AWAITING,TESTED,FAILED.
For rebuild subtasks, compares package EVR (epoch:version-release) between source and target repositories. If EVR differs, asks interactively whether to copy from source or rebuild from target. Use --copy-rebuilds or --rebuild-only to skip the prompt.
-B, --branch <repo>— target repository. Required unless--intois given.--into <task_id>— append subtasks into an existing task instead of creating a new one.-r, --run— run the task after creating it.-c, --commit— auto-commit after successful build (only with--run).--copy-rebuilds— copy from source when EVR differs (don't ask); same EVR is still rebuilt.--rebuild-only— always rebuild from target, even if source has different EVR.-n, --dry-run— preview planned actions without creating a task.<task_id>— source task ID to copy.
zoryn task copy -B p11 404765 # copy to p11 (create only)
zoryn task copy -B p11 --run 404765 # copy and run in test-only mode
zoryn task copy -B p11 --run --commit 404765 # copy, run, and auto-commit
zoryn task copy -B p11 --rebuild-only 404765 # always rebuild from target
zoryn task copy -B p11 --copy-rebuilds 404765 # copy when EVR differs
zoryn task copy -B p11 --dry-run 404765 # preview
zoryn task copy --into 500000 404765 # merge into existing task #500000
zoryn task copy -B p11 --subtask php --subtask 200 404765 # copy only selected subtasks
zoryn task copy -B p11 --subtask php,php-mbstring,200 404765 # comma-separated form
zoryn task test-rebuild¶
Experimental
This command is under active development and may change.
Test-rebuild dependent packages before submitting a task.
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]
Downloads RPMs from a task, identifies dependent packages via RDB, and test-rebuilds each one locally. Verifies that packages build correctly with new dependencies before committing to a task.
<task_id>— task ID to test.--arch <arch>— architectures to test (comma-separated, e.g.x86_64,aarch64).--builder <pattern>— select builders by name or pattern (see Builder Patterns).--package PKG— add a package to the custom rebuild list (repeatable). Skips the automatic RDB dependency query. Accepts: name,name-version,name-version-release, with/without epoch and.rpmsuffix.--packages-file FILE— read package list from file (one per line,#= comment). Combined with--packageif both given.--dptype=TYPE— dependency type for RDB query:source(default),binary, orboth.--depth=N— dependency depth (1–4, default:1).--skip-ftbfs— skip packages that are already FTBFS on beehive.--verify-failures— after main rebuild, rebuild failed packages without task RPMs to distinguish regressions from pre-existing failures.--without-task— skip downloading task RPMs; rebuild dependents against the current branch state without injecting task packages into hasher. Use to establish a pre-task baseline. The<task_id>argument is still required — it is used to query RDB for the list of dependent packages to rebuild. Logs get thebaseline.prefix. Mutually exclusive with--verify-failuresand--local-rpms. When used with--continueor--continue-no-refresh, hasher RPMs are cleared again at the start of each invocation to guarantee a clean baseline state.--continue— continue from previous run, refreshing package list from RDB.--continue-no-refresh— continue from previous run without refreshing.--top— interactive TUI with progress display.-d, --debug— enable debug output.
Task must have a built repository
Without --without-task or --local-rpms, what matters is whether the task actually has a built repository (RPMS.task), not its state. A task that is still building — NEW, AWAITING, PENDING, BUILDING, COMMITTING, FAILING — is rejected up front, because its repository is empty or only partially populated. Terminal states proceed, including FAILED: a failed task often still has a usable (if partial) repository, and test-rebuilding it is a normal workflow. If the task RPMs download empty or incomplete for any requested architecture, the command aborts with an error instead of rebuilding against the clean branch (which would report a false success). DONE warns that the overlay is redundant (the packages are already in the repository); FAILED warns the RPM set may be partial.
When --package / --packages-file is used, zoryn fetches the current version of each package from RDB. If a specified version doesn't match the repository, the package is rebuilt with the current version and a warning is shown. Packages not found in the branch are skipped.
Features:
- Multi-architecture support with parallel execution on multiple builders.
- Automatic RPM download from task by architecture.
- Dependent package detection via RDB.
- Custom package list mode with
--package/--packages-file. - Beehive FTBFS detection — shows which packages already fail to build on beehive.
- Incremental rebuild with
--continue/--continue-no-refresh. - Statistics saved to
rebuild-stats.json. - Host load monitoring to avoid overloading build machines.
- TUI mode with
--top. - Persistent search history: Up/Down or Ctrl+R in log search inputs to recall past patterns.
zoryn task test-rebuild 404809 # basic test on local builder
zoryn task test-rebuild 404809 -b @all --arch=x86_64 # test on all x86_64 builders
zoryn task test-rebuild 404809 --skip-ftbfs # skip packages broken on beehive
zoryn task test-rebuild 404809 --continue # continue interrupted build
zoryn task test-rebuild 404809 -b @all --top # interactive TUI mode
zoryn task test-rebuild 404809 --verify-failures # verify failures are regressions
zoryn task test-rebuild 404809 --without-task # baseline: rebuild without task
zoryn task test-rebuild 404809 --package foo --package bar-1.2.3-alt1 # custom list
zoryn task test-rebuild 404809 --packages-file ~/rebuild-list.txt # from file
Cleanup between tasks¶
Per-task cleanup removes both binary RPMs from {hasher_dir}/repo/{arch}/RPMS.hasher/ and source RPMs from {hasher_dir}/repo/SRPMS.hasher/. Chroot, aptbox, and apt cache directories are reused across tasks (use zoryn builder clean for a full reset). The forked worker also wipes its inherited apt-tmpdir on SIGINT/SIGTERM, so interrupting a long batch no longer leaves stale /tmp/.private/<user>/zoryn.XXXXXXXX/ on the builder.
zoryn task manage¶
Interactive full-screen TUI for browsing and managing build tasks.
zoryn task manage [TASK_ID] [--user NAME] [--state STATE] [--repo REPO]
[--needs-approval GROUP] [--no-color]
Options:
TASK_ID— open a specific task directly (skips task list).--user NAME— filter by user (default: current user,ALLfor all users).--state STATE— filter by task state (e.g.TESTED,FAILED,BUILDING).--repo REPO— filter by target repository (e.g.sisyphus,p11).--needs-approval GROUP— filter tasks needing approval (maintortester).--no-color— disable coloured output (also respectsNO_COLORenv variable).
Features:
- Mutt-style single-panel navigation: task list → task detail → dependencies.
- Approve/disapprove subtasks, run/abort/commit/test-only tasks, toggle share, manage dependencies.
- Disable git/lastchange inheritance checks.
- Create new tasks and add subtasks from within the TUI.
- Search tasks (
/) and subtasks (/on detail screen,n/Nfor next/prev). - Persistent search history: Up/Down or Ctrl+R in log search inputs to recall past patterns.
- Build log and event log viewers with syntax highlighting and word wrap.
- Auto-refresh every 15 seconds, manual refresh with
R/F5. - Filter by state, repo, user, needs-approval — all via hotkeys.
- Read-only mode when SSH is unavailable.
- Full keyboard navigation with mouse wheel support.
- Mouse text selection on any task screen — drag to select a range, double-click to select a word; triple-click on a task list entry's wrapped package block selects every
pkg=versionof that task. Multi-row selections are joined with spaces (no line breaks) and copied to the clipboard on release (OSC 52). A single click on a#NNNid still copies just the digits.
zoryn task manage # open with default filters
zoryn task manage --user ALL # show all users' tasks
zoryn task manage --state TESTED --repo sisyphus # filter by state and repo
zoryn task manage --needs-approval maint # tasks needing maintainer approval
zoryn task manage 410005 # open task #410005 directly
zoryn task manage --no-color # disable colours
Press F1 inside the TUI for a complete keybinding reference.
zoryn task log¶
View build or event logs in the TUI viewer.
zoryn task log <task_id> # event log
zoryn task log <task_id> <subtask> # select architecture
zoryn task log <task_id> <subtask> --arch x86_64 # build log
zoryn task log <task_id> <subtask> --arch x86_64 --srpm # SRPM log
Subtask can be a number or package name (TAB completes from the task):
Options:
--arch <arch>— target architecture (requires subtask).--srpm— viewsrpm.loginstead of main log (requires--arch).--no-color— disable colours in TUI.