This is an automated email from the ASF dual-hosted git repository.
gurwls223 pushed a commit to branch branch-4.0
in repository https://gitbox.apache.org/repos/asf/spark.git
The following commit(s) were added to refs/heads/branch-4.0 by this push:
new df1a7e852c09 [SPARK-54982][INFRA] Use ASF_NEXUS_TOKEN to release and
drop staging repository when finalizing the RC
df1a7e852c09 is described below
commit df1a7e852c09e14fa17b774c738c2a84f00982a0
Author: Hyukjin Kwon <[email protected]>
AuthorDate: Fri Jan 9 16:05:10 2026 +0900
[SPARK-54982][INFRA] Use ASF_NEXUS_TOKEN to release and drop staging
repository when finalizing the RC
This PR proposes to use ASF_NEXUS_TOKEN to release and drop staging
repository when finalizing the RC.
While I am here, I made the commands more portable/universal - in practice,
I wanted to use the same commands when I test in my local.
To automatically release/drop the staging repo.
No, dev-only.
I manually tested.
No.
Closes #53744 from HyukjinKwon/minor-compat-command.
Authored-by: Hyukjin Kwon <[email protected]>
Signed-off-by: Hyukjin Kwon <[email protected]>
(cherry picked from commit c26a3e481e028961453525e065e30d93c94fd345)
Signed-off-by: Hyukjin Kwon <[email protected]>
---
.github/workflows/publish_snapshot.yml | 1 +
dev/create-release/do-release-docker.sh | 1 +
dev/create-release/release-build.sh | 34 ++++++++++++++++++++-------------
3 files changed, 23 insertions(+), 13 deletions(-)
diff --git a/.github/workflows/publish_snapshot.yml
b/.github/workflows/publish_snapshot.yml
index a5854d96a4d1..3cf799d13735 100644
--- a/.github/workflows/publish_snapshot.yml
+++ b/.github/workflows/publish_snapshot.yml
@@ -67,6 +67,7 @@ jobs:
env:
ASF_USERNAME: ${{ secrets.NEXUS_USER }}
ASF_PASSWORD: ${{ secrets.NEXUS_PW }}
+ ASF_NEXUS_TOKEN: ${{ secrets.NEXUS_TOKEN }}
GPG_KEY: "not_used"
GPG_PASSPHRASE: "not_used"
GIT_REF: ${{ matrix.branch }}
diff --git a/dev/create-release/do-release-docker.sh
b/dev/create-release/do-release-docker.sh
index eaa8073fbca6..3a395e3c266b 100755
--- a/dev/create-release/do-release-docker.sh
+++ b/dev/create-release/do-release-docker.sh
@@ -146,6 +146,7 @@ RELEASE_TAG=$RELEASE_TAG
GIT_REF=$GIT_REF
SPARK_PACKAGE_VERSION=$SPARK_PACKAGE_VERSION
ASF_USERNAME=$ASF_USERNAME
+ASF_NEXUS_TOKEN=$ASF_NEXUS_TOKEN
GIT_NAME=$GIT_NAME
GIT_EMAIL=$GIT_EMAIL
GPG_KEY=$GPG_KEY
diff --git a/dev/create-release/release-build.sh
b/dev/create-release/release-build.sh
index 21f0d052047b..9a83eab69460 100755
--- a/dev/create-release/release-build.sh
+++ b/dev/create-release/release-build.sh
@@ -40,6 +40,7 @@ SPARK_VERSION - (optional) Version of Spark being built (e.g.
2.1.2)
ASF_USERNAME - Username of ASF committer account
ASF_PASSWORD - Password of ASF committer account
+ASF_NEXUS_TOKEN - API token in ASF Nexus reposiotry
GPG_KEY - GPG key used to sign release artifacts
GPG_PASSPHRASE - Passphrase for GPG key
@@ -493,15 +494,18 @@ EOF
echo "KEYS sync'ed"
rm -rf svn-spark
- # TODO: Test it in the actual release
# Release artifacts in the Nexus repository
# Find latest orgapachespark-* repo for this release version
- REPO_ID=$(curl --retry 10 --retry-all-errors -s -u
"$ASF_USERNAME:$ASF_PASSWORD" \
- https://repository.apache.org/service/local/staging/profile_repositories |
\
- grep -A 13 "<repositoryId>orgapachespark-" | \
- awk '/<repositoryId>/ { id = $0 } /<description>/ && $0 ~ /Apache Spark
'"$RELEASE_VERSION"'/ { print id }' | \
- grep -oP '(?<=<repositoryId>)orgapachespark-[0-9]+(?=</repositoryId>)' | \
- sort -V | tail -n 1)
+ REPO_ID=$(
+ curl --retry 10 --retry-all-errors -s -u "$ASF_USERNAME:$ASF_NEXUS_TOKEN" \
+ https://repository.apache.org/service/local/staging/profile_repositories
|
+ grep -A 13 "<repositoryId>orgapachespark-" |
+ awk '/<repositoryId>/ { id = $0 }
+ /<description>/ && $0 ~ /Apache Spark '"$RELEASE_VERSION"'/ { print
id }' |
+ sed -n
's/.*<repositoryId>\(orgapachespark-[0-9][0-9]*\)<\/repositoryId>.*/\1/p' |
+ sort -V |
+ tail -n 1
+ )
if [[ -z "$REPO_ID" ]]; then
echo "No matching staging repository found for Apache Spark
$RELEASE_VERSION"
@@ -511,7 +515,7 @@ EOF
echo "Using repository ID: $REPO_ID"
# Release the repository
- curl --retry 10 --retry-all-errors -s -u "$APACHE_USERNAME:$APACHE_PASSWORD"
\
+ curl --retry 10 --retry-all-errors -s -u "$ASF_USERNAME:$ASF_NEXUS_TOKEN" \
-H "Content-Type: application/json" \
-X POST https://repository.apache.org/service/local/staging/bulk/promote \
-d "{\"data\": {\"stagedRepositoryIds\": [\"$REPO_ID\"], \"description\":
\"Apache Spark $RELEASE_VERSION\"}}"
@@ -519,9 +523,13 @@ EOF
# Wait for release to complete
echo "Waiting for release to complete..."
while true; do
- STATUS=$(curl --retry 10 --retry-all-errors -s -u
"$APACHE_USERNAME:$APACHE_PASSWORD" \
- https://repository.apache.org/service/local/staging/repository/$REPO_ID
| \
- grep -oPm1 "(?<=<type>)[^<]+")
+ STATUS=$(
+ curl --retry 10 --retry-all-errors -s -u
"$ASF_USERNAME:$ASF_NEXUS_TOKEN" \
+
https://repository.apache.org/service/local/staging/repository/$REPO_ID |
+ sed -n 's:.*<type>\([^<]*\)</type>.*:\1:p' |
+ head -n 1
+ )
+
echo "Current state: $STATUS"
if [[ "$STATUS" == "released" ]]; then
echo "Release complete."
@@ -537,7 +545,7 @@ EOF
done
# Drop the repository after release
- curl --retry 10 --retry-all-errors -s -u "$APACHE_USERNAME:$APACHE_PASSWORD"
\
+ curl --retry 10 --retry-all-errors -s -u "$ASF_USERNAME:$ASF_NEXUS_TOKEN" \
-H "Content-Type: application/json" \
-X POST https://repository.apache.org/service/local/staging/bulk/drop \
-d "{\"data\": {\"stagedRepositoryIds\": [\"$REPO_ID\"], \"description\":
\"Dropped after release\"}}"
@@ -547,7 +555,7 @@ EOF
# Remove old releases from the mirror
# Extract major.minor prefix
RELEASE_SERIES=$(echo "$RELEASE_VERSION" | cut -d. -f1-2)
-
+
# Fetch existing dist URLs
OLD_VERSION=$(svn ls https://dist.apache.org/repos/dist/release/spark/ | \
grep "^spark-$RELEASE_SERIES" | \
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]