Skip to content
zoryn/ maintainer-assistant

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.orgrider).

zoryn task new

Create a new task in a binary repository. Wraps ssh gyle task new.

zoryn task new <REPO>

Prints the new task ID on success.

zoryn task new sisyphus
zoryn task new p11

zoryn task show

Show detailed information about a build task.

zoryn task show [--brief] [--json] [TASK_ID] [-d]

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; ALL for everyone).
  • -a / --all — alias for --user ALL.
  • --test-only — show only test-only tasks.
  • --needs-approval <ROLE> — filter tasks needing approval from maint or tester.
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.

zoryn task download <package|task_id> [-b repo] [--arch arch] [-o dir] [-d]

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: from hsh --printenv, or x86_64 with -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 add

Add subtask to task. Compatible with ssh gyle task add syntax.

zoryn task add [--before SUBTASK_ID] <task_id> <action> ...

Supported actions:

  • repo <repo> <tag> — add gear repo subtask.
  • <repo>.git=<tag> — shorthand for repo (for copy-paste from task ls).
  • del <pkg>... — mark packages for deletion.
  • rebuild <pkg>... — rebuild packages from repo.
  • copy <pkg> [<from_repo>] — copy pre-built binaries.
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 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.

zoryn task abort TASK_ID [-d]

Task ID supports TAB completion from the current user's task list.

zoryn task approve

Approve a task subtask. Wraps ssh gyle task approve.

zoryn task approve TASK_ID SUBTASK [--revoke] [-m MESSAGE] [-d]

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 TASK_ID SUBTASK [--revoke] [-m MESSAGE] [-d]
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 .git suffix.
  • php-sphinx.git=8.2.30-alt1 — package name with tag (for copy-paste from task ls).

zoryn task rm

Remove a task.

zoryn task rm <TASK_ID>

zoryn task genbatch

Generate batch config from an existing task.

zoryn task genbatch <task_id> [--output file] [--main pkg]

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]

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 shortcuts ALL (everything except del) and build (= gear,srpm). Required when --from is given.
  • --dry-run — show what would be refreshed without changing anything.
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 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] [-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 .conf file.
  • --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.
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 (default), binary, or both.
  • --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:

  1. Clone package to <basedir>/<package> if not present (using zoryn clone).
  2. Fetch and checkout gears/sisyphus branch.
  3. Run zoryn up to update from upstream.
  4. If already up-to-date: add as rebuild subtask.
  5. If updated: build locally and add as regular subtask.
  6. On any error: stop immediately and return control to the maintainer.
zoryn task rebuild 404809 --up ~/packages

zoryn task copy

Copy task to another repository.

zoryn task copy -B <repo> <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.

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).
  • -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 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]
    [--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 .rpm suffix.
  • --packages-file FILE — read package list from file (one per line, # = comment). Combined with --package if both given.
  • --dptype=TYPE — dependency type for RDB query: source (default), binary, or both.
  • --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.
  • --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.

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 --package foo --package bar-1.2.3-alt1  # custom list
zoryn task test-rebuild 404809 --packages-file ~/rebuild-list.txt      # from file

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, ALL for 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 (maint or tester).
  • --no-color — disable coloured output (also respects NO_COLOR env 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/N for 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=version of 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 #NNN id 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):

zoryn task log 410005 3                                     # by subtask number
zoryn task log 410005 php-jpgraph                           # by package name

Options:

  • --arch <arch> — target architecture (requires subtask).
  • --srpm — view srpm.log instead of main log (requires --arch).
  • --no-color — disable colours in TUI.