ci: improve stack path handling in staging deployment

- Simplify local stack path normalization
- Enhance remote shell path resolution to handle user-specific paths (e.g. ~username/path)
- Better handling of escaped tilde paths in SSH heredoc
This commit is contained in:
2025-11-01 23:06:54 +01:00
parent 988e14f3c2
commit 25f05c6a17

View File

@@ -865,14 +865,7 @@ jobs:
if [ -z "$SELECTED_IMAGE" ]; then if [ -z "$SELECTED_IMAGE" ]; then
SELECTED_IMAGE="$DEFAULT_IMAGE" SELECTED_IMAGE="$DEFAULT_IMAGE"
fi fi
STACK_PATH="~/deployment/stacks/staging"
# Normalize stack path locally to avoid "~" confusion when passing to remote shell
STACK_PATH_RAW="~/deployment/stacks/staging"
if [ -n "$HOME" ]; then
STACK_PATH="${STACK_PATH_RAW/#\~/$HOME}"
else
STACK_PATH="$STACK_PATH_RAW"
fi
SELECTED_TAG="${SELECTED_IMAGE##*:}" SELECTED_TAG="${SELECTED_IMAGE##*:}"
SELECTED_REPO="${SELECTED_IMAGE%:*}" SELECTED_REPO="${SELECTED_IMAGE%:*}"
@@ -907,24 +900,46 @@ jobs:
STACK_PATH="$4" STACK_PATH="$4"
REGISTRY="$5" REGISTRY="$5"
shift 5 shift 5
if [ "${STACK_PATH:0:1}" = "\\" ] && [ "${STACK_PATH:1:1}" = "~" ]; then
STACK_PATH="${STACK_PATH:1}"
fi
CURRENT_USER="$(whoami)" CURRENT_USER="$(whoami)"
USER_HOME="$(getent passwd "$CURRENT_USER" | cut -d: -f6 2>/dev/null)" USER_HOME="$(getent passwd "$CURRENT_USER" | cut -d: -f6 2>/dev/null)"
if [ -z "$USER_HOME" ]; then [ -z "$USER_HOME" ] && USER_HOME="$HOME"
USER_HOME="$HOME" [ -z "$USER_HOME" ] && USER_HOME="/home/$CURRENT_USER"
fi
if [ -z "$USER_HOME" ]; then RAW_PATH="$STACK_PATH"
USER_HOME="/home/$CURRENT_USER" [ -z "$RAW_PATH" ] && RAW_PATH="~/deployment/stacks/staging"
fi
FIRST_CHAR="${RAW_PATH:0:1}"
STACK_TARGET="$STACK_PATH" case "$FIRST_CHAR" in
if [ -z "$STACK_TARGET" ]; then "~")
STACK_TARGET="$USER_HOME/deployment/stacks/staging" if [ "${RAW_PATH:0:2}" = "~/" ] || [ "$RAW_PATH" = "~" ]; then
fi STACK_TARGET="${USER_HOME}${RAW_PATH:1}"
case "$STACK_TARGET" in else
~*) STACK_TARGET="${USER_HOME}${STACK_TARGET#~}" ;; TARGET_SPEC="${RAW_PATH%%/*}"
/*) ;; TARGET_USER="${TARGET_SPEC#~}"
*) STACK_TARGET="${USER_HOME}/${STACK_TARGET}" ;; TARGET_REMAINDER=""
if [ "$TARGET_SPEC" != "$RAW_PATH" ]; then
TARGET_REMAINDER="${RAW_PATH#*/}"
fi
TARGET_HOME="$(getent passwd "$TARGET_USER" | cut -d: -f6 2>/dev/null)"
[ -z "$TARGET_HOME" ] && TARGET_HOME="/home/$TARGET_USER"
if [ -n "$TARGET_REMAINDER" ] && [ "$TARGET_REMAINDER" != "$RAW_PATH" ]; then
STACK_TARGET="${TARGET_HOME}/${TARGET_REMAINDER}"
else
STACK_TARGET="$TARGET_HOME"
fi
fi
;;
"/")
STACK_TARGET="$RAW_PATH"
;;
*)
STACK_TARGET="${USER_HOME}/${RAW_PATH}"
;;
esac esac
# Ensure staging stack directory exists # Ensure staging stack directory exists