Skip to content
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
78 changes: 18 additions & 60 deletions tools/RELEASE.md
Original file line number Diff line number Diff line change
Expand Up @@ -166,7 +166,13 @@ reviewed by team mates, perform one or more CANDIDATE ITERATION, and then do a
final RELEASE ITERATION.


### 5.1. Create a tag
### 5.1. Push the RC branch

Push your branch:
$ git push origin v0.11.4rc


### 5.2. Create a tag

Packaging is fragile and is only triggered when a tag is pushed. To avoid
finding out about packaging problems on the RC tag, it is strongly recommended
Expand All @@ -179,49 +185,17 @@ be removed after the build passes.
That is to say that while the librdkafka RC is named `v0.11.4-RC3`
a Python client RC with the same version is named `v0.11.4rc3`.

**TEST ITERATION**:

# Repeat with new tags until all build issues are solved.
$ git tag v0.11.4rc1-dev2

# Delete any previous test tag you've created.
$ git tag tag -d v0.11.4rc1-dev1


**CANDIDATE ITERATION**:

$ git tag v0.11.4rc1


**RELEASE ITERATION**:

$ git tag v0.11.4



### 5.2. Push tag and commits

Perform a dry-run push first to make sure the correct branch and only our tag
is pushed.

$ git push --dry-run --tags origin v0.11.4rc # tags and branch

An alternative is to push branch and tags separately:

$ git push --dry-run origin v0.11.4rc # the branch
$ git push --dry-run origin v0.11.4rc1 # the tag


Verify that the output corresponds to what you actually wanted to push;
the correct branch and tag, etc.

Remove `--dry-run` when you're happy with the results.
Use the [Semaphore CI tag-release task](https://semaphore.ci.confluent.io/projects/clients-releases/schedulers/30e1eb9a-91de-43a4-a8de-be4f3de5a3b6) to create tags. Set the parameter accordingly:
- **PROJECT**: confluent-kafka-python
- **GIT_REF**: name of your RC branch (`v0.11.4rc` in this tutorial)
- **TAG_NAME**: name of the new tag (`v0.11.4rc1-dev1`, for example)
- You can do a test run (set **dry_run** to true) to verify the output before proceeding with the actual tag creation (set **dry_run** to true).
Copy link

Copilot AI Nov 7, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The phrase 'set dry_run to true' is repeated twice in the same sentence. This appears to be a copy-paste error. Consider revising to: 'You can do a test run (set dry_run to true) to verify the output before proceeding with the actual tag creation (set dry_run to false).'

Suggested change
- You can do a test run (set **dry_run** to true) to verify the output before proceeding with the actual tag creation (set **dry_run** to true).
- You can do a test run (set **dry_run** to true) to verify the output before proceeding with the actual tag creation (set **dry_run** to false).

Copilot uses AI. Check for mistakes.


### 5.3. Wait for CI builds to complete

Monitor Semaphore CI builds by looking at the *tag* build at
[Semaphore CI](https://confluentinc.semaphoreci.com/projects/confluent-kafka-python)
[Semaphore CI](https://semaphore.ci.confluent.io/projects/confluent-kafka-python)

CI jobs are flaky and may fail temporarily. If you see a temporary build error,
e.g., a timeout, restart the specific job.
Expand All @@ -232,11 +206,11 @@ and push a new test tag. Don't forget to delete your previous test tag.

### 5.4. Download build artifacts

When all CI builds are successful it is time to download the resulting
artifacts from build's Artifact directory located in another tab in the build:
When all CI builds are successful it is time to download all the resulting
artifacts (wheels) from build's `artifacts` directory (located in the `Artifacts` tab in the build).

Create a new folder `tools\dl-<tag>` under the repository root, and unzip all artifacts from the downloaded .tgz files there. You should have many artifacts (with .whl suffix) under `tools\dl-<tag>` as we support different operating systems and Python versions.
Copy link

Copilot AI Nov 7, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

[nitpick] The path separator uses backslashes (tools\dl-<tag>), which are Windows-specific. For cross-platform documentation, consider using forward slashes (tools/dl-<tag>) or explicitly noting the platform-specific path format.

Suggested change
Create a new folder `tools\dl-<tag>` under the repository root, and unzip all artifacts from the downloaded .tgz files there. You should have many artifacts (with .whl suffix) under `tools\dl-<tag>` as we support different operating systems and Python versions.
Create a new folder `tools/dl-<tag>` under the repository root, and unzip all artifacts from the downloaded .tgz files there. You should have many artifacts (with .whl suffix) under `tools/dl-<tag>` as we support different operating systems and Python versions.

Copilot uses AI. Check for mistakes.

**Note:** The artifacts should be extracted in the folder `tools\dl-<tag>` for
subsequent steps to work properly.

### 5.5. Verify packages

Expand All @@ -253,7 +227,6 @@ the git history to look tidy, remove any test tags, and then go back to
5.1 and perform the CANDIDATE ITERATION.



Copy link
Contributor

@MSeal MSeal Nov 8, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Can we add the pip install -i https://test.pypi.org/simple/ "confluent-kafka==<RELEASE.VERSION>" pip install --no-binary "confluent-kafka" -i https://test.pypi.org/simple/ "confluent-kafka==<RELEASE.VERSION>" to the verify section here. We've had two releases recently where the source install path got messed up by typo and didn't get caught that this ensures is checked. You'll need to note that on OSX you need the lib and bin path for librdkafka set as indicated earlier in the readme

### 5.5.2. Create PR

**CANDIDATE ITERATION:**
Expand Down Expand Up @@ -365,27 +338,12 @@ Use Preview to check that links work as expected.

Create the release.

### 6.1. Announcement

Write a tweet to announce the new release, something like:

#Apache #Kafka #Python client confluent-kafka-python v0.11.4 released!
Adds support for <mainline feature> or something about maintenance release.
<link-to-release-notes-on-github>


### 6.2. Update docs.confluent.io API docs

Create a PR to update the confluent-kafka-python version tag for the
Python API docs on docs.confluent.io.

# Update the Python API docs to the latest version: includes
https://github.com/confluentinc/docs and
https://github.com/confluentinc/docs-platform.

# Update docs.confluent.io: cut the docs release branch of
https://github.com/confluentinc/docs-clients-confluent-kafka-python,
refers to https://confluentinc.atlassian.net/wiki/spaces/TOOLS/pages/2044330444/Create+a+new+version+of+a+documentation+repo#Create-new-release-branches.
# Update the Python API docs to the latest version: https://github.com/confluentinc/docs-platform.


### 6.3. Done!
Expand Down