This guide is for maintainers creating release candidates of Apache DataFusion Java and running the release process.
The instructions below assume the upstream git repo
git@github.com:apache/datafusion-java.git is configured as the remote
named apache:
git remote add apache git@github.com:apache/datafusion-java.gitIf you will be releasing the final tarball, your GPG public key must be present in:
- https://dist.apache.org/repos/dist/dev/datafusion/KEYS
- https://dist.apache.org/repos/dist/release/datafusion/KEYS
See https://infra.apache.org/release-signing.html#generate for generating keys.
Committers can add signing keys via Subversion using their ASF account:
svn co https://dist.apache.org/repos/dist/dev/datafusion
cd datafusion
(gpg --list-sigs "Your Name" && gpg --armor --export "Your Name") >> KEYS
svn commit KEYS -m "Add key for Your Name"As part of the Apache governance model, official releases consist of signed source tarballs approved by the PMC.
Pick numbers in sequential order, with 1 for rc1, 2 for rc2, and
so on.
Release tags look like 0.1.0, and release candidate tags look like
0.1.0-rc1.
git fetch apache
git tag 0.1.0-rc1 apache/main
git push apache 0.1.0-rc1Run create-tarball.sh with the version and RC number:
./dev/release/create-tarball.sh 0.1.0 1The script:
- Creates and uploads the release candidate artifacts to the
dist/dev/datafusionlocation on the Apache SVN distribution server, underapache-datafusion-java-<version>-rc<rc>/. - Prints an email template to send to
dev@datafusion.apache.orgfor the release vote.
Send the email printed by the script to dev@datafusion.apache.org.
The vote must remain open for at least 72 hours and requires at least
three PMC +1 votes and no -1 votes to pass.
dev/release/verify-release-candidate.sh downloads the candidate
tarball, verifies its signature and checksums, and builds and tests the
source distribution:
./dev/release/verify-release-candidate.sh 0.1.0 1The script requires curl, git, gpg, a C toolchain, java, and
either shasum or sha256sum/sha512sum to be on the PATH. It will
install a temporary Rust toolchain into the sandbox directory.
Move artifacts from the dev SVN area to the release area using
release-tarball.sh:
./dev/release/release-tarball.sh 0.1.0 1Tag the same release candidate commit with the final release tag:
git checkout 0.1.0-rc1
git tag 0.1.0
git push apache 0.1.0Add the release at https://reporter.apache.org/addrelease.html?datafusion so it appears in the project's board report.
See the ASF documentation on when to archive.
Release candidates should be deleted once the release is published:
svn ls https://dist.apache.org/repos/dist/dev/datafusion | grep datafusion-java
svn delete -m "delete old DataFusion Java RC" \
https://dist.apache.org/repos/dist/dev/datafusion/apache-datafusion-java-0.1.0-rc1/Only the latest release should remain in the release SVN area. Delete
older releases after publishing a new one:
svn ls https://dist.apache.org/repos/dist/release/datafusion | grep datafusion-java
svn delete -m "delete old DataFusion Java release" \
https://dist.apache.org/repos/dist/release/datafusion/datafusion-java-0.1.0Source tarballs are the official Apache release artifact, but consumers also expect a published JAR on Maven Central that bundles native libs for the common platforms. This section covers building that JAR.
- macOS host (Apple Silicon or Intel)
- Docker Desktop running with BuildKit enabled
- Java 17+
- Rust toolchain via rustup
gpgconfigured with a key listed in the ASF KEYS filexmllintonPATH(pre-installed on macOS;libxml2-utilson Debian/Ubuntu)
build-release.sh clones the repo into two Linux Docker containers
(one for linux/amd64, one for linux/arm64), builds the native
.so libraries inside each, then builds the two macOS .dylib
libraries directly on the host. All four libraries are placed in the
JAR's resource tree at
org/apache/datafusion/<os>/<arch>/lib<datafusion_jni>.<ext>, and the
JAR is installed into a temporary local Maven repository.
./dev/release/build-release.shThe script prints the local Maven repo path at the end. Inspect the JAR to verify all four native libraries are bundled:
unzip -l "$JAR" | grep org/apache/datafusion/Once the local Maven repo from build-release.sh looks correct, sign
and upload to Apache Nexus staging using publish-to-maven.sh:
./dev/release/publish-to-maven.sh -u <asf-username> -r <local-maven-repo-path>The script prompts for the ASF password and GPG passphrase, creates a
staging repository on repository.apache.org, signs every artifact,
uploads it, and closes the staging repository. Verify in the Nexus UI
that the staged artifacts look correct before promoting to release.