This is an automated email from the ASF dual-hosted git repository.
diqiu50 pushed a commit to branch feature/10448-non-interactive-release
in repository https://gitbox.apache.org/repos/asf/gravitino.git
The following commit(s) were added to
refs/heads/feature/10448-non-interactive-release by this push:
new 69c84de051 [MINOR] fix(release): resolve shell script issues for
non-interactive mode
69c84de051 is described below
commit 69c84de0514cadfea5e1d286354b77328e3ed670
Author: diqiu50 <[email protected]>
AuthorDate: Wed Mar 18 11:34:36 2026 +0800
[MINOR] fix(release): resolve shell script issues for non-interactive mode
- Add :) case in getopts for missing option arguments
- Replace error() call before release-util.sh is sourced with inline
echo+exit
- Add security warning in help text for -p/-t flags
- Export GIT_BRANCH, ASF_PASSWORD, GPG_PASSPHRASE after getopts for child
scripts
- Use \${PYPI_API_TOKEN:-} to avoid unbound variable error under set -u
- Use \${GPG_PASSPHRASE:-} and \${JAVA_HOME:-} in docker path
- Fix RC_COUNT=0 check to treat 0 as missing (not valid)
- Fix run_silent to use if/! pattern so set -e does not swallow error output
- Fix NRC_COUNT wiring: use auto-detected value as default, only override
when -r is explicitly provided
- Use \${VAR:-} pattern for ASF_USERNAME, GIT_NAME, ASF_PASSWORD,
GPG_PASSPHRASE in get_release_info
---
dev/release/do-release.sh | 18 +++++++++++-------
dev/release/release-util.sh | 19 +++++++++----------
2 files changed, 20 insertions(+), 17 deletions(-)
diff --git a/dev/release/do-release.sh b/dev/release/do-release.sh
index d58b3eca90..8f8d9eb033 100755
--- a/dev/release/do-release.sh
+++ b/dev/release/do-release.sh
@@ -42,13 +42,14 @@ while getopts ":b:s:p:t:r:nyh" opt; do
echo " -s <step> Release step to execute: tag, build, docs,
publish, finalize"
echo " -r <num> Release candidate number (e.g., 6 for rc6)"
echo " -n Dry run mode"
- echo " -p <pass> GPG passphrase"
- echo " -t <pass> ASF password"
+ echo " -p <pass> GPG passphrase (insecure; prefer GPG_PASSPHRASE
env var)"
+ echo " -t <pass> ASF password (insecure; prefer ASF_PASSWORD env
var)"
echo " -y Force continue without confirmation"
echo " -h Show this help message"
exit 0
;;
- \?) error "Invalid option: $OPTARG" ;;
+ :) echo "Option -$OPTARG requires an argument." >&2; exit 1 ;;
+ \?) echo "Invalid option: -$OPTARG" >&2; exit 1 ;;
esac
done
@@ -56,6 +57,9 @@ export DRY_RUN=${DRY_RUN:-0}
export FORCE=${FORCE:-0}
export RC_COUNT=${RC_COUNT:-0}
export RELEASE_STEP=${RELEASE_STEP:-}
+export GIT_BRANCH=${GIT_BRANCH:-}
+export ASF_PASSWORD=${ASF_PASSWORD:-}
+export GPG_PASSPHRASE=${GPG_PASSPHRASE:-}
echo "DRY_RUN=$DRY_RUN FORCE=$FORCE RC_COUNT=$RC_COUNT
RELEASE_STEP=$RELEASE_STEP"
@@ -75,7 +79,7 @@ fi
. "$SELF/release-util.sh"
if ! is_dry_run; then
- if [[ -z "$PYPI_API_TOKEN" ]]; then
+ if [[ -z "${PYPI_API_TOKEN:-}" ]]; then
echo 'The environment variable PYPI_API_TOKEN is not set. Exiting.'
exit 1
fi
@@ -83,10 +87,10 @@ fi
if [ "$RUNNING_IN_DOCKER" = "1" ]; then
# Inside docker, need to import the GPG key stored in the current directory.
- echo $GPG_PASSPHRASE | $GPG --passphrase-fd 0 --import "$SELF/gpg.key"
+ echo "${GPG_PASSPHRASE:-}" | $GPG --passphrase-fd 0 --import "$SELF/gpg.key"
# We may need to adjust the path since JAVA_HOME may be overridden by the
driver script.
- if [ -n "$JAVA_HOME" ]; then
+ if [ -n "${JAVA_HOME:-}" ]; then
export PATH="$JAVA_HOME/bin:$PATH"
else
# JAVA_HOME for the openjdk package.
@@ -99,7 +103,7 @@ else
GIT_BRANCH=${GIT_BRANCH:-}
RC_COUNT=${RC_COUNT:-0}
- if [ -z "$GIT_BRANCH" ] || [ -z "$RELEASE_VERSION" ] || [ -z "$RC_COUNT" ];
then
+ if [ -z "$GIT_BRANCH" ] || [ -z "$RELEASE_VERSION" ] || [ "${RC_COUNT:-0}"
-eq 0 ]; then
get_release_info
fi
fi
diff --git a/dev/release/release-util.sh b/dev/release/release-util.sh
index 37988d3da5..28ea6513f6 100755
--- a/dev/release/release-util.sh
+++ b/dev/release/release-util.sh
@@ -72,10 +72,8 @@ function run_silent {
echo "Command: $@"
echo "Log file: $LOG_FILE"
- "$@" 1>"$LOG_FILE" 2>&1
-
- local EC=$?
- if [ $EC != 0 ]; then
+ if ! "$@" 1>"$LOG_FILE" 2>&1; then
+ local EC=$?
echo "Command FAILED. Check full logs for details."
tail "$LOG_FILE"
exit $EC
@@ -146,10 +144,11 @@ function get_release_info {
export NEXT_VERSION
export RELEASE_VERSION=$(read_config "Release" "$RELEASE_VERSION"
RELEASE_VERSION)
- if [ "$FORCE" = "1" ]; then
+ # If -r was explicitly provided (non-zero), override the auto-detected
NRC_COUNT
+ if [ "${RC_COUNT:-0}" -gt 0 ]; then
NRC_COUNT=$RC_COUNT
fi
- RC_COUNT=$(read_config "RC #" "$RC_COUNT" NRC_COUNT)
+ RC_COUNT=$(read_config "RC #" "$NRC_COUNT" NRC_COUNT)
export RC_COUNT
# Check if the RC already exists, and if re-creating the RC, skip tag
creation.
@@ -182,11 +181,11 @@ function get_release_info {
export GRAVITINO_PACKAGE_VERSION="$RELEASE_TAG"
# Gather some user information.
- if [ -z "$ASF_USERNAME" ]; then
+ if [ -z "${ASF_USERNAME:-}" ]; then
export ASF_USERNAME=$(read_config "ASF user" "$LOGNAME" ASF_USERNAME)
fi
- if [ -z "$GIT_NAME" ]; then
+ if [ -z "${GIT_NAME:-}" ]; then
GIT_NAME=$(git config user.name || echo "")
export GIT_NAME=$(read_config "Full name" "$GIT_NAME" GIT_NAME)
fi
@@ -220,14 +219,14 @@ EOF
fi
if ! is_dry_run; then
- if [ -z "$ASF_PASSWORD" ]; then
+ if [ -z "${ASF_PASSWORD:-}" ]; then
stty -echo && printf "ASF password: " && read ASF_PASSWORD && printf
'\n' && stty echo
fi
else
ASF_PASSWORD="***INVALID***"
fi
- if [ -z "$GPG_PASSPHRASE" ]; then
+ if [ -z "${GPG_PASSPHRASE:-}" ]; then
stty -echo && printf "GPG passphrase: " && read GPG_PASSPHRASE && printf
'\n' && stty echo
fi