diff --git a/kafka/boil-config.toml b/kafka/boil-config.toml index 0d5d0a387..bafa8dc7f 100644 --- a/kafka/boil-config.toml +++ b/kafka/boil-config.toml @@ -25,3 +25,17 @@ java-devel = "24" [versions."4.1.1".build-arguments] scala-version = "2.13" jmx-exporter-version = "1.3.0" + +[versions."4.2.1".local-images] +java-base = "25" +java-devel = "25" +"kafka/kcat" = "1.7.0" +"kafka/kafka-opa-plugin" = "1.5.1" +# TODO: this is not used in this version but it's added +# to avoid major changes to the Kafka image build on short notice. +# Building this image is quick and in CI should not even be noticed. +"shared/reload4j" = "1.2.25" + +[versions."4.2.1".build-arguments] +scala-version = "2.13" +jmx-exporter-version = "1.3.0" diff --git a/kafka/stackable/patches/4.2.1/0001-Add-CycloneDX-plugin.patch b/kafka/stackable/patches/4.2.1/0001-Add-CycloneDX-plugin.patch new file mode 100644 index 000000000..3759c2515 --- /dev/null +++ b/kafka/stackable/patches/4.2.1/0001-Add-CycloneDX-plugin.patch @@ -0,0 +1,67 @@ +From 5ef351ca945bcaa8346ef066ba00fd9288a4f443 Mon Sep 17 00:00:00 2001 +From: Razvan-Daniel Mihai <84674+razvan@users.noreply.github.com> +Date: Wed, 13 May 2026 16:30:33 +0300 +Subject: Add CycloneDX plugin + +--- + build.gradle | 45 +++++++++++++++++++++++++++++++++++++++++++++ + 1 file changed, 45 insertions(+) + +diff --git a/build.gradle b/build.gradle +index c07cd3b047..effbe0f65d 100644 +--- a/build.gradle ++++ b/build.gradle +@@ -41,8 +41,53 @@ plugins { + id 'org.scoverage' version '8.1' apply false + id 'com.gradleup.shadow' version '8.3.9' apply false + id 'com.diffplug.spotless' version "8.0.0" ++ id 'org.cyclonedx.bom' version '3.2.4' + } + ++cyclonedxBom { ++ // Specified the type of project being built. Defaults to 'library' ++ projectType = org.cyclonedx.model.Component.Type.APPLICATION ++ // Specified the version of the CycloneDX specification to use. Defaults to VERSION_16. ++ schemaVersion = org.cyclonedx.Version.VERSION_15 ++ jsonOutput = file("build/reports/bom.json") ++ xmlOutput.unsetConvention() ++} ++ ++// Exclude test components. This list needs to be checked and, if it changed, updated for every new Kafka version. ++// The list can be obtained by running `gradle projects | grep upgrade-system-tests` ++def skipCyclonedxProjects = [ ++ ':streams:upgrade-system-tests-0110', ++ ':streams:upgrade-system-tests-10', ++ ':streams:upgrade-system-tests-11', ++ ':streams:upgrade-system-tests-20', ++ ':streams:upgrade-system-tests-21', ++ ':streams:upgrade-system-tests-22', ++ ':streams:upgrade-system-tests-23', ++ ':streams:upgrade-system-tests-24', ++ ':streams:upgrade-system-tests-25', ++ ':streams:upgrade-system-tests-26', ++ ':streams:upgrade-system-tests-27', ++ ':streams:upgrade-system-tests-28', ++ ':streams:upgrade-system-tests-30', ++ ':streams:upgrade-system-tests-31', ++ ':streams:upgrade-system-tests-32', ++ ':streams:upgrade-system-tests-33', ++ ':streams:upgrade-system-tests-34', ++ ':streams:upgrade-system-tests-35', ++ ':streams:upgrade-system-tests-36', ++ ':streams:upgrade-system-tests-37', ++ ':streams:upgrade-system-tests-38', ++ ':streams:upgrade-system-tests-39', ++ ':streams:upgrade-system-tests-40', ++ ':streams:upgrade-system-tests-41', ++] ++ ++configure(subprojects.findAll { skipCyclonedxProjects.contains(it.path) }) { ++ tasks.named('cyclonedxDirectBom') { ++ enabled = false ++ } ++} ++ + ext { + minClientJavaVersion = 11 + minNonClientJavaVersion = 17 diff --git a/kafka/stackable/patches/4.2.1/0002-Change-Gradle-to-use-the-Nexus-Build-Repo.patch b/kafka/stackable/patches/4.2.1/0002-Change-Gradle-to-use-the-Nexus-Build-Repo.patch new file mode 100644 index 000000000..6e82d1c21 --- /dev/null +++ b/kafka/stackable/patches/4.2.1/0002-Change-Gradle-to-use-the-Nexus-Build-Repo.patch @@ -0,0 +1,35 @@ +From e4e184668e99d71e2cbdebfd55ef4ba3322a6508 Mon Sep 17 00:00:00 2001 +From: Razvan-Daniel Mihai <84674+razvan@users.noreply.github.com> +Date: Wed, 13 May 2026 16:31:44 +0300 +Subject: Change Gradle to use the Nexus Build Repo + +--- + build.gradle | 8 ++++++-- + 1 file changed, 6 insertions(+), 2 deletions(-) + +diff --git a/build.gradle b/build.gradle +index effbe0f65d..bd840210bd 100644 +--- a/build.gradle ++++ b/build.gradle +@@ -18,7 +18,9 @@ import java.nio.charset.StandardCharsets + + buildscript { + repositories { +- mavenCentral() ++ maven { ++ url 'https://build-repo.stackable.tech/repository/maven-public/' ++ } + } + apply from: "$rootDir/gradle/dependencies.gradle" + +@@ -212,7 +214,9 @@ ext { + allprojects { + + repositories { +- mavenCentral() ++ maven { ++ url 'https://build-repo.stackable.tech/repository/maven-public/' ++ } + } + + dependencyUpdates { diff --git a/kafka/stackable/patches/4.2.1/0003-Build-custom-Stackable-version.patch b/kafka/stackable/patches/4.2.1/0003-Build-custom-Stackable-version.patch new file mode 100644 index 000000000..853b81e07 --- /dev/null +++ b/kafka/stackable/patches/4.2.1/0003-Build-custom-Stackable-version.patch @@ -0,0 +1,114 @@ +From 915f1d9eb9c1fd7bf9c15a52a353c33475efa6a3 Mon Sep 17 00:00:00 2001 +From: Razvan-Daniel Mihai <84674+razvan@users.noreply.github.com> +Date: Fri, 29 May 2026 17:33:00 +0200 +Subject: Build custom Stackable version + +How it was done: + +Replace in files in root dir (do not garble .git): + +for d in $(ls -p|grep -v /); do find $d -type f -exec sed -i +'s/4\.2\.1/4.2.1-stackable0.0.0-dev/g' {} +; done + +Replace in all subdirs: + +for d in $(ls -d */); do find $d -type f -exec sed -i +'s/4\.2\.1/4.2.1-stackable0.0.0-dev/g' {} +; done +--- + committer-tools/kafka-merge-pr.py | 2 +- + gradle.properties | 2 +- + streams/quickstart/java/pom.xml | 2 +- + .../java/src/main/resources/archetype-resources/pom.xml | 2 +- + streams/quickstart/pom.xml | 2 +- + tests/kafkatest/__init__.py | 2 +- + tests/kafkatest/version.py | 2 +- + 7 files changed, 7 insertions(+), 7 deletions(-) + +diff --git a/committer-tools/kafka-merge-pr.py b/committer-tools/kafka-merge-pr.py +index 92dabc607c..5611a8beeb 100755 +--- a/committer-tools/kafka-merge-pr.py ++++ b/committer-tools/kafka-merge-pr.py +@@ -70,7 +70,7 @@ TEMP_BRANCH_PREFIX = "PR_TOOL" + + DEV_BRANCH_NAME = "trunk" + +-DEFAULT_FIX_VERSION = os.environ.get("DEFAULT_FIX_VERSION", "4.2.1") ++DEFAULT_FIX_VERSION = os.environ.get("DEFAULT_FIX_VERSION", "4.2.1-stackable0.0.0-dev") + + ORIGINAL_HEAD = "" + +diff --git a/gradle.properties b/gradle.properties +index 8dad15054c..27c124ca21 100644 +--- a/gradle.properties ++++ b/gradle.properties +@@ -14,7 +14,7 @@ + # limitations under the License. + + group=org.apache.kafka +-version=4.2.1 ++version=4.2.1-stackable0.0.0-dev + scalaVersion=2.13.17 + # Adding swaggerVersion in gradle.properties to have a single version in place for swagger + swaggerVersion=2.2.39 +diff --git a/streams/quickstart/java/pom.xml b/streams/quickstart/java/pom.xml +index 4930378053..41b602f98e 100644 +--- a/streams/quickstart/java/pom.xml ++++ b/streams/quickstart/java/pom.xml +@@ -26,7 +26,7 @@ + + org.apache.kafka + streams-quickstart +- 4.2.1 ++ 4.2.1-stackable0.0.0-dev + .. + + +diff --git a/streams/quickstart/java/src/main/resources/archetype-resources/pom.xml b/streams/quickstart/java/src/main/resources/archetype-resources/pom.xml +index e78fa54f59..bd440c365d 100644 +--- a/streams/quickstart/java/src/main/resources/archetype-resources/pom.xml ++++ b/streams/quickstart/java/src/main/resources/archetype-resources/pom.xml +@@ -29,7 +29,7 @@ + + + UTF-8 +- 4.2.1 ++ 4.2.1-stackable0.0.0-dev + 2.0.16 + + +diff --git a/streams/quickstart/pom.xml b/streams/quickstart/pom.xml +index de77049571..3964d486e1 100644 +--- a/streams/quickstart/pom.xml ++++ b/streams/quickstart/pom.xml +@@ -22,7 +22,7 @@ + org.apache.kafka + streams-quickstart + pom +- 4.2.1 ++ 4.2.1-stackable0.0.0-dev + + Kafka Streams :: Quickstart + +diff --git a/tests/kafkatest/__init__.py b/tests/kafkatest/__init__.py +index 49861a2ef2..2f50efe072 100644 +--- a/tests/kafkatest/__init__.py ++++ b/tests/kafkatest/__init__.py +@@ -22,4 +22,4 @@ + # Instead, in development branches, the version should have a suffix of the form ".devN" + # + # For example, when Kafka is at version 1.0.0-SNAPSHOT, this should be something like "1.0.0.dev0" +-__version__ = '4.2.1' ++__version__ = '4.2.1-stackable0.0.0-dev' +diff --git a/tests/kafkatest/version.py b/tests/kafkatest/version.py +index d0297f10f9..10474bdf43 100644 +--- a/tests/kafkatest/version.py ++++ b/tests/kafkatest/version.py +@@ -128,7 +128,7 @@ def get_version(node=None): + return DEV_BRANCH + + DEV_BRANCH = KafkaVersion("dev") +-DEV_VERSION = KafkaVersion("4.2.1") ++DEV_VERSION = KafkaVersion("4.2.1-stackable0.0.0-dev") + + LATEST_STABLE_TRANSACTION_VERSION = 2 + # This should match the LATEST_PRODUCTION version defined in MetadataVersion.java diff --git a/kafka/stackable/patches/4.2.1/0004-Include-jackson-dataformat-xml-dependency.patch b/kafka/stackable/patches/4.2.1/0004-Include-jackson-dataformat-xml-dependency.patch new file mode 100644 index 000000000..60740cd29 --- /dev/null +++ b/kafka/stackable/patches/4.2.1/0004-Include-jackson-dataformat-xml-dependency.patch @@ -0,0 +1,133 @@ +From 1f99c4cf15723be1ce1de65a7d5559b5bb29cb7a Mon Sep 17 00:00:00 2001 +From: Razvan-Daniel Mihai <84674+razvan@users.noreply.github.com> +Date: Fri, 29 May 2026 17:43:58 +0200 +Subject: Include jackson dataformat xml dependency + +Add jacksonDatabindXml everywhere near jacjsonDatabindYaml in +build.gradle +--- + build.gradle | 15 ++++++++++++++- + gradle/dependencies.gradle | 1 + + 2 files changed, 15 insertions(+), 1 deletion(-) + +diff --git a/build.gradle b/build.gradle +index bd840210bd..487c2d06dd 100644 +--- a/build.gradle ++++ b/build.gradle +@@ -188,13 +188,15 @@ ext { + libs.slf4jLog4j2, + libs.junitPlatformLanucher, + libs.jacksonDatabindYaml, ++ libs.jacksonDatabindXml, + project(":test-common:test-common-util") + ] + + log4jReleaseLibs = [ + libs.slf4jLog4j2, + libs.log4j1Bridge2Api, +- libs.jacksonDatabindYaml ++ libs.jacksonDatabindYaml, ++ libs.jacksonDatabindXml, + ] + + log4j2Libs = [ +@@ -1122,6 +1124,7 @@ project(':core') { + implementation libs.jacksonDataformatCsv + implementation libs.jacksonJDK8Datatypes + implementation libs.jacksonDatabindYaml ++ implementation libs.jacksonDatabindXml + implementation libs.joptSimple + implementation libs.jose4j + implementation libs.metrics +@@ -1537,6 +1540,7 @@ project(':group-coordinator') { + testImplementation project(':server-common').sourceSets.test.output + testImplementation project(':coordinator-common').sourceSets.test.output + testImplementation libs.jacksonDatabindYaml ++ testImplementation libs.jacksonDatabindXml + testImplementation libs.junitJupiter + testImplementation libs.mockitoCore + testImplementation testLog4j2Libs +@@ -1659,6 +1663,7 @@ project(':test-common:test-common-runtime') { + implementation libs.junitPlatformLanucher + implementation libs.junitJupiter + implementation libs.jacksonDatabindYaml ++ implementation libs.jacksonDatabindXml + implementation libs.slf4jApi + + testImplementation libs.junitJupiter +@@ -2133,6 +2138,7 @@ project(':raft') { + testImplementation project(':clients') + testImplementation project(':clients').sourceSets.test.output + testImplementation libs.jacksonDatabindYaml ++ testImplementation libs.jacksonDatabindXml + testImplementation libs.junitJupiter + testImplementation libs.mockitoCore + testImplementation libs.jqwik +@@ -2230,6 +2236,7 @@ project(':server-common') { + testImplementation project(':clients') + testImplementation project(':clients').sourceSets.test.output + testImplementation libs.jacksonDatabindYaml ++ testImplementation libs.jacksonDatabindXml + testImplementation libs.junitJupiter + testImplementation libs.mockitoCore + testImplementation testLog4j2Libs +@@ -2371,6 +2378,7 @@ project(':storage') { + testImplementation project(':transaction-coordinator') + testImplementation libs.hamcrest + testImplementation libs.jacksonDatabindYaml ++ testImplementation libs.jacksonDatabindXml + testImplementation libs.junitJupiter + testImplementation libs.mockitoCore + testImplementation libs.bcpkix +@@ -2689,6 +2697,7 @@ project(':shell') { + testImplementation project(':server-common') + testImplementation project(':server-common').sourceSets.test.output + testImplementation libs.jacksonDatabindYaml ++ testImplementation libs.jacksonDatabindXml + testImplementation libs.junitJupiter + testImplementation testLog4j2Libs + +@@ -2738,6 +2747,7 @@ project(':streams') { + + testImplementation project(':clients').sourceSets.test.output + testImplementation libs.jacksonDatabindYaml ++ testImplementation libs.jacksonDatabindXml + testImplementation libs.junitJupiter + testImplementation libs.bcpkix + testImplementation libs.hamcrest +@@ -2883,6 +2893,7 @@ project(':streams:streams-scala') { + testImplementation project(':streams:test-utils') + + testImplementation libs.jacksonDatabindYaml ++ testImplementation libs.jacksonDatabindXml + testImplementation libs.junitJupiter + testImplementation libs.mockitoJunitJupiter // supports MockitoExtension + testImplementation testLog4j2Libs +@@ -2987,6 +2998,7 @@ project(':streams:test-utils') { + + testImplementation project(':clients').sourceSets.test.output + testImplementation libs.jacksonDatabindYaml ++ testImplementation libs.jacksonDatabindXml + testImplementation libs.junitJupiter + testImplementation libs.mockitoCore + testImplementation libs.hamcrest +@@ -3682,6 +3694,7 @@ project(':connect:runtime') { + testImplementation project(':server-common').sourceSets.test.output + + testImplementation libs.jacksonDatabindYaml ++ testImplementation libs.jacksonDatabindXml + testImplementation libs.junitJupiter + testImplementation libs.mockitoCore + testImplementation libs.mockitoJunitJupiter +diff --git a/gradle/dependencies.gradle b/gradle/dependencies.gradle +index de63116795..19d4117dca 100644 +--- a/gradle/dependencies.gradle ++++ b/gradle/dependencies.gradle +@@ -159,6 +159,7 @@ libs += [ + jacksonAnnotations: "com.fasterxml.jackson.core:jackson-annotations:$versions.jacksonAnnotations", + jacksonDatabind: "com.fasterxml.jackson.core:jackson-databind:$versions.jackson", + jacksonDatabindYaml: "com.fasterxml.jackson.dataformat:jackson-dataformat-yaml:$versions.jackson", ++ jacksonDatabindXml: "com.fasterxml.jackson.dataformat:jackson-dataformat-xml:$versions.jackson", + jacksonDataformatCsv: "com.fasterxml.jackson.dataformat:jackson-dataformat-csv:$versions.jackson", + jacksonJDK8Datatypes: "com.fasterxml.jackson.datatype:jackson-datatype-jdk8:$versions.jackson", + jacksonBlackbird: "com.fasterxml.jackson.module:jackson-module-blackbird:$versions.jackson", diff --git a/kafka/stackable/patches/4.2.1/patchable.toml b/kafka/stackable/patches/4.2.1/patchable.toml new file mode 100644 index 000000000..9ae3d09e9 --- /dev/null +++ b/kafka/stackable/patches/4.2.1/patchable.toml @@ -0,0 +1 @@ +base = "18d5ecd939c8d510fdd72d0abb1f7099659dcd58"