#!/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 # Desktop(macOS·Windows) Jenkins 빌드 — git push 성공 후 자동 (웹 배포와 독립) WORK_TREE="${WORK_TREE:-/Users/aidev/apps/goldenChart}" TRIGGER="${WORK_TREE}/scripts/trigger-desktop-jenkins-build.sh" if [ -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 else 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 ""