This guide outlines the steps needed to release a new version of librdkafka and publish packages to channels (NuGet, Homebrew, etc,..).
Releases are done in two phases: * release-candidate(s) - RC1 will be the first release candidate, and any changes to the repository will require a new RC. * final release - the final release is based directly on the last RC tag followed by a single version-bump commit (see below).
Release tag and version format: * release-candidate: vA.B.C-RCn * final release: vA.B.C
Build tests:
$ cd tests $ make -j build
Run the full regression test suite: (requires Linux and the trivup python package)
$ make full
If all tests pass, carry on, otherwise identify and fix bug and start over.
Switch to the release branch which is of the format A.B.C.x
or A.B.x
.
$ git checkout -b 0.11.1.x
Update in-code versions.
The last octet in the version hex number is the pre-build/release-candidate number, where 0xAABBCCff is the final release for version 0xAABBCC. Release candidates start at 200, thus 0xAABBCCc9 is RC1, 0xAABBCCca is RC2, etc.
Change the RD_KAFKA_VERSION
defines in both src/rdkafka.h
and
src-cpp/rdkafkacpp.h
to the version to build, such as 0x000b01c9
for v0.11.1-RC1, or 0x000b01ff for the final v0.11.1 release.
# Update defines $ $EDITOR src/rdkafka.h src-cpp/rdkafkacpp.h
# Reconfigure and build $ ./configure $ make
# Check git diff for correctness $ git diff
# Commit $ git commit -m "Version v0.11.1-RC1" src/rdkafka.h src-cpp/rdkafkacpp.h
Create tag.
$ git tag v0.11.1-RC1 # for an RC # or for the final release: $ git tag v0.11.1 # for the final release
Push branch and commit to github
# Dry-run first to make sure things look correct $ git push --dry-run origin 0.11.1.x # Live $ git push origin 0.11.1.x
Push tags and commit to github
# Dry-run first to make sure things look correct. $ git push --dry-run --tags origin v0.11.1-RC1 # Live $ git push --tags origin v0.11.1-RC1
As soon as a tag is pushed the CI systems (Travis and AppVeyor) will start their builds and eventually upload the packaging artifacts to S3. Wait until this process is finished by monitoring the two CIs:
On a Linux host with docker installed, this will also require S3 credentials to be set up.
$ cd packaging/nuget $ pip install -r requirements.txt # if necessary $ ./release.py v0.11.1-RC1
Test the generated librdkafka.redist.0.11.1-RC1.nupkg and then upload it to NuGet manually:
The brew-update-pr.sh script automatically pushes a PR to homebrew-core with a patch to update the librdkafka version of the formula. This should only be done for final releases and not release candidates.
On a MacOSX host with homebrew installed:
$ cd package/homebrew # Dry-run first to see that things are okay. $ ./brew-update-pr.sh v0.11.1 # If everything looks good, do the live push: $ ./brew-update-pr.sh --upload v0.11.1
Debian and RPM packages are generated by Confluent packaging in a separate process and the resulting packages are made available on Confluent's APT and YUM repositories.
That process is outside the scope of this document.
See the Confluent docs for instructions how to access these packages: https://docs.confluent.io/current/installation.html