Koji 1.34.0 Release notes
=========================

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

Check at least :ref:`scheduler <scheduler>` and :ref:`draft builds <draft-builds>` as the crucial changes
in this release.


Migrating from Koji 1.33/1.33.1
-------------------------------

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


Security Fixes
--------------

None


Client Changes
--------------
**Fix [still active] display for edit entries**

Not all active settings were correctly marked in ``list-history`` output.

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

**Streamline python/json options in call command**

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

Coherent usage of ``--json/--json-input/--json-output`` options.

**Handle hub w/o getKojiVersion in cancel tasks**

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

Don't fail ``cancel`` command when used against old koji server.

**Fix wait-repo message when missing builds**

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

Clarify message.

**list-permissions: backward compatibility for getUserPermsInheritance call**

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

**Read config file on image build indirection**

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

Option ``--config`` was already there, but it was doing nothing. Now, user
can pass all the options via config file similarly to the "classical" image build.

API Changes
-----------
**Unify getSessionInfo output**

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

Different fields were returned when ``getSessionInfo`` was called with
``details=True``. Now, same base fields are returned in both cases.

**Remove koji.AUTHTYPE_* in 1.34**

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

These constants were deprecated while ago, use ``koji.AUTHTYPES`` enum instead.

**Extend getUser to get user groups**

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

Additional ``groups`` option to get info about user's group membership.


**Short option for watch-logs --follow**

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

Added ``-f`` as an alias for ``--follow``.


System Changes
--------------
.. _scheduler:

**Scheduler part 1**

| PR: https://pagure.io/koji/pull-request/3772
| PR: https://pagure.io/koji/pull-request/3977
| PR: https://pagure.io/koji/pull-request/3980

Biggest change in this release. We're rewriting scheduler to allow better
utilization of builders and to have better control about what is built where
and when. This is the first part of the changes and it moves scheduling
responsibilities from builder to hub and unified queue.

This phase is transparent to administrators and users (even older builders are
provided "fake" API, so they can benefit from new hub code without noticing).
Two new CLI commands ``scheduler-info`` and ``scheduler-logs`` can be used to
gain insights to scheduler state.

Also there are some new options for hub to modify scheduler behaviour and
``koji-sweep-db`` is updated, so it can clean old scheduler logs.

In the next phase there should be added multi-target policies, concept of
builder resources, etc. which would allow fine-tuning of build requests. Crude
channels' logic then could be replaced by scheduler hints and hard limits for
selecting right builder.
  
**Remove get_sequence_value in 1.34**

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

Deprecated ``get_sequence_value`` was finally removed. This could be of some
interest to plugin developers.

**Add support for sw_64 and loongarch64**

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

Simple extension to support these architectures.

**Don't spawn createrepo if not needed**

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

Performance improvement in some cases where it is not needed to rerun
createrepo when creating new tag (typically sidetag or some build tag which
doesn't modify its inherited content). Simple copy of the original repodata is
correct here.

**Package migration scripts to koji-hub**

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

Previously, these scripts were packaged with basic lib. It doesn't make much
sense, so they were moved to hub subpackage. You can find them now in
``/usr/share/koji`` there.

**Inherit group permissions**

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

Intuitive understanding of group membership is to inherit everything what is
accessible via group inheritance.

**Fix user_in_group policy test**

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

Bugfix of regression.

**Disable use_bootstrap_image if not requested**

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

Mock's default behaviour changed to have this setting on by default. So, we've
extended our flag to allow also disabling this.

**new_build: build in error should be the old one**

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

Error message was fixed to show correct data.

.. _draft-builds:

**Draft builds**

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

Another big change in this release. Builds (rpm only for now) can be run with
``--draft`` option to mark it as a draft.

Draft builds should not be confused with scratch builds. Scratch builds are
simply stored as files and cannot be tagged in Koji. Draft builds, on the other
hand, are actual builds with a modified release value and the ``draft`` flag
set to True. Koji appends a draft suffix of ``,draft{build_id}`` to the release
for the build entry. This allows building multiple drafts for the same NVR.

This release change is done only on the build level. The RPM components of the
build are not modified when creating a draft build. The system will now allow
overlapping rpm NVRA values, but only for draft builds.

Draft builds can be "promoted" to non-draft using the ``promote-build`` cli
command. The promoted build is renamed to remove the draft suffix. The original
file path is replaced with a symlink to the new location.
This is a one-time transition, i.e. builds cannot be "unpromoted".
Only one draft build for a given NVR can be promoted, and once Koji has a
non-draft build for a given NVR, further draft builds for that NVR are blocked.

Typical use would be PR/MR workflow. There could be many "candidate" draft
builds and only one which will pass testing and/or other workflows will be
promoted in the end as "real" build which can be used for distribution.

Handling of when/where draft builds can be used (e.g. in some buildroots but
not in the others) is done by ``is_draft`` policy test.

**Retrieve task_id for older OSBS builds**

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

It is hidden for regular usecases, but improves policy behaviour, e.g. that
`volume` policy can handle builds based on CG, etc.

**Raise an error on missing build directory (setBuildVolume)**

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

Better error reporting in case of missing build directories.

**More general CG import logging**

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

Fixes race condition when creating CG log.

**queryOpts for queryHistory**

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

Adding support for standard ``queryOpts`` to this call.

**fix task_id extraction for missing extra**

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

OSBS task now pass correct task data to volume policy

Builder Changes
---------------
**Switch to WatchedFileHandler for logger**

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

Logrotate sometimes caused that kojid/kojira output was appended to already
rotated (even deleted) file. Change to ``WatchedFileHandler`` will ensure that
correct file is used.

**Wait with writing timestamps after results dir is created**

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

``log_timestamps`` feature in some cases tried to write logs into directory
which hasn't existed yet causing build to fail from unrelated reasons.

**distrepo will not skip rpm stat by default**

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

Reusing repodata with distrepo is dangerous as rpms could be signed with
different keys. So, now the default behaviour is to always stat rpms to be sure
that they don't differ from cached metadata. This behaviour can be overriden by
``--skip-stat`` CLI option. Note that you've to be sure what you're doing in
such case (typically you don't care about signatures in this repo).

**Clean rpm db directory of broken symlinks**

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

(At least) Fedora is moving rpm database directory. We've previously checked
existence of ``.migrated`` file but it is not enough in some transient
environments. Host rpm and buildroot rpm could handle these directories
differently resulting in bogus files preventing one of these to work. So, this
"hack" is cleaning up potentially broken files.


Kojira
------
**kojira no_repo_effective_age setting**

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

New build tags (without repos) were not prioritized by kojira in best way.
Kojira assumed that this tag was never used, so it had very low priority. New
setting allows to set default "last use" value to improve the situation.


Web UI
------
**Better handling of deleted tags in kojiweb**

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

Display deleted tags properly on all web pages.

**Fix duplicate build link on CG taskinfo page**

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

Multiple ways how to store CG's ``task_id`` led to situation when task was
displayed twice.

**Display two decimal points for the task load in hosts page**

| PRL https://pagure.io/koji/pull-request/3911

Some floats were too long, stripped to two digits.

**Sort channels on hosts page**

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

More readability in selectors.

Plugins
-------
**create initial repo for sidetag**

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

``trigger_new_repo`` is new setting for sidetag plugin. When it is set to true,
it will trigger ``newRepo`` task as part of new sidetag creation. If it is not
set, old way (leave it on kojira) is used.

**sidetag: extend is_sidetag_owner for untag ops**

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

``is_sidetag_owner`` policy has now ``tag/fromtag/both`` optional keywords for
tag specification.

**kiwi: Sort image rpm components before inserting**

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

There is a potential db deadlock which is avoided by this reordering.


Documentation
-------------
**Fix docstring getTaskInfo**

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

**More XMLRPC-related docs**

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

**Fix release notes version**

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

**Explain _ord() method**

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

**readTaggedRPMS/Builds API documentation**

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

**Fix param in createImageBuild docstring**

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

**Example of how to enable a module via mock.module_setup_commands**

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

**Update docstring for listPackages**

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

**Fix return type (chainBuild)**

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

Devtools and tests
------------------
**Basic vim syntax highlighting for hub policy**

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

It can be used for editing hub policies. As it has no rigorous syntax it
doesn't work in 100%.

**Tox: Don't install coverage every run**

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

A bit of performance improvement for running tests.

**Fix tests/flake8**

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

**Update Containerfiles**

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

Updated to current Fedoras