BurningTimesAi/scripts/unity_project_sync.sh

88 lines
2.7 KiB
Bash
Raw Permalink Normal View History

feat(#57 후속): 옵션 A Unity 프로젝트 SessionStart 자동 pull 구축 PD님 2026-04-20 승인 "옵션 A로 진행" 수용. PC별 클론 경로 상이 수용 + C30 이행 자동화 + C30 예외 명시 불요로 전환. [자진 고지 양축] - 개발팀장 축: #57 "C30 점검 불가" 자진 고지는 FilGoodBandits 상위만 확인한 오류. 실제 DeckBuilding/.git 실존 (NerdNavis/DeckBuilding.git) - PM 축: Agent 응답 환경 판정 주장을 재실측 없이 수용 (C27 변형 위반) - feedback_git_scope_shortcut.md 양축 재발 방지 기록 [집행 7종] - scripts/unity_project_sync.sh 신설 (Lock + stale cleanup + trap 제거 + C34-12 Degraded) - .claude/settings.json SessionStart hook 편입 - scripts/verify_setup.ps1 2.8 섹션 (UNITY 경로·git·sync 4축 검증) - SKILL.md C30-1 운용 세칙 정비 (수동 점검 → SessionStart hook 자동 이행, 외연 유지) - paths.local.json.template (기존 UNITY_PROJECT_ROOT 재활용) - feedback_git_scope_shortcut.md 신설 (양축) - MEMORY.md 인덱스 [pm-auditor 감사 정정] - Critical 2·Major 3·Minor 2·Improvement 2 전수 수용 - C34-15 5문항 체크 결과 대화로그 기재 - Lock cleanup 로직 포함 - feedback 양축 기록 [Unity MCP 편집 표준 워크플로우 v1 0단계 추가 — 개발팀장 후속 Task] 본 commit 후 별도 Task 위임 (Agent 경계 보호) [C30 예외 명시 자연 종결] PD 결정 3 (C30 예외 보류) → 자동 pull 구축으로 불요 전환 Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-20 09:09:18 +00:00
#!/bin/bash
# Unity 프로젝트 SessionStart 자동 pull (2026-04-20 PD 옵션 A 승인)
#
# 역할: paths.local.json의 UNITY_PROJECT_ROOT 경로를 읽어 git pull --ff-only 수행
# 근거: C30 git 동기화 점검 의무 · 외부 저장소 Unity 프로젝트 자동 이행
# C34-12 Degraded 운영: 경로 미설정·레포 아님·pull 실패 시 경고만, 작업 차단 금지
set +e # Degraded 운영 — 실패 시 exit 0 보장
# Lock 파일 (race 방지)
feat(BT·신설): 조직 신설 Phase 1 — git 저장소 교체 + 중앙 저장소 A안 분리 PD님 2026-04-21 직접 지시 5개 중 1·2·4 이행. ## 집행 내역 1. git remote: NerdNavisAi.git → BurningTimesAi.git 교체 (BT main + 본 worktree) - E:/NerdNavisAi 레포 원격은 원상 유지 (실측 확인) 2. 중앙 저장소 A안 분리: ~/.claude/burningtimes-{live,memory,audit}/ - nerdnavis-* 중앙 저장소에서 cp -r 복사 (원본 미변경) - .junction-marker 내용 BT로 갱신 3. 본 worktree .live junction 재연결 → burningtimes-live 4. audit junction 3종 신설: .burningtimes_{auditor_calls,warning_ignored,bypass_log} 5. scripts·setup 28파일 하드코딩 일괄 치환 (nerdnavis/NerdNavis/너드나비스/NERDNAVIS → burningtimes/BurningTimes/BURNINGTIMES) 6. paths.local.json.template BT 전용 재작성 (Unity·Framework 경로 __TBD__ placeholder) 7. .gitignore: .live.bak_*/ 패턴 추가 ## 보류 항목 (PD 재논의 예정) - 3. memory/org/ 내용 초기화 (PD 지시) - 5. Unity 프로젝트 경로 (PD 신규 경로 제공 전까지) - SKILL.md·CLAUDE.md 조직명 전환 및 P17·P29 처리 - 프로젝트/수상한잡화점/ 등 수상한잡화점 관련 일괄 정리 - 코어코드/NerdNavis.Framework/ → BT-프레임워크 이름 전환 - 공유/조직공지/ 너드나비스 맥락 공지 처리 - .claude/agents/*.md frontmatter skills 참조명 ## 감사 pm-auditor 사전 감사 통과 (Critical 0건, Major 2건 commit 전 정정 완료). 매니페스트: bt-org-split-phase1 (C35-9 PreToolUse 차단 해제). Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-20 15:14:51 +00:00
LOCK_FILE="$HOME/.claude/.burningtimes_unity_sync.lock"
feat(#57 후속): 옵션 A Unity 프로젝트 SessionStart 자동 pull 구축 PD님 2026-04-20 승인 "옵션 A로 진행" 수용. PC별 클론 경로 상이 수용 + C30 이행 자동화 + C30 예외 명시 불요로 전환. [자진 고지 양축] - 개발팀장 축: #57 "C30 점검 불가" 자진 고지는 FilGoodBandits 상위만 확인한 오류. 실제 DeckBuilding/.git 실존 (NerdNavis/DeckBuilding.git) - PM 축: Agent 응답 환경 판정 주장을 재실측 없이 수용 (C27 변형 위반) - feedback_git_scope_shortcut.md 양축 재발 방지 기록 [집행 7종] - scripts/unity_project_sync.sh 신설 (Lock + stale cleanup + trap 제거 + C34-12 Degraded) - .claude/settings.json SessionStart hook 편입 - scripts/verify_setup.ps1 2.8 섹션 (UNITY 경로·git·sync 4축 검증) - SKILL.md C30-1 운용 세칙 정비 (수동 점검 → SessionStart hook 자동 이행, 외연 유지) - paths.local.json.template (기존 UNITY_PROJECT_ROOT 재활용) - feedback_git_scope_shortcut.md 신설 (양축) - MEMORY.md 인덱스 [pm-auditor 감사 정정] - Critical 2·Major 3·Minor 2·Improvement 2 전수 수용 - C34-15 5문항 체크 결과 대화로그 기재 - Lock cleanup 로직 포함 - feedback 양축 기록 [Unity MCP 편집 표준 워크플로우 v1 0단계 추가 — 개발팀장 후속 Task] 본 commit 후 별도 Task 위임 (Agent 경계 보호) [C30 예외 명시 자연 종결] PD 결정 3 (C30 예외 보류) → 자동 pull 구축으로 불요 전환 Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-20 09:09:18 +00:00
LOCK_STALE_SECONDS=300 # 5분 이상 lock = stale
# Stale lock cleanup (trap 이전)
if [ -f "$LOCK_FILE" ]; then
LOCK_MTIME=$(stat -c %Y "$LOCK_FILE" 2>/dev/null || stat -f %m "$LOCK_FILE" 2>/dev/null)
NOW=$(date +%s)
if [ -n "$LOCK_MTIME" ] && [ $((NOW - LOCK_MTIME)) -gt $LOCK_STALE_SECONDS ]; then
rm -f "$LOCK_FILE" 2>/dev/null
echo " [Unity sync] stale lock 제거 ($((NOW - LOCK_MTIME))s)"
else
echo " [Unity sync] 이미 진행 중 (lock 존재) — 스킵"
exit 0
fi
fi
# Lock 획득 + 종료 시 자동 제거 (trap)
touch "$LOCK_FILE"
trap 'rm -f "$LOCK_FILE" 2>/dev/null' EXIT
# paths.local.json 존재 확인
PATHS_FILE="paths.local.json"
if [ ! -f "$PATHS_FILE" ]; then
echo "⚠️ [Unity sync] paths.local.json 부재 — template 복사 후 UNITY_PROJECT_ROOT 설정 필요"
exit 0
fi
# UNITY_PROJECT_ROOT 추출 (jq 없으면 grep 대체)
if command -v jq >/dev/null 2>&1; then
UNITY_ROOT=$(jq -r '.UNITY_PROJECT_ROOT // empty' "$PATHS_FILE" 2>/dev/null)
else
UNITY_ROOT=$(grep -oP '"UNITY_PROJECT_ROOT"\s*:\s*"\K[^"]+' "$PATHS_FILE" 2>/dev/null)
fi
if [ -z "$UNITY_ROOT" ] || [ "$UNITY_ROOT" = "null" ]; then
echo "⚠️ [Unity sync] UNITY_PROJECT_ROOT 미설정"
exit 0
fi
# 경로 실체 확인
if [ ! -d "$UNITY_ROOT" ]; then
echo "⚠️ [Unity sync] 경로 부재: $UNITY_ROOT"
exit 0
fi
# git 레포 확인
if [ ! -d "$UNITY_ROOT/.git" ]; then
echo "⚠️ [Unity sync] git 레포 아님: $UNITY_ROOT (C30 수동 점검 대상 외)"
exit 0
fi
# fetch + pull --ff-only
cd "$UNITY_ROOT" || { echo "⚠️ [Unity sync] cd 실패"; exit 0; }
FETCH_OUT=$(git fetch origin 2>&1)
FETCH_EXIT=$?
if [ $FETCH_EXIT -ne 0 ]; then
echo "⚠️ [Unity sync] fetch 실패 (network·인증 확인 필요)"
echo "$FETCH_OUT" | head -3
exit 0
fi
BEHIND=$(git rev-list --count HEAD..@{u} 2>/dev/null || echo "0")
if [ "$BEHIND" -gt 0 ]; then
PULL_OUT=$(git pull --ff-only 2>&1)
PULL_EXIT=$?
if [ $PULL_EXIT -eq 0 ]; then
echo "✅ [Unity sync] $BEHIND 커밋 pull 완료 — $UNITY_ROOT"
else
echo "⚠️ [Unity sync] pull 실패 (충돌·manual merge 필요): $UNITY_ROOT"
echo "$PULL_OUT" | head -3
fi
else
echo "✅ [Unity sync] 최신 상태 — $UNITY_ROOT"
fi
exit 0