| <!--- |
| 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. |
| --> |
| |
| # Release |
| |
| ## Overview |
| |
| 1. Test the revision to be released |
| 2. Bump version for new release (detailed later) |
| 3. Prepare RC and vote (detailed later) |
| 4. Publish (detailed later) |
| 5. Bump version for new development (detailed later) |
| |
| ### Prepare release environment |
| |
| 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 |
| operations |
| * `GPG_KEY_ID`: PGP key ID that is used for signing official artifacts |
| by GnuPG |
| |
| We use `dev/release/.env` to share these variables in multiple |
| steps. You can use `dev/release/.env.example` as a template: |
| |
| ```console |
| $ 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: |
| |
| * https://dist.apache.org/repos/dist/dev/arrow/KEYS |
| * https://dist.apache.org/repos/dist/release/arrow/KEYS |
| |
| 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.: |
| |
| ```console |
| $ svn co https://dist.apache.org/repos/dist/dev/arrow |
| $ cd arrow |
| $ head KEYS |
| (This shows how to update KEYS) |
| $ svn ci KEYS |
| ``` |
| |
| ### Bump version for new release |
| |
| Run `dev/release/bump_version.sh` on a working copy of your fork not |
| `git@github.com:apache/arrow-java`: |
| |
| ```console |
| $ 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. |
| |
| ### Prepare RC and vote |
| |
| You can use `dev/release/release_rc.sh`. |
| |
| Requirements to run `release_rc.sh`: |
| |
| * You must be an Apache Arrow committer or PMC member |
| * You must prepare your PGP key for signing |
| * You must configure Maven |
| |
| 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](https://infra.apache.org/publishing-maven-artifacts.html). It |
| can be tested with the following command: |
| |
| ```bash |
| # 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: |
| |
| ```console |
| $ 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: |
| |
| ```console |
| $ 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. |
| |
| ### Publish |
| |
| We need to do the followings to publish a new release: |
| |
| * Publish the source archive to apache.org |
| * Publish the binary artifacts to repository.apache.org |
| |
| 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: |
| |
| ```console |
| $ dev/release/release.sh ${VERSION} ${RC} |
| ``` |
| |
| Here is an example to release 19.0.0 RC1: |
| |
| ```console |
| $ dev/release/release.sh 19.0.0 1 |
| ``` |
| |
| Add the release to ASF's report database via [Apache Committee Report |
| Helper](https://reporter.apache.org/addrelease.html?arrow). |
| |
| You need to do the followings to publish the binary artifacts to |
| repository.apache.org: |
| |
| * Logon to the Apache repository: |
| https://repository.apache.org/#stagingRepositories |
| * Select the Arrow staging repository you created for RC: |
| `orgapachearrow-XXXX` |
| * Click the `release` button |
| |
| ### Bump version for new development |
| |
| We 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`: |
| |
| ```console |
| $ 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 GitHub milestone |
| |
| 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"). |
| |
| ### Publish the release blog post |
| |
| Open a pull request on |
| [apache/arrow-site](https://github.com/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](https://github.com/apache/arrow-site/pull/594). |
| |
| ### Announce the new release on the mailing list |
| |
| 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](https://lists.apache.org/thread/bxpt0r8kw0ltgywnylqdroskkt6966z4). |
| |
| ``` |
| 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. |
| ``` |
| |
| ### Announce the new release on social media |
| |
| Make a post on our [BlueSky](https://bsky.app/profile/arrow.apache.org) and |
| [LinkedIn](https://www.linkedin.com/company/apache-arrow/) 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](https://bsky.app/profile/arrow.apache.org/post/3lioi6ov5h22d) |
| and [example LinkedIn post](https://www.linkedin.com/posts/apache-arrow_apache-arrow-java-1820-release-activity-7298633716522758144-L71x). |
| |
| ## Verify |
| |
| We have a script to verify a RC. |
| |
| You must install the following commands to use the script: |
| |
| * `curl` |
| * `gpg` |
| * `shasum` or `sha256sum`/`sha512sum` |
| * `tar` |
| |
| To verify a RC, run the following command line: |
| |
| ```console |
| $ dev/release/verify_rc.sh ${VERSION} ${RC} |
| ``` |
| |
| Here is an example to verify the release 19.0.0 RC1: |
| |
| ```console |
| $ dev/release/verify_rc.sh 19.0.0 1 |
| ``` |
| |
| If the verification is successful, the message `RC looks good!` is shown. |