This document describes how to release Apache Kafka from trunk. 

It is a work in progress and should be refined by the Release Manager (RM) as they come across aspects of the release process not yet documented here.

NOTE: For the purpose of illustration, this document assumes that the version being released is 0.10.0.0 and the following development version will become 0.10.1.0.


Prerequisites

Hey folks,

I'd like to volunteer to be the release manager for a bug fix release of the
{{3.5 CHANGE ME!}} line. This will be the first bug fix release of this line and will be
version {{3.5.1 CHANGE ME!}}.


If no one has any objections, I will send out a release plan on {{DD-MM-YYYY}} that includes a list of all of the fixes we are targeting for
{{3.5.1 CHANGE ME!}} along with a timeline.

Thanks!


Host *.apache.org
IdentityFile ~/.ssh/<apache-ssh-key>

Cut Branches

Skip this section if you are releasing a bug fix version (e.g. 2.2.1).

Monitor Tests

In between the branch cut and the RC cut, it's good to set up and keep an eye on the tests.
At the time of RC publishing, you will be asked to ensure you get a green run of integration tests & system tests. Due to flakes, this isn't always possible - so it's necessary to triage the tests & recognize what are flakes.

The earlier you do this, the easier it'll be later - hence this paragraph suggests you set them up now after the branch cut & start monitoring.


Create Release Artifacts

Create Docker Artifact (For versions >= 3.7.0)

Website update process

Note: Unlike the Kafka sources (kafka repo), the content of the Apache Kafka website kafka.apache.org is backed by a separate git repository (kafka-site repo). Today, any changes to the content and docs must be kept manually in sync between the two repositories.

We should improve the release script to include these steps. In the meantime, for new releases:

Blog Post

Announce the RC

If need to roll a new RC

Update the Collaborators List

While waiting for the vote to pass, this is a good time to update the Collaborators (see https://github.com/apache/kafka-site/pull/510 for reference until the site update is published).

The process is documented in . If we complete that ticket, we can remove this step from the release process.

After the vote passes

For feature releases, publish the blog post previously shared with the dev list.

After release

After releasing the new version, we need to update the versions in the following files.

Here are some example PRs that update these files

It may also be worth tackling the compatibility/upgrade system tests as mentioned above.

Please file Jira tickets to remind teams to update their system tests (eg https://issues.apache.org/jira/browse/KAFKA-15672 – similar for others)

Useful Commands

Find all contributors for a release

# The commands below assume that new version is 3.5.1 and last version is 3.5.

## set variables

CURRENT_RELEASE_TAG=3.5.1
OLD_RELEASE_TAG=3.5.0

## get list of contributors (commit authors and co-authors) sorted in alphabetical order and separated by comma

git shortlog -sn --group=author --group=trailer:co-authored-by --group=trailer:Reviewers --no-merges ${OLD_RELEASE_TAG}..${CURRENT_RELEASE_TAG} | cut -f2 | sort --ignore-case | uniq | sed -e ':a' -e '$!N;s/\n/, /;ta' -e 's/,$//' -e 's/%$//'

## get count of list of unique contributors

git shortlog -sn --group=author --group=trailer:co-authored-by --group=trailer:Reviewers --no-merges ${OLD_RELEASE_TAG}..${CURRENT_RELEASE_TAG} | cut -f2 | sort --ignore-case | uniq | wc -l