diff --git a/docs/source/migrations/migrating_to_1.34.rst b/docs/source/migrations/migrating_to_1.34.rst
new file mode 100644
index 00000000..eb004a15
--- /dev/null
+++ b/docs/source/migrations/migrating_to_1.34.rst
@@ -0,0 +1,22 @@
+Migrating to Koji 1.34
+======================
+
+You should consider the following changes when migrating to 1.34:
+
+DB Updates
+----------
+
+There is a simple schema change adding new index.
+
+As in previous releases, we provide a migration script that updates the database.
+
+::
+
+ # psql koji koji < /usr/share/doc/koji/docs/schema-upgrade-1.33-1.34.sql
+
+
+Other changes
+-------------
+
+There are numerous other changes in 1.34 that should not have a direct impact on migration. For
+details see: :doc:`../release_notes/release_notes_1.34`
diff --git a/docs/source/migrations/migrations.rst b/docs/source/migrations/migrations.rst
index 7b4ba9c7..3f8c8eb1 100644
--- a/docs/source/migrations/migrations.rst
+++ b/docs/source/migrations/migrations.rst
@@ -5,6 +5,7 @@ Migrations
.. toctree::
:maxdepth: 1
+ migrating_to_1.34
migrating_to_1.33
migrating_to_1.32
migrating_to_1.31
diff --git a/docs/source/release_notes/release_notes.rst b/docs/source/release_notes/release_notes.rst
index 5a244c86..b929ef49 100644
--- a/docs/source/release_notes/release_notes.rst
+++ b/docs/source/release_notes/release_notes.rst
@@ -5,6 +5,7 @@ Release Notes
.. toctree::
:maxdepth: 1
+ release_notes_1.34
release_notes_1.33.1
release_notes_1.33
release_notes_1.32.1
diff --git a/docs/source/release_notes/release_notes_1.34.rst b/docs/source/release_notes/release_notes_1.34.rst
new file mode 100644
index 00000000..185c6268
--- /dev/null
+++ b/docs/source/release_notes/release_notes_1.34.rst
@@ -0,0 +1,395 @@
+
+Koji 1.34.0 Release notes
+=========================
+
+All changes can be found in `the roadmap `_.
+Most important changes are listed here.
+
+Check at least :ref:`scheduler ` and :ref:`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
+
+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 for now) can be run with
+``--draft`` option. It is different from scratch build in the way that it is
+1st class build with modified release (containing "-draft-" suffix).
+Nevertheless, this release change is done only on build level. RPMs are using
+original release, so they are indistunguishible from other draft builds for
+same NVR. Such behaviour violates rules that there are no two rpms with the
+same filename. That is the reason, why they are called "draft builds".
+
+To bring them back to uniqueness, such build can be "promoted". In such case it
+is renamed to original release and all other draft builds from given NVR are
+forever forbidden to be promoted.
+
+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.
+
+Draft builds could be viewed as "light namespacing" in koji or "more persistent
+scratch builds".
+
+**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 is the default behaviour 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
diff --git a/koji.spec b/koji.spec
index c973233c..fe7f0e32 100644
--- a/koji.spec
+++ b/koji.spec
@@ -83,7 +83,7 @@
%define release %{baserelease}
%endif
Name: koji
-Version: 1.33.1
+Version: 1.34.0
Release: %{release}%{?dist}
License: LGPL-2.1-only and GPL-2.0-or-later
# the included arch lib from yum's rpmUtils is GPLv2+
@@ -649,6 +649,66 @@ rm -rf $RPM_BUILD_ROOT
%endif
%changelog
+* Wed Jan 10 2024 Tomas Kopecek - 1.34.0-1
+- PR#3537: Switch to WatchedFileHandler for logger
+- PR#3726: fix docstring getTaskInfo
+- PR#3761: doc: More XMLRPC-related docs
+- PR#3772: Scheduler part 1
+- PR#3794: Unify getSessionInfo output
+- PR#3813: list-history: fix [still active] display for edit entries
+- PR#3817: Remove get_sequence_value in 1.34
+- PR#3818: Remove koji.AUTHTYPE_* in 1.34
+- PR#3828: better handling of deleted tags in kojiweb
+- PR#3830: kojira no_repo_effective_age setting
+- PR#3832: fix release notes version
+- PR#3835: explain _ord() method
+- PR#3838: distrepo will not skip rpm stat by default
+- PR#3841: create initial repo for sidetag
+- PR#3842: Don't spawn createrepo if not needed
+- PR#3843: Package migration scripts to koji-hub
+- PR#3850: Inherit group permissions
+- PR#3851: sidetag: extend is_sidetag_owner for untag ops
+- PR#3855: Extend getUser to get user groups
+- PR#3859: Fix user_in_group policy test
+- PR#3861: tox: Don't install coverage every run
+- PR#3865: fix tests/flake8
+- PR#3873: disable use_bootstrap_image if bot requested
+- PR#3876: fix param in createImageBuild docstring
+- PR#3879: Example of how to enable a module via mock.module_setup_commands
+- PR#3882: Sort image rpm components before inserting
+- PR#3884: short option for watch-logs --follow
+- PR#3886: Raise an error on missing build directory
+- PR#3888: kojid: Fix mock_bootstrap_image parameter name in the default config
+- PR#3889: cli: handle hub w/o getKojiVersion in cancel tasks
+- PR#3893: Clean rpm db directory of broken symlinks
+- PR#3894: Sort channels on hosts page
+- PR#3895: hub: new_build: build in error should be the old one
+- PR#3897: Retrieve task_id for older OSBS builds
+- PR#3898: Update Containerfiles
+- PR#3902: queryOpts for queryHistory
+- PR#3904: Update docstring for listPackages
+- PR#3905: More general CG import logging
+- PR#3911: Display two decimal points for the task load in hosts page
+- PR#3913: draft builds
+- PR#3915: cli: fix wait-repo message when missing builds
+- PR#3917: fix tests
+- PR#3920: Move migration script to new location
+- PR#3924: fix return type
+- PR#3927: more getSessionInfo updates
+- PR#3929: Read config file on image build indirection
+- PR#3935: fix task_id extraction for missing extra
+- PR#3938: Update the CERN koji description
+- PR#3940: Remove six.configparser.SafeConfingParser from tests
+- PR#3946: fix flake8 errors
+- PR#3948: fix arg passing in exclusiveSession
+- PR#3949: docstring typo
+- PR#3957: Fix test
+- PR#3960: cli: [list-permissions] backward compatibility for getUserPermsInheritance call
+- PR#3965: Fix unittests for python-mock-5.x
+- PR#3977: handle new task refs in clean_scratch_tasks
+- PR#3980: task assign overrides
+- PR#3983: test_cg_importer.py: avoid creating temp files in checkout
+
* Tue Jul 11 2023 Tomas Kopecek - 1.33.1-1
- PR#3834: wait with writing timestamps after results dir is created
- PR#3836: add support for sw_64 and loongarch64
diff --git a/koji/_version.py b/koji/_version.py
index 66918541..d2a9984b 100644
--- a/koji/_version.py
+++ b/koji/_version.py
@@ -1,2 +1,2 @@
-__version_info__ = (1, 33, 1)
+__version_info__ = (1, 34, 0)
__version__ = '.'.join([str(x) for x in __version_info__])