Koji 1.20.0 Release notes
=========================

Announcement: We're going to drop python 2 support for hub and web in
koji 1.22. Please, prepare yourself for deploying python 3 versions of
these. Both are already supported and this is the next step in
retiring python 2 codebase.

All changes can be found at `pagure <https://pagure.io/koji/roadmap/1.20/>`_.
Most important changes are listed here.

Migrating from Koji 1.19
------------------------

For details on migrating see :doc:`../migrations/migrating_to_1.20`

Security Fixes
--------------
None

Client Changes
--------------
**Add basic zchunk support for dist-repo**

| PR: https://pagure.io/koji/pull-request/1743

Fixes: https://pagure.io/koji/issue/1198

The ``dist-repo`` supports new options ``--zck``, which enables createrepo's
zchunk generation, and ``--zck-dict-dir``, which indicates the directory
the builder that contains zchunk dictionaries to use.

**Add repo waiting options to the build command**

| PR: https://pagure.io/koji/pull-request/1626
| PR: https://pagure.io/koji/pull-request/1889

New options ``--wait-build`` and ``--wait-repo`` for the ``build`` command
cause the build to wait for a repo regeneration.
This is similar to using ``wait-repo`` + ``build`` in succession, except
that the repo monitoring is handled in the build task itself.

**Remove title option for livemedia-creator**

| PR: https://pagure.io/koji/pull-request/1781

livemedia-creator dropped ``--title`` option, so we are.

**Add --disabled option to list-hosts command**

| PR: https://pagure.io/koji/pull-request/1738

This option is simply an alias for the existing ``--not-enabled`` option.

**Unify return values for permission denied**

| PR: https://pagure.io/koji/pull-request/1785

Some places were using ``print`` + ``return 1``, some `parser.error` calls.
Let's unify it to ``parser.error``.

Library Changes
---------------
**Raise error when we have not configuration**

| PR: https://pagure.io/koji/pull-request/1767
| PR: https://pagure.io/koji/pull-request/1787

Previously, Koji would proceed with only the coded defaults,
which is no longer sensible.

**Sanity check on remotely opened RPMs**

| PR: https://pagure.io/koji/pull-request/1829

Sometimes RPMs are not downloaded correctly into buildroot and it results in
weird errors. A simple check was added to detect corruption of downloaded files.

**Include profile name in parsed config options**

| PR: https://pagure.io/koji/pull-request/1525

Fix behaviour to be in line with docs examples.

**Make rpm import optional in koji/__init__.py**

| PR: https://pagure.io/koji/pull-request/1773
| PR: https://pagure.io/koji/pull-request/1795

``koji/__init__.py`` is being used more and more often in virtualenv. As rpm is
always the pain here and most users don't need those specific functions, we can
make it optional (and require only on spec level). Distribution via PyPi will be
less painful.


API Changes
-----------

**Default krb_princs value changed to True in getUser**

| PR: https://pagure.io/koji/pull-request/1872

This argument was added in PR #1648, with a default value of ``False``.  It is
used to control whether the ``krb_principals`` field is included in the result of
``getUser``.

**Drop buildMap API call**

| PR: https://pagure.io/koji/pull-request/1755

It was designed for GC, but it is not used anymore.

**New addArchiveType API call**

| PR: https://pagure.io/koji/pull-request/1149

Adds a new hub method for inserting new archivetype records.

**Raise GenericError on existing build reservation in in CGInitBuild**

| PR: https://pagure.io/koji/pull-request/1893

Previously a database exception was propagated. Now, it is raising a more informative
exception.


Web UI Changes
--------------
**Browsable api**

| PR: https://pagure.io/koji/pull-request/1821

The web ui now offers API introspection similar to the ``koji list-api`` command.

**Cluster health info page**

| PR: https://pagure.io/koji/pull-request/1551

New web page showing current usage of build cluster.

**Show build link(s) on buildContainer task page**

| PR: https://pagure.io/koji/pull-request/284

This is a temporary solution to the problem of connecting the builds and tasks
generated by the
`containerbuild plugin <https://github.com/containerbuildsystem/koji-containerbuild>`.

**Human-friendly file sizes in taskinfo page**

| PR: https://pagure.io/koji/pull-request/1820


Builder Changes
---------------

**Provide for passing credentials to SRPMfromSCM**

| PR: https://pagure.io/koji/pull-request/1640

Builder's conf can now contain ``scm_credentials_dir`` option, where can be
stored authentication certificates or other data for use inside the mock when
building SRPMs for fetching data from authenticated SCMs.

**Log kernel version used for buildroot**

| PR: https://pagure.io/koji/pull-request/821
| PR: https://pagure.io/koji/pull-request/1850

**Use --update for dist-repos if possible**

| PR: https://pagure.io/koji/pull-request/1037

Improves speed of new distrepos.

**Don't send notifications in case of deleted tag**

| PR: https://pagure.io/koji/pull-request/1380

In some cases (sidetags) tag can be deleted before untag notifications are sent,
so don't send them if tag is already deleted.

**Check existence of maven symlink**

| PR: https://pagure.io/koji/pull-request/1742

In recent Fedora's maven is alternatives symlink. Original check now failed even
if maven was installed.


System Changes
--------------

**QueryProcessor: fix countOnly for group sql**

| PR: https://pagure.io/koji/pull-request/1845

WebUI returned an error on Users tab after multiple kerberos realms per user
were introduced.

**Limit distRepo tasks per tag**

| PR: https://pagure.io/koji/pull-request/1869
| PR: https://pagure.io/koji/pull-request/1912

Introduces ``distrepo.cancel_others`` extra flag for tags. If enabled, new
distRepo task will cancel previous non-finished ones leaving only new one.

**Fix CGRefundBuild to release build properly**
| PR: https://pagure.io/koji/pull-request/1853

Fixes for refunding failed/cancelled build.

**Use BulkInsertProcessor for hub mass inserts**

| PR: https://pagure.io/koji/pull-request/1714
| PR: https://pagure.io/koji/pull-request/1847

Speed up mass inserts.

**Use comma delimiter for allowed_methods**

| PR: https://pagure.io/koji/pull-request/1745

The ``allowed_methods`` configuration option for the ``save_failed_tree`` plugin
now expects comma-separated values, as the example config indicates.

**Fix issue with listing users and old versions of Postgres**

| PR: https://pagure.io/koji/pull-request/1751

Utilities Changes
-----------------
**Add koji-gc/kojira/koji-shadow to setup.py**

| PR: https://pagure.io/koji/pull-request/1428

Koji utilities are now installlable from PyPi.

Garbage Collector
.................
**Speedup untagging/moving to trashcan**

| PR: https://pagure.io/koji/pull-request/1873

Rewrite of how koji-gc handles untagging. Multicalls are used now and some
speedup of related API calls is also included.

DB Sweeper
..........
**New options to clean database**

| PR: https://pagure.io/koji/pull-request/1824

Last release introduced new tool ``koji-sweep-db`` which is used to clean the
database. Few new options were added now like cleaning scratch builds, CG
reservations, notification tasks or unused buildroots.

Note, that these new features are more technical preview. You need to use
``--force`` flag to run them for a good reason. They can a) take insane time to
finish b) remove data you never wanted to delete.  Always test these commands in
safe environment, before running them in production.

Cleaning sessions and reservations are still safe and they are primary goals of
the script.

Kojikamid
.........
**A few fixes for kojikamid**

| PR: https://pagure.io/koji/pull-request/1837

kojikamid (the daemon that runs in VMs) needs a few updates to be consistent
with changes to the the Koji data model, and Python 3 compatibility.

Documentation Changes
---------------------
Lot of documentation was added in last release in API and also in docs pages.


**Documentation**

| PR: https://pagure.io/koji/pull-request/1716
| PR: https://pagure.io/koji/pull-request/1794
| PR: https://pagure.io/koji/pull-request/1801
| PR: https://pagure.io/koji/pull-request/1802
| PR: https://pagure.io/koji/pull-request/1803
| PR: https://pagure.io/koji/pull-request/1804
| PR: https://pagure.io/koji/pull-request/1805
| PR: https://pagure.io/koji/pull-request/1806
| PR: https://pagure.io/koji/pull-request/1817
| PR: https://pagure.io/koji/pull-request/1823
| PR: https://pagure.io/koji/pull-request/1875
| PR: https://pagure.io/koji/pull-request/1917

**API**

| PR: https://pagure.io/koji/pull-request/1799
| PR: https://pagure.io/koji/pull-request/1832
| PR: https://pagure.io/koji/pull-request/1868

**CLI**

| PR: https://pagure.io/koji/pull-request/1775
| PR: https://pagure.io/koji/pull-request/1918
