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
 

Reply via email to