This is an automated email from the ASF dual-hosted git repository.
kou pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/arrow-java.git
The following commit(s) were added to refs/heads/main by this push:
new 34f4ffe8 GH-529: [Release] Add support for uploading binary artifacts
to repository.apache.org (#530)
34f4ffe8 is described below
commit 34f4ffe81ed8b933be54ef0a91802ac3a377d0dd
Author: Sutou Kouhei <[email protected]>
AuthorDate: Fri Jan 17 20:21:54 2025 +0900
GH-529: [Release] Add support for uploading binary artifacts to
repository.apache.org (#530)
Fixes GH-529.
---
.gitignore | 1 +
dev/release/.env.example | 27 ++++++++++++++
dev/release/README.md | 52 +++++++++++++++++----------
dev/release/release_rc.sh | 91 ++++++++++++++++++++++++++++++++++++++++++++++-
4 files changed, 151 insertions(+), 20 deletions(-)
diff --git a/.gitignore b/.gitignore
index 8c7bd135..205be77e 100644
--- a/.gitignore
+++ b/.gitignore
@@ -16,6 +16,7 @@
/apache-arrow-java-*
/apache-arrow-java.tar.gz
/build/
+/dev/release/.env
/dev/release/apache-rat-0.16.1.jar
/dev/release/filtered_rat.txt
/dev/release/rat.xml
diff --git a/dev/release/.env.example b/dev/release/.env.example
new file mode 100644
index 00000000..cc7fd58b
--- /dev/null
+++ b/dev/release/.env.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.
+
+# The GPG key ID to sign artifacts. The GPG key ID must be registered
+# to both of the followings:
+#
+# * https://dist.apache.org/repos/dist/dev/arrow/KEYS
+# * https://dist.apache.org/repos/dist/release/arrow/KEYS
+#
+# See these files how to import your GPG key ID to these files.
+#
+# You must set this.
+#GPG_KEY_ID=08D3564B7C6A9CAFBFF6A66791D18FCF079F8007
diff --git a/dev/release/README.md b/dev/release/README.md
index eafbb61b..0294ebed 100644
--- a/dev/release/README.md
+++ b/dev/release/README.md
@@ -56,30 +56,13 @@ RC without merging the pull request, the script to cut a RC
is failed.
### Prepare RC and vote
-Run `dev/release/release_rc.sh` on a working copy of
-`[email protected]:apache/arrow-java` not your fork:
-
-```console
-$ git clone [email protected]:apache/arrow-java.git
-$ cd arrow-java
-$ GH_TOKEN=${YOUR_GITHUB_TOKEN} dev/release/release_rc.sh ${RC}
-(Send a vote email to [email protected].
- You can use a draft shown by release_rc.sh for the email.)
-```
-
-Here is an example to release RC1:
-
-```console
-$ GH_TOKEN=${YOUR_GITHUB_TOKEN} 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.
+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
If you don't have a PGP key,
https://infra.apache.org/release-signing.html#generate may be helpful.
@@ -102,6 +85,37 @@ $ head KEYS
$ svn ci KEYS
```
+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
+`[email protected]:apache/arrow-java` not your fork:
+
+```console
+$ git clone [email protected]:apache/arrow-java.git
+$ cd arrow-java
+$ GH_TOKEN=${YOUR_GITHUB_TOKEN} dev/release/release_rc.sh ${RC}
+(Send a vote email to [email protected].
+ You can use a draft shown by release_rc.sh for the email.)
+```
+
+Here is an example to release RC1:
+
+```console
+$ GH_TOKEN=${YOUR_GITHUB_TOKEN} 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:
diff --git a/dev/release/release_rc.sh b/dev/release/release_rc.sh
index de053578..dd61f9c9 100755
--- a/dev/release/release_rc.sh
+++ b/dev/release/release_rc.sh
@@ -84,6 +84,13 @@ artifacts_dir="apache-arrow-java-${version}-rc${rc}"
signed_artifacts_dir="${artifacts_dir}-signed"
if [ "${RELEASE_SIGN}" -gt 0 ]; then
+ if [ ! -f "${SOURCE_DIR}/.env" ]; then
+ echo "You must create ${SOURCE_DIR}/.env"
+ echo "You can use ${SOURCE_DIR}/.env.example as template"
+ exit 1
+ fi
+ . "${SOURCE_DIR}/.env"
+
git_origin_url="$(git remote get-url origin)"
repository="${git_origin_url#*github.com?}"
repository="${repository%.git}"
@@ -120,21 +127,103 @@ if [ "${RELEASE_SIGN}" -gt 0 ]; then
continue
;;
esac
- gpg --armor \
+ gpg \
+ --armor \
--detach-sig \
+ --local-user "${GPG_KEY_ID}" \
--output "${signed_artifacts_dir}/$(basename "${artifact}").asc" \
"${artifact}"
done
fi
+# arrow-c-data-18.2.0-sources.jar ->
+# jar
+extract_type() {
+ local path="$1"
+ echo "${path}" | grep -o "[^.]*$"
+}
+
+# arrow-c-data-18.2.0-sources.jar arrow-c-data-18.2.0 ->
+# sources
+extract_classifier() {
+ local path="$1"
+ local base="$2"
+ basename "${path}" | sed -e "s/^${base}-//g" -e "s/\.[^.]*$//g"
+}
+
if [ "${RELEASE_UPLOAD}" -gt 0 ]; then
echo "Uploading signature"
gh release upload "${rc_tag}" \
--clobber \
--repo "${repository}" \
"${signed_artifacts_dir}"/*.asc
+
+ echo "Uploading packages"
+ for pom in "${artifacts_dir}"/*.pom; do
+ base=$(basename "${pom}" .pom)
+ files=()
+ types=()
+ classifiers=()
+ args=()
+ args+=(deploy:deploy-file)
+
args+=(-Durl=https://repository.apache.org/service/local/staging/deploy/maven2)
+ args+=(-DrepositoryId=apache.releases.https)
+ args+=(-DretryFailedDeploymentCount=10)
+ args+=(-DpomFile="${pom}")
+ if [ -f "${artifacts_dir}/${base}.jar" ]; then
+ jar="${artifacts_dir}/${base}.jar"
+ args+=(-Dfile="${jar}")
+ files+=("${signed_artifacts_dir}/${base}.jar.asc")
+ types+=("jar.asc")
+ classifiers+=("")
+ else
+ args+=(-Dfile="${pom}")
+ fi
+ files+=("${signed_artifacts_dir}/${base}.pom.asc")
+ types+=("pom.asc")
+ classifiers+=("")
+ if [ "$(echo "${artifacts_dir}/${base}"-*)" !=
"${artifacts_dir}/${base}-*" ]; then
+ for other_file in "${artifacts_dir}/${base}"-*; do
+ type="$(extract_type "${other_file}")"
+ case "${type}" in
+ sha256 | sha512)
+ continue
+ ;;
+ esac
+ classifier=$(extract_classifier "${other_file}" "${base}")
+ files+=("${other_file}")
+ types+=("${type}")
+ classifiers+=("${classifier}")
+ other_file_base="$(basename "${other_file}")"
+ files+=("${signed_artifacts_dir}/${other_file_base}.asc")
+ types+=("${type}.asc")
+ classifiers+=("${classifier}")
+ done
+ fi
+ args+=(-Dfiles="$(
+ IFS=,
+ echo "${files[*]}"
+ )")
+ args+=(-Dtypes="$(
+ IFS=,
+ echo "${types[*]}"
+ )")
+ args+=(-Dclassifiers="$(
+ IFS=,
+ echo "${classifiers[*]}"
+ )")
+ mvn "${args[@]}"
+ done
+
+ echo
+ echo "Success!"
+ echo "Press the 'Close' button manually by Web interface:"
+ echo " https://repository.apache.org/#stagingRepositories"
+ echo "It publishes the artifacts to the staging repository:"
+ echo "
https://repository.apache.org/content/repositories/staging/org/apache/arrow/"
fi
+echo
echo "Draft email for [email protected] mailing list"
echo ""
echo "---------------------------------------------------------"