This step is needed only when you act as a release manager first time.
We use the following variables in multiple steps:
GH_TOKEN: GitHub personal access token to automate GitHub related operationsGPG_KEY_ID: PGP key ID that is used for signing official artifacts by GnuPGWe use dev/release/.env to share these variables in multiple steps. You can use dev/release/.env.example as a template:
$ cp dev/release/.env{.example,} $ chmod go-r dev/release/.env $ editor dev/release/.env
See https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/managing-your-personal-access-tokens how to prepare GitHub personal access token for GH_TOKEN.
Note that you also need to install gh command because our scripts use gh command to use GitHub API. See https://github.com/cli/cli#installation how to install gh command.
If you don't have a PGP key for GPG_KEY_ID, see https://infra.apache.org/release-signing.html#genegrate how to generate your PGP key.
Your PGP key must be registered to the followings:
See the header comment of them how to add a PGP key.
Apache arrow committers can update them by Subversion client with their ASF account. e.g.:
$ svn co https://dist.apache.org/repos/dist/dev/arrow $ cd arrow $ head KEYS (This shows how to update KEYS) $ svn ci KEYS
Run dev/release/bump_version.sh on a working copy of your fork not git@github.com:apache/arrow-java:
$ git clone git@github.com:${YOUR_GITHUB_ACCOUNT}/arrow-java.git arrow-java.${YOUR_GITHUB_ACCOUNT} $ cd arrow-java.${YOUR_GITHUB_ACCOUNT} $ dev/release/bump_version.sh ${NEW_VERSION}
Here is an example to bump version to 19.0.0:
$ dev/release/bump_version.sh 19.0.0
It creates a feature branch and adds a commit that bumps version. This opens a pull request from the feature branch.
We need to merge the pull request before we cut a RC. If we try cutting a RC without merging the pull request, the script to cut a RC is failed.
You can use dev/release/release_rc.sh.
Requirements to run release_rc.sh:
Configure Maven to publish artifacts to Apache repositories. You will need to setup a master password at ~/.m2/settings-security.xml and ~/.m2/settings.xml as specified on the Apache guide. It can be tested with the following command:
# You might need to export GPG_TTY=$(tty) to properly prompt for a passphrase mvn clean install -Papache-release
Run dev/release/release_rc.sh on a working copy of git@github.com:apache/arrow-java not your fork:
$ git clone git@github.com:apache/arrow-java.git $ cd arrow-java $ dev/release/release_rc.sh ${RC} (Send a vote email to dev@arrow.apache.org. You can use a draft shown by release_rc.sh for the email.)
Here is an example to release RC1:
$ dev/release/release_rc.sh 1
The argument of release_rc.sh is the RC number. If RC1 has a problem, we'll increment the RC number such as RC2, RC3 and so on.
We need to do the followings to publish a new release:
Run dev/release/release.sh on a working copy of git@github.com:apache/arrow-java not your fork to publish the source archive to apache.org:
$ dev/release/release.sh ${VERSION} ${RC}
Here is an example to release 19.0.0 RC1:
$ dev/release/release.sh 19.0.0 1
Add the release to ASF's report database via Apache Committee Report Helper.
You need to do the followings to publish the binary artifacts to repository.apache.org:
orgapachearrow-XXXXrelease buttonWe should bump version in the main branch for new development after we release a new version.
Run dev/release/bump_version.sh on a working copy of your fork not git@github.com:apache/arrow-java:
$ git clone git@github.com:${YOUR_GITHUB_ACCOUNT}/arrow-java.git arrow-java.${YOUR_GITHUB_ACCOUNT} $ cd arrow-java.${YOUR_GITHUB_ACCOUNT} $ dev/release/bump_version.sh ${NEW_VERSION}-SNAPSHOT
Here is an example to bump version to 19.0.1-SNAPSHOT:
$ dev/release/bump_version.sh 19.0.0-SNAPSHOT
It creates a feature branch and adds a commit that bumps version. This opens a pull request from the feature branch by gh pr create.
Close the milestone here, then open a new milestone for the next release:
https://github.com/apache/arrow-java/milestones
The milestone should be named after the version (e.g. “18.4.0”).
Open a pull request on apache/arrow-site announcing the new release and summarizing the changes. Do not include the full changelog, just important entries (breaking changes, new features, major bug fixes) and a link to the full changelog. See an example PR.
Send an email to “announce@apache.org” from your Apache email, CC'ing dev@arrow.apache.org/user@arrow.apache.org. See an example post.
To: announce@apache.org
CC: dev@arrow.apache.org, user@arrow.apache.org
Subject: [ANNOUNCE] Apache Arrow Java 18.2.0 released
The Apache Arrow community is pleased to announce the Arrow Java 18.2.0 release.
The release is available now from our website:
https://arrow.apache.org/install/
and
https://www.apache.org/dyn/closer.cgi/arrow/apache-arrow-java-18.2.0/
Read about what's new in the release at:
https://arrow.apache.org/blog/2025/02/19/arrow-java-18.2.0/
Read the full changelog:
https://github.com/apache/arrow-java/commits/v18.2.0
What is Apache Arrow?
-------------------------------
Apache Arrow is a universal columnar format and multi-language toolbox
for fast data interchange and in-memory analytics. It houses a set of
canonical in-memory representations of flat and hierarchical data
along with multiple language-bindings for structure manipulation. It
also provides low-overhead streaming and batch messaging, zero-copy
interprocess communication (IPC), and vectorized in-memory analytics
libraries.
Please report any feedback to the mailing lists:
https://lists.apache.org/list.html?dev@arrow.apache.org
Regards,
The Apache Arrow community.
Make a post on our BlueSky and LinkedIn accounts. (Ask your fellow PMC members for access if need be, or ask a PMC member to make the post on your behalf.) The post should link to the blog post. See example BlueSky post and example LinkedIn post.
We have a script to verify a RC.
You must install the following commands to use the script:
curlgpgshasum or sha256sum/sha512sumtarTo verify a RC, run the following command line:
$ dev/release/verify_rc.sh ${VERSION} ${RC}
Here is an example to verify the release 19.0.0 RC1:
$ dev/release/verify_rc.sh 19.0.0 1
If the verification is successful, the message RC looks good! is shown.