78d549194c
tar 기반 rsync 대체 스크립트가 rsync 의 'node_modules/' 문법을 매칭하지 못해 node_modules 를 통째로 전송하다 메모리 부족으로 죽었다. 반대로 슬래시만 떼면 'build' 가 자바 패키지 kakao.response.build 까지 제외해 kakaoChatbotSkill 컴파일이 깨졌다. 선행 슬래시를 전송 루트 기준 고정으로 해석하도록 구분해 둘 다 해결한다. 배포 중 자동 커밋에 딸려 들어갔던 일회용 진단 스크립트도 함께 제거한다.
83 lines
3.3 KiB
Bash
Executable File
83 lines
3.3 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}"
|
|
# build/dist/logs 는 자바 패키지명(예: kakao.response.build)과 충돌하므로
|
|
# 선행 슬래시로 프로젝트 최상위에만 적용한다.
|
|
rsync -az --delete \
|
|
--exclude 'node_modules/' \
|
|
--exclude '.gradle/' \
|
|
--exclude 'qdrant_data/' \
|
|
--exclude '.next/' \
|
|
--exclude '.git/' \
|
|
--exclude '/build/' \
|
|
--exclude '/dist/' \
|
|
--exclude '/logs/' \
|
|
--exclude '/web/out/' \
|
|
"${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 완료"
|