From d2875cf48e9c564d0272cc440e07f591a51bd3b5 Mon Sep 17 00:00:00 2001 From: rmoff Date: Fri, 30 Jan 2026 15:29:37 +0000 Subject: [PATCH 1/4] Add Kafka Connect artifact publish to release process --- kafka-connect/build.gradle | 19 ++++++++++--- .../kafka-connect-runtime/main/README.md | 26 ++++++++++++++++++ .../main/etc/iceberg-sink.properties.example | 27 +++++++++++++++++++ .../src/main/resources/manifest.json | 2 +- site/docs/how-to-release.md | 24 +++++++++++++++++ 5 files changed, 93 insertions(+), 5 deletions(-) create mode 100644 kafka-connect/kafka-connect-runtime/main/README.md create mode 100644 kafka-connect/kafka-connect-runtime/main/etc/iceberg-sink.properties.example diff --git a/kafka-connect/build.gradle b/kafka-connect/build.gradle index 009ae719bac5..844b780b3059 100644 --- a/kafka-connect/build.gradle +++ b/kafka-connect/build.gradle @@ -212,6 +212,10 @@ project(':iceberg-kafka-connect:iceberg-kafka-connect-runtime') { into('doc/') { from "$projectDir/main/LICENSE" from "$projectDir/main/NOTICE" + from "$projectDir/main/README.md" + } + into('etc/') { + from "$projectDir/main/etc" } into('assets/') { from "${processResources.destinationDir}/iceberg.png" @@ -235,10 +239,6 @@ project(':iceberg-kafka-connect:iceberg-kafka-connect-runtime') { } } - // there are no Maven artifacts so disable publishing tasks... - project.afterEvaluate { - project.tasks.matching { it.group == 'publishing' }.each {it.enabled = false} - } tasks.jar.enabled = false @@ -256,6 +256,17 @@ project(':iceberg-kafka-connect:iceberg-kafka-connect-runtime') { assemble.dependsOn distZip, hiveDistZip apply from: "${rootDir}/runtime-deps.gradle" + + // Configure publishing for the distribution zip + afterEvaluate { + publishing { + publications { + apache(MavenPublication) { + artifact distZip + } + } + } + } } project(':iceberg-kafka-connect:iceberg-kafka-connect-transforms') { diff --git a/kafka-connect/kafka-connect-runtime/main/README.md b/kafka-connect/kafka-connect-runtime/main/README.md new file mode 100644 index 000000000000..52190996cb18 --- /dev/null +++ b/kafka-connect/kafka-connect-runtime/main/README.md @@ -0,0 +1,26 @@ + + +# Apache Iceberg Sink Connector + +A Kafka Connect sink connector for writing data from Apache Kafka into Apache Iceberg tables. + +Documentation: https://iceberg.apache.org/docs/latest/kafka-connect/ + +License: Apache License 2.0 diff --git a/kafka-connect/kafka-connect-runtime/main/etc/iceberg-sink.properties.example b/kafka-connect/kafka-connect-runtime/main/etc/iceberg-sink.properties.example new file mode 100644 index 000000000000..1688d6d59ce0 --- /dev/null +++ b/kafka-connect/kafka-connect-runtime/main/etc/iceberg-sink.properties.example @@ -0,0 +1,27 @@ +# Licensed to the Apache Software Foundation (ASF) under one +# or more contributor license agreements. See the NOTICE file +# distributed with this work for additional information +# regarding copyright ownership. The ASF licenses this file +# to you under the Apache License, Version 2.0 (the +# "License"); you may not use this file except in compliance +# with the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, +# software distributed under the License is distributed on an +# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +# KIND, either express or implied. See the License for the +# specific language governing permissions and limitations +# under the License. + +# Iceberg Sink Connector - Example Configuration +# https://iceberg.apache.org/docs/latest/kafka-connect/ +name=iceberg-sink +connector.class=org.apache.iceberg.connect.IcebergSinkConnector +tasks.max=1 +topics=events +iceberg.tables=db.table_name +iceberg.catalog.type=rest +iceberg.catalog.uri=https://your-catalog-uri +iceberg.catalog.warehouse=your-warehouse diff --git a/kafka-connect/kafka-connect-runtime/src/main/resources/manifest.json b/kafka-connect/kafka-connect-runtime/src/main/resources/manifest.json index 5b51e5dea875..277873b85e3d 100644 --- a/kafka-connect/kafka-connect-runtime/src/main/resources/manifest.json +++ b/kafka-connect/kafka-connect-runtime/src/main/resources/manifest.json @@ -35,7 +35,7 @@ "logo": "assets/iceberg.png", "type": "organization", "url": "https://iceberg.apache.org", - "username": "iceberg" + "username": "apache" }, "support": { diff --git a/site/docs/how-to-release.md b/site/docs/how-to-release.md index cb50cce622b2..a683e1c2db6a 100644 --- a/site/docs/how-to-release.md +++ b/site/docs/how-to-release.md @@ -166,6 +166,11 @@ To build and publish the convenience binaries, run the `dev/stage-binaries.sh` s dev/stage-binaries.sh ``` +!!! Note + The staged binaries include the Kafka Connect runtime distribution + (`iceberg-kafka-connect-runtime-.zip`), which bundles the connector + with all required dependencies for Kafka Connect plugin installation. + Next, you need to close the staging repository: 1. Go to [Nexus](https://repository.apache.org/) and log in @@ -297,6 +302,25 @@ Java artifacts are available from Maven Central. Thanks to everyone for contributing! ``` +#### Confluent Marketplace Submission + +After the release is published to Maven Central, the Kafka Connect runtime distribution +can be [submitted to](https://docs.confluent.io/platform/current/connect/confluent-hub/contributing.html) +[Confluent Marketplace](https://www.confluent.io/hub/) for broader distribution. + +To submit to Confluent Hub: + +1. [Contact the Confluent Hub team](mailto:confluent-hub@confluent.io) with the Maven Central URL for the distribution zip: + + ``` + https://repo1.maven.org/maven2/org/apache/iceberg/iceberg-kafka-connect-runtime//iceberg-kafka-connect-runtime-.zip + ``` + +2. Confluent will publish to the Marketplace + +!!! Note + This step is optional and can be performed by any PMC member after the release is finalized. + #### Update revapi Create a PR in the `iceberg` repo to make revapi run on the new release. For an example see [this PR](https://github.com/apache/iceberg/pull/6275). From 122694339545918d95a0e74d413d7bc729147f68 Mon Sep 17 00:00:00 2001 From: rmoff Date: Mon, 9 Feb 2026 09:54:59 +0000 Subject: [PATCH 2/4] Rename file --- ...g-sink.properties.example => iceberg-sink.properties.template} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename kafka-connect/kafka-connect-runtime/main/etc/{iceberg-sink.properties.example => iceberg-sink.properties.template} (100%) diff --git a/kafka-connect/kafka-connect-runtime/main/etc/iceberg-sink.properties.example b/kafka-connect/kafka-connect-runtime/main/etc/iceberg-sink.properties.template similarity index 100% rename from kafka-connect/kafka-connect-runtime/main/etc/iceberg-sink.properties.example rename to kafka-connect/kafka-connect-runtime/main/etc/iceberg-sink.properties.template From 6e9c350f0c4c69e86d84999eb9b2ad4c7b30ddc0 Mon Sep 17 00:00:00 2001 From: rmoff Date: Wed, 11 Feb 2026 14:00:45 +0000 Subject: [PATCH 3/4] Fix processResources corrupting iceberg.png binary The processResources filter for __VERSION__ replacement was applied to all resource files, corrupting the binary PNG. Scope it to manifest.json which is the only file that needs the substitution. --- kafka-connect/build.gradle | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/kafka-connect/build.gradle b/kafka-connect/build.gradle index 844b780b3059..a16b72865a1c 100644 --- a/kafka-connect/build.gradle +++ b/kafka-connect/build.gradle @@ -197,8 +197,10 @@ project(':iceberg-kafka-connect:iceberg-kafka-connect-runtime') { } processResources { - filter { - it.replace('__VERSION__', project.version.toString()) + filesMatching('manifest.json') { + filter { + it.replace('__VERSION__', project.version.toString()) + } } } From 1527202291b1b5571e852243a2ae0a246380b799 Mon Sep 17 00:00:00 2001 From: rmoff Date: Fri, 20 Feb 2026 10:00:32 +0000 Subject: [PATCH 4/4] Remove optional note --- site/docs/how-to-release.md | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/site/docs/how-to-release.md b/site/docs/how-to-release.md index a683e1c2db6a..cb982b27a4b7 100644 --- a/site/docs/how-to-release.md +++ b/site/docs/how-to-release.md @@ -316,10 +316,7 @@ To submit to Confluent Hub: https://repo1.maven.org/maven2/org/apache/iceberg/iceberg-kafka-connect-runtime//iceberg-kafka-connect-runtime-.zip ``` -2. Confluent will publish to the Marketplace - -!!! Note - This step is optional and can be performed by any PMC member after the release is finalized. +2. Confluent will publish to the Marketplace. #### Update revapi