Koji 1.24.0 Release notes

All changes can be found at pagure. Most important changes are listed here.

Migrating from Koji 1.23/1.23.1

For details on migrating see Migrating to Koji 1.24

Security Fixes


Client Changes

support download-build --type=remote-sources

This wasn’t possible via CLI before. The command has been extended for downloading this additional artifact type.

hide import-sig --write option

This option is not used anymore. We’re hiding it from the user.

return error if add/remove-tag-inheritance can’t be applied

Previously only a warning was printed but return code implied no problems. Now it is returning an error-code so it has better problem visibility in scripts.

raise NotImplementedError with btype name

More verbose error when downloading unsupported archives.

list-tasks --after/--before/--all

New options for list-tasks. Formerly only running tasks could be displayed. Now closed tasks can also be displayed with --all and --after/--before options. Use it wisely – querying all tasks can hurt the hub’s performance.

list-hosts can display description/comment

The new --comment and --description options can be used to display additional info in host list.

allow removal of unused external repo even with --alltags

Fixed confusing behaviour for koji remove-external-repo --alltags when the given external repo is not associated with any tags.

history query by extra key

The additional filter option --xkey for list-history limits the results to history records that affected the given extra key for some tag.

Library Changes

better print with debug_xmlrpc

This fixes an unfortunate display bug introduced by the python3 migration. The --debug-xmlrpc feature shows details of the xmlrpc calls to the hub, but most of the data was shown base64-encoded, regardless of whether it was printable. Now the client will only result to base64 when it is necessary.

API Changes

readFullInheritance stops/jumps deprecation

Deprecation of unused options.

fix nightly getNextRelease format

Additional format allowed for getNextRelease - {str}.{str}.{id}.

[listBuilds] add nvr glob pattern support

The list-builds command now accepts a --pattern option that filters the NVRs using the given glob pattern.

The underlying listBuilds api call on the hub now accepts a pattern argument that applies the filtration.

Builder Changes

Add option to use repos from kickstart for livemedia builds

The new --ksrepo option tells the builder to not override the repos given in the kickstart files for livemedia builds.

Add nomacboot option for spin-livemedia

The new --nomacboot option is passed through to livemedia-creator.

System Changes

make policy test thread safe

spec: pythonic provides

Spec file now provides python3dist(koji) provides.

requires python[23]-requests-gssapi for rhel[78]

explicit encoding for text file operations

In some mod_wsgi configurations, the hub can raise an error because of non-default encoding when opening text files. The code has been modified to force UTF-8 everywhere.

Lower default multicall batch values

In high-load environments long-running transactions can lead even to db deadlocks. We suggest using lower batches for multicalls and have lowered the default batch sizes we currently have in the code.

If individual multicalls are running longer than a minute or two, we recommend splitting them into smaller batches.

require gssapi-requests 1.22

Older versions of library have a bug which breaks the gsaapi login for builders. Upgrading to this version solves the problem.

limit CGImport to allow only one CG per import

We’ve found that nobody is using the option to include multiple CGs output in one CG import. It makes things easier if we limit it directly to one CG per import. In such case we know which CG generated which build and policies can work with this value, etc.

external repos can have specified arch list

Some external repositories can have split architectures (e.g. primary architectures in one repo and secondary in the second). On the other hand tags expect that external repo has all the architectures as the tag has. We’ve added a new option to tell Koji that an external repo only contains a subset of tag’s architectures. Multiple external repos with different architectures can then be attached to the tag. This behaviour can be tuned by --arches option in add-external-repo and edit-external-repo commands.

remove deprecated --ca option

Formerly deprecated --ca option is finally removed for all executables.


return correct content-length

Regressions for py3 code - Content-Length header was erroneously computed so some browsers fetched incomplete page. It is not visible in most cases (as final html tags are corrupted and added by the browser) but in some cases it could led to broken web page.

order methods by name in select box

With growing number of task types it makes more sense to order them alphabetically these days compared to previous importance ordering.

more accessible task colors/icons

For higher accessibility we’ve slightly changed the colors corresponding to task and build states. We’ve also added more informative icons to the taskinfo page.

display VCS/DistURL rpm tags

The buildinfo and rpminfo pages now display also VCS and DistURL tags if they are present in rpm (srpm for buildinfo page).


handle plugins and generator results in count and countAndFilterResults

These functions couldn’t be used for methods provided by plugins or methods which returned generators. This is now fixed.

plugin hooks for repo modification

New postCreateRepo and postCreateDistRepo plugin hooks were introduced on builder. They can be used to modify repodata with intent to allow sign the repodata by plugins but it can be used for additional repodata modification.



move checkTasks near its usage

We’ve moved checking running newRepo tasks to different place. Now, the number of running tasks should be closer to set capacity as kojira will check finished tasks just before spawning new ones.


mention the final destination for new dist-repos

link to tag2distrepo hub plugin

types param for content generators

remove global SSLVerifyClient option