ci: simplify stack path resolution in build-image workflow

This commit is contained in:
2025-11-01 23:13:24 +01:00
parent 25f05c6a17
commit 1f2ab358f9

View File

@@ -865,7 +865,9 @@ 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"
STACK_PATH_DISPLAY="~/deployment/stacks/staging"
STACK_PATH_DISPLAY="~/deployment/stacks/staging"
SELECTED_TAG="${SELECTED_IMAGE##*:}" SELECTED_TAG="${SELECTED_IMAGE##*:}"
SELECTED_REPO="${SELECTED_IMAGE%:*}" SELECTED_REPO="${SELECTED_IMAGE%:*}"
@@ -880,67 +882,31 @@ jobs:
echo " Image: ${SELECTED_IMAGE}" echo " Image: ${SELECTED_IMAGE}"
echo " Tag: ${SELECTED_TAG}" echo " Tag: ${SELECTED_TAG}"
echo " Host: ${DEPLOYMENT_HOST}" echo " Host: ${DEPLOYMENT_HOST}"
echo " Stack: ${STACK_PATH}" echo " Stack: ${STACK_PATH_DISPLAY}"
FULL_IMAGE_ARG=$(printf '%q' "$SELECTED_IMAGE") FULL_IMAGE_ARG=$(printf '%q' "$SELECTED_IMAGE")
FALLBACK_IMAGE_ARG=$(printf '%q' "$FALLBACK_IMAGE") FALLBACK_IMAGE_ARG=$(printf '%q' "$FALLBACK_IMAGE")
IMAGE_NAME_ARG=$(printf '%q' "$IMAGE_NAME") IMAGE_NAME_ARG=$(printf '%q' "$IMAGE_NAME")
STACK_PATH_ARG=$(printf '%q' "$STACK_PATH")
REGISTRY_ARG=$(printf '%q' "$REGISTRY_HOST") REGISTRY_ARG=$(printf '%q' "$REGISTRY_HOST")
ssh -i ~/.ssh/production \ ssh -i ~/.ssh/production \
-o StrictHostKeyChecking=no \ -o StrictHostKeyChecking=no \
-o UserKnownHostsFile=/dev/null \ -o UserKnownHostsFile=/dev/null \
deploy@${DEPLOYMENT_HOST} "bash -s -- $FULL_IMAGE_ARG $FALLBACK_IMAGE_ARG $IMAGE_NAME_ARG $STACK_PATH_ARG $REGISTRY_ARG" <<'EOF' deploy@${DEPLOYMENT_HOST} "bash -s -- $FULL_IMAGE_ARG $FALLBACK_IMAGE_ARG $IMAGE_NAME_ARG $REGISTRY_ARG" <<'EOF'
set -e set -e
FULL_IMAGE="$1" FULL_IMAGE="$1"
FALLBACK_IMAGE="$2" FALLBACK_IMAGE="$2"
IMAGE_NAME="$3" IMAGE_NAME="$3"
STACK_PATH="$4" REGISTRY="$4"
REGISTRY="$5" shift 4
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)"
[ -z "$USER_HOME" ] && USER_HOME="$HOME" [ -z "$USER_HOME" ] && USER_HOME="$HOME"
[ -z "$USER_HOME" ] && USER_HOME="/home/$CURRENT_USER" [ -z "$USER_HOME" ] && USER_HOME="/home/$CURRENT_USER"
RAW_PATH="$STACK_PATH" STACK_TARGET="${USER_HOME}/deployment/stacks/staging"
[ -z "$RAW_PATH" ] && RAW_PATH="~/deployment/stacks/staging"
FIRST_CHAR="${RAW_PATH:0:1}"
case "$FIRST_CHAR" in
"~")
if [ "${RAW_PATH:0:2}" = "~/" ] || [ "$RAW_PATH" = "~" ]; then
STACK_TARGET="${USER_HOME}${RAW_PATH:1}"
else
TARGET_SPEC="${RAW_PATH%%/*}"
TARGET_USER="${TARGET_SPEC#~}"
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
# Ensure staging stack directory exists # Ensure staging stack directory exists
mkdir -p "${STACK_TARGET}" mkdir -p "${STACK_TARGET}"