Files
exAichatbot_agent/server-dev/sync-submodules-rsync.sh
T
2026-08-13 14:48:14 +09:00

81 lines
3.1 KiB
Bash
Executable File

#!/usr/bin/env bash
# 로컬 submodule 소스 → chatbot.exdev.co.kr work tree rsync
# (서버에서 GitHub HTTPS/SSH 미설정 시 deploy 보조)
set -euo pipefail
ROOT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"
EXDEV_SSH="${EXDEV_SSH:-aidev@chatbot.exdev.co.kr}"
REMOTE_WT="${REMOTE_WORK_TREE:-/Users/aidev/dev/exAichatbot_agent}"
log() { echo "[sync-submodules] $*"; }
SUBMODULES=(
chatbotApp-chatbot2.0-agent
chatbotApi-chatbot2.0-agent
exAiChatBot-chatbot2.0-agent
kakaoChatbotSkill-chatbot2.0-agent
chatbotDesktopApp-chatbot2.0
)
log "원격 동기화: ${EXDEV_SSH}:${REMOTE_WT}"
for path in "${SUBMODULES[@]}"; do
local_src="${ROOT_DIR}/${path}"
[[ -d "${local_src}" ]] || { echo "ERROR: ${local_src} 없음"; exit 1; }
log ">>> rsync ${path}"
rsync -az --delete \
--exclude 'node_modules/' \
--exclude 'build/' \
--exclude 'dist/' \
--exclude '.gradle/' \
--exclude 'qdrant_data/' \
--exclude 'logs/' \
--exclude '.next/' \
--exclude 'web/out/' \
--exclude '.git/' \
"${local_src}/" "${EXDEV_SSH}:${REMOTE_WT}/${path}/"
done
log "overlay 복사..."
rsync -az "${ROOT_DIR}/server-dev/docker-compose.rag.server.yml" \
"${EXDEV_SSH}:${REMOTE_WT}/server-dev/docker-compose.rag.server.yml"
rsync -az "${ROOT_DIR}/server-dev/docker-compose.oracle.yml" \
"${EXDEV_SSH}:${REMOTE_WT}/server-dev/docker-compose.oracle.yml"
rsync -az "${ROOT_DIR}/server-dev/oracle/" \
"${EXDEV_SSH}:${REMOTE_WT}/server-dev/oracle/"
rsync -az "${ROOT_DIR}/local-dev/docker-compose.rag.local.yml" \
"${EXDEV_SSH}:${REMOTE_WT}/local-dev/docker-compose.rag.local.yml" 2>/dev/null || true
ssh -o BatchMode=yes "${EXDEV_SSH}" "mkdir -p '${REMOTE_WT}/exAiChatBot-chatbot2.0-agent' '${REMOTE_WT}/server-dev/oracle/init' && \
cp '${REMOTE_WT}/server-dev/docker-compose.rag.server.yml' '${REMOTE_WT}/exAiChatBot-chatbot2.0-agent/docker-compose.server.yml' 2>/dev/null || true"
if [[ -d "${ROOT_DIR}/chatbotApp-chatbot2.0-agent/public" ]]; then
log ">>> rsync chatbotApp/public (로컬 빌드 산출물)"
rsync -az "${ROOT_DIR}/chatbotApp-chatbot2.0-agent/public/" \
"${EXDEV_SSH}:${REMOTE_WT}/chatbotApp-chatbot2.0-agent/public/"
fi
if [[ -d "${ROOT_DIR}/chatbotApp-chatbot2.0-agent/public-ai" ]]; then
log ">>> rsync chatbotApp/public-ai (AI 모드 빌드 산출물)"
rsync -az "${ROOT_DIR}/chatbotApp-chatbot2.0-agent/public-ai/" \
"${EXDEV_SSH}:${REMOTE_WT}/chatbotApp-chatbot2.0-agent/public-ai/"
fi
# Windows 체크아웃(core.autocrlf)에서 넘어온 CRLF 는 macOS 에서
# "/bin/sh^M: bad interpreter" 로 죽는다. 전송 후 실행 진입점만 LF 로 강제한다.
log "원격 실행 스크립트 LF 정규화..."
ssh -o BatchMode=yes "${EXDEV_SSH}" "bash -s" <<EOSSH
set -e
WT="${REMOTE_WT}"
for f in \$(find "\${WT}" -name gradlew -not -path '*/node_modules/*' 2>/dev/null) \
\$(find "\${WT}" -name '*.sh' -not -path '*/node_modules/*' 2>/dev/null); do
if head -c 4000 "\$f" | grep -q \$'\r'; then
tr -d '\r' < "\$f" > "\$f.lf" && mv "\$f.lf" "\$f"
echo " LF 변환: \$f"
fi
chmod +x "\$f" 2>/dev/null || true
done
EOSSH
log "✅ submodule rsync 완료"