This project follows Semantic Versioning:
- Patch (
x.y.Z) — bug fixes, correctness improvements, no API changes - Minor (
x.Y.0) — new features, backward-compatible - Major (
X.0.0) — breaking changes
Create release-notes/<version>.md.
If this file exists, the release workflow uses it as the release body and appends a generated Full Changelog section. If absent, it auto-generates the whole body from git log since the previous tag.
Use an existing file in release-notes/ as a format reference.
Move the [Unreleased] entries to [<version>] - <date> in CHANGELOG.md, recreate an empty [Unreleased] section, and update the comparison links at the bottom.
./gradlew -PreleaseVersion=<version> buildRelease
./scripts/write_release_notes.sh <version>Confirm the release zip is written to build/distributions/kafka-gitops-<version>.zip.
git add CHANGELOG.md release-notes/<version>.md
git commit -s -m "chore: release <version>"
git push origin maingit tag <version>
git push origin <version>Pushing the tag triggers the Release workflow, which:
- Builds the shadow JAR with
-PreleaseVersion=<version> - Generates release notes from
release-notes/<version>.md(orgit log) - Publishes the GitHub Release with the distributable ZIP
- Builds and pushes the Docker image (requires
DOCKER_USERNAME/DOCKER_PASSWORDsecrets)
The tag push also triggers the Java CI workflow because that workflow runs on every push.
Check the Actions tab to confirm the Release workflow and tag-triggered Java CI both succeed.
Confirm the GitHub Release is published with kafka-gitops-<version>.zip.
If the release job fails after tagging, re-run it via workflow_dispatch:
Actions → Release → Run workflow → tag: <version>
This avoids deleting and re-pushing the tag.
- The version is not stored in any file — it is injected at build time via
-PreleaseVersionfrom the git tag. - Docker push is conditional on
DOCKER_USERNAME/DOCKER_PASSWORDsecrets being set.