99 lines
4.5 KiB
Bash
Executable File
99 lines
4.5 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
# GoldenChart post-receive — Track A (git push main → deploy.sh)
|
|
# 설치: cp scripts/post-receive /Volumes/ADATA/git/goldenChart.git/hooks/post-receive
|
|
set -euo pipefail
|
|
|
|
GIT_DIR="/Volumes/ADATA/git/goldenChart.git"
|
|
WORK_TREE="${WORK_TREE:-/Users/aidev/apps/goldenChart}"
|
|
DEPLOY_SCRIPT="/Volumes/ADATA/git/deploy.sh"
|
|
SUMMARY_SCRIPT="/Volumes/ADATA/git/git-push-summary.sh"
|
|
DEPLOY_LOG="/Volumes/ADATA/logs/deploy/deploy.log"
|
|
SUMMARY_DIR="/Volumes/ADATA/logs/deploy/push-summaries"
|
|
HOOK_TAG="[post-receive]"
|
|
|
|
mkdir -p "$(dirname "$DEPLOY_LOG")" "$SUMMARY_DIR"
|
|
|
|
echo ""
|
|
echo "$(date '+%Y-%m-%d %H:%M:%S') $HOOK_TAG =============================="
|
|
echo "$(date '+%Y-%m-%d %H:%M:%S') $HOOK_TAG Track A — git push 수신"
|
|
echo "$(date '+%Y-%m-%d %H:%M:%S') $HOOK_TAG =============================="
|
|
|
|
while read -r OLDREV NEWREV REFNAME; do
|
|
BRANCH_NAME="${REFNAME#refs/heads/}"
|
|
echo "$(date '+%Y-%m-%d %H:%M:%S') $HOOK_TAG 브랜치: $BRANCH_NAME ($OLDREV → $NEWREV)"
|
|
|
|
if [ -x "$SUMMARY_SCRIPT" ]; then
|
|
SUMMARY_FILE="$("$SUMMARY_SCRIPT" "$GIT_DIR" "$OLDREV" "$NEWREV" "$REFNAME" "$SUMMARY_DIR" || true)"
|
|
if [ -n "${SUMMARY_FILE:-}" ] && [ -f "$SUMMARY_FILE" ]; then
|
|
echo "$(date '+%Y-%m-%d %H:%M:%S') $HOOK_TAG 변경 요약: $SUMMARY_FILE"
|
|
head -20 "$SUMMARY_FILE" | sed "s/^/$(date '+%Y-%m-%d %H:%M:%S') $HOOK_TAG /"
|
|
fi
|
|
else
|
|
echo "$(date '+%Y-%m-%d %H:%M:%S') $HOOK_TAG [WARN] 요약 스크립트 없음: $SUMMARY_SCRIPT"
|
|
fi
|
|
|
|
if [ "$BRANCH_NAME" = "main" ]; then
|
|
echo "$(date '+%Y-%m-%d %H:%M:%S') $HOOK_TAG main → deploy.sh 실행"
|
|
export SERVICE_NAME="${SERVICE_NAME:-all}"
|
|
"$DEPLOY_SCRIPT" 2>&1 | tee -a "$DEPLOY_LOG"
|
|
EXIT_CODE=${PIPESTATUS[0]}
|
|
if [ "$EXIT_CODE" -ne 0 ]; then
|
|
echo "$(date '+%Y-%m-%d %H:%M:%S') $HOOK_TAG [ERROR] 배포 실패 (exit: $EXIT_CODE)"
|
|
exit "$EXIT_CODE"
|
|
fi
|
|
echo "$(date '+%Y-%m-%d %H:%M:%S') $HOOK_TAG 배포 완료"
|
|
|
|
RELOAD="${WORK_TREE}/scripts/reload-frontend-desktop-static.sh"
|
|
if [ -x "$RELOAD" ]; then
|
|
echo "$(date '+%Y-%m-%d %H:%M:%S') $HOOK_TAG desktop updates static 동기화"
|
|
WORK_TREE="$WORK_TREE" "$RELOAD" >> "$DEPLOY_LOG" 2>&1 || true
|
|
fi
|
|
|
|
chmod +x "$WORK_TREE/scripts/update-desktop-source-state.sh" 2>/dev/null || true
|
|
if [[ -x "$WORK_TREE/scripts/update-desktop-source-state.sh" ]]; then
|
|
WORK_TREE="$WORK_TREE" "$WORK_TREE/scripts/update-desktop-source-state.sh" || true
|
|
fi
|
|
|
|
# Desktop(macOS·Windows) Jenkins 빌드 — 데스크톱 영향 변경 시에만 자동 트리거
|
|
WORK_TREE="${WORK_TREE:-/Users/aidev/apps/goldenChart}"
|
|
TRIGGER="${WORK_TREE}/scripts/trigger-desktop-jenkins-build.sh"
|
|
DESKTOP_BUILD_NEEDED=1
|
|
if [[ -x "$WORK_TREE/scripts/desktop-version-scope.sh" ]]; then
|
|
# shellcheck disable=SC1091
|
|
source "$WORK_TREE/scripts/desktop-version-scope.sh"
|
|
if ! desktop_version_diff_affects_app "$OLDREV..$NEWREV"; then
|
|
DESKTOP_BUILD_NEEDED=0
|
|
echo "$(date '+%Y-%m-%d %H:%M:%S') $HOOK_TAG Desktop Jenkins 스kip — 데스크톱 영향 없는 변경"
|
|
fi
|
|
fi
|
|
if [ "$DESKTOP_BUILD_NEEDED" = "1" ] && [ -x "$TRIGGER" ]; then
|
|
echo "$(date '+%Y-%m-%d %H:%M:%S') $HOOK_TAG Desktop Jenkins 빌드 트리거"
|
|
if "$TRIGGER" >> "$DEPLOY_LOG" 2>&1; then
|
|
echo "$(date '+%Y-%m-%d %H:%M:%S') $HOOK_TAG Desktop 빌드 큐 등록 완료"
|
|
else
|
|
echo "$(date '+%Y-%m-%d %H:%M:%S') $HOOK_TAG [WARN] Desktop Jenkins 트리거 실패 (웹 배포는 성공)"
|
|
fi
|
|
elif [ "$DESKTOP_BUILD_NEEDED" = "1" ]; then
|
|
echo "$(date '+%Y-%m-%d %H:%M:%S') $HOOK_TAG [WARN] trigger-desktop-jenkins-build.sh 없음: $TRIGGER"
|
|
fi
|
|
|
|
# Mobile(Android APK) Jenkins 빌드 — git push 성공 후 자동
|
|
TRIGGER_MOBILE="${WORK_TREE}/scripts/trigger-mobile-jenkins-build.sh"
|
|
if [ -x "$TRIGGER_MOBILE" ]; then
|
|
echo "$(date '+%Y-%m-%d %H:%M:%S') $HOOK_TAG Mobile Jenkins 빌드 트리거"
|
|
if "$TRIGGER_MOBILE" >> "$DEPLOY_LOG" 2>&1; then
|
|
echo "$(date '+%Y-%m-%d %H:%M:%S') $HOOK_TAG Mobile 빌드 큐 등록 완료"
|
|
else
|
|
echo "$(date '+%Y-%m-%d %H:%M:%S') $HOOK_TAG [WARN] Mobile Jenkins 트리거 실패 (웹 배포는 성공)"
|
|
fi
|
|
else
|
|
echo "$(date '+%Y-%m-%d %H:%M:%S') $HOOK_TAG [WARN] trigger-mobile-jenkins-build.sh 없음: $TRIGGER_MOBILE"
|
|
fi
|
|
else
|
|
echo "$(date '+%Y-%m-%d %H:%M:%S') $HOOK_TAG '$BRANCH_NAME' — 배포 스킵 (main만)"
|
|
fi
|
|
done
|
|
|
|
echo "$(date '+%Y-%m-%d %H:%M:%S') $HOOK_TAG =============================="
|
|
echo ""
|