How to Verify a Release

Each Apache Iceberg release is validated by the community by holding a vote. A community release manager will prepare a release candidate and call a vote on the Iceberg dev list. To validate the release candidate, community members will test it out in their downstream projects and environments. It’s recommended to report the Java, Scala, Spark, Flink and Hive versions you have tested against when you vote.

In addition to testing in downstream projects, community members also check the release’s signatures, checksums, and license documentation.

Validating a source release candidate

Release announcements include links to the following:

  • A source tarball
  • A signature (.asc)
  • A checksum (.sha512)
  • KEYS file
  • GitHub change comparison

After downloading the source tarball, signature, checksum, and KEYS file, here are instructions on how to verify signatures, checksums, and documentation.

Verifying Signatures

First, import the keys.

curl -o KEYS
gpg --import KEYS

Next, verify the .asc file.

gpg --verify apache-iceberg-0.13.2.tar.gz.asc

Verifying Checksums

shasum -a 512 --check apache-iceberg-0.13.2.tar.gz.sha512

Verifying License Documentation

Untar the archive and change into the source directory.

tar xzf apache-iceberg-0.13.2.tar.gz
cd apache-iceberg-0.13.2

Run RAT checks to validate license headers.


Verifying Build and Test

To verify that the release candidate builds properly, run the following command.

./gradlew build

Testing release binaries

Release announcements will also include a maven repository location. You can use this location to test downstream dependencies by adding it to your maven or gradle build.

To use the release in your maven build, add the following to your POM or settings.xml:

      <name>Iceberg Release Candidate</name>

To use the release in your gradle build, add the following to your build.gradle:

repositories {
    maven {
        url "${MAVEN_URL}"

!!! Note Replace ${MAVEN_URL} with the URL provided in the release announcement

Verifying with Spark

To verify using spark, start a spark-shell with a command like the following command (use the appropriate spark-runtime jar for the Spark installation):

spark-shell \
    --conf spark.jars.repositories=${MAVEN_URL} \
    --packages org.apache.iceberg:iceberg-spark3-runtime:0.13.2 \
    --conf spark.sql.extensions=org.apache.iceberg.spark.extensions.IcebergSparkSessionExtensions \
    --conf spark.sql.catalog.local=org.apache.iceberg.spark.SparkCatalog \
    --conf spark.sql.catalog.local.type=hadoop \
    --conf spark.sql.catalog.local.warehouse=${LOCAL_WAREHOUSE_PATH} \
    --conf spark.sql.catalog.local.default-namespace=default \
    --conf spark.sql.defaultCatalog=local

To verify using Flink, start a Flink SQL Client with the following command:

wget ${MAVEN_URL}/iceberg-flink-runtime/0.13.2/iceberg-flink-runtime-0.13.2.jar embedded \
    -j iceberg-flink-runtime-0.13.2.jar \


Votes are cast by replying to the release candidate announcement email on the dev mailing list with either +1, 0, or -1.

[ ] +1 Release this as Apache Iceberg 0.13.2 [ ] +0 [ ] -1 Do not release this because…

In addition to your vote, it’s customary to specify if your vote is binding or non-binding. Only members of the Project Management Committee have formally binding votes. If you’re unsure, you can specify that your vote is non-binding. To read more about voting in the Apache framework, checkout the Voting information page on the Apache foundation’s website.