140 lines
4.4 KiB
Bash
Executable File
140 lines
4.4 KiB
Bash
Executable File
#!/usr/bin/env bash
|
||
#
|
||
# gameservice-fe-agent installer
|
||
# 현재 Git 프로젝트의 .claude/common 경로에 gameservice-fe-agent 저장소를
|
||
# submodule 로 추가하고, templates/ 에서 프로젝트 지침 양식과
|
||
# CLAUDE.md 템플릿을 복사합니다.
|
||
#
|
||
# 사용법:
|
||
# bash scripts/install.sh <repo-url> [<branch>]
|
||
#
|
||
# 예:
|
||
# bash scripts/install.sh https://git.sginfra.net/sgp-web-d/gameservice-fe-agent master
|
||
#
|
||
set -euo pipefail
|
||
|
||
REPO_URL="${1:-}"
|
||
BRANCH="${2:-master}"
|
||
TARGET_PATH=".claude/common"
|
||
PROJECT_PATH=".claude/project"
|
||
|
||
if [[ -z "$REPO_URL" ]]; then
|
||
echo "❌ 사용법: bash scripts/install.sh <repo-url> [branch]" >&2
|
||
echo " 예: bash scripts/install.sh https://git.sginfra.net/sgp-web-d/gameservice-fe-agent master" >&2
|
||
exit 1
|
||
fi
|
||
|
||
# Git 프로젝트인지 확인
|
||
if ! git rev-parse --is-inside-work-tree >/dev/null 2>&1; then
|
||
echo "❌ 현재 디렉토리는 Git 저장소가 아닙니다. 먼저 'git init' 후 실행해주세요." >&2
|
||
exit 1
|
||
fi
|
||
|
||
# 루트로 이동
|
||
cd "$(git rev-parse --show-toplevel)"
|
||
|
||
# 1) Submodule 추가
|
||
if [[ -d "$TARGET_PATH" ]]; then
|
||
echo "⚠️ '$TARGET_PATH' 경로가 이미 존재합니다. submodule 추가를 건너뜁니다."
|
||
else
|
||
echo "📦 gameservice-fe-agent 를 submodule 로 추가합니다..."
|
||
git submodule add -b "$BRANCH" "$REPO_URL" "$TARGET_PATH"
|
||
git submodule update --init --recursive
|
||
echo "✅ submodule 추가 완료: $TARGET_PATH"
|
||
fi
|
||
|
||
# 2) 프로젝트 지침 양식 복사 (templates/project/ → .claude/project/)
|
||
mkdir -p "$PROJECT_PATH"
|
||
|
||
TEMPLATE_DIR="$TARGET_PATH/templates/project"
|
||
if [[ -d "$TEMPLATE_DIR" ]]; then
|
||
echo "📝 프로젝트 지침 양식을 복사합니다..."
|
||
for f in "$TEMPLATE_DIR"/*.md; do
|
||
[[ -e "$f" ]] || continue
|
||
name="$(basename "$f")"
|
||
dest="$PROJECT_PATH/$name"
|
||
if [[ -f "$dest" ]]; then
|
||
echo " ⏭ $dest (이미 존재 - 건너뜀)"
|
||
else
|
||
cp "$f" "$dest"
|
||
echo " ✅ $dest"
|
||
fi
|
||
done
|
||
else
|
||
echo "⚠️ $TEMPLATE_DIR 를 찾지 못했습니다. 공통 저장소의 templates 가 오래됐을 수 있습니다."
|
||
fi
|
||
|
||
# 3) 루트 CLAUDE.md 템플릿 복사
|
||
if [[ ! -f "CLAUDE.md" ]]; then
|
||
TPL_FILE="$TARGET_PATH/templates/CLAUDE.md.tpl"
|
||
if [[ -f "$TPL_FILE" ]]; then
|
||
cp "$TPL_FILE" CLAUDE.md
|
||
echo "✅ CLAUDE.md 템플릿을 생성했습니다."
|
||
else
|
||
cat > CLAUDE.md <<'EOF'
|
||
# <프로젝트 이름>
|
||
|
||
## 공통 지침
|
||
@.claude/common/CLAUDE.md
|
||
|
||
## 프로젝트 지침
|
||
@.claude/project/overview.md
|
||
@.claude/project/conventions.md
|
||
@.claude/project/architecture.md
|
||
|
||
## 슬래시 커맨드 연결
|
||
|
||
- `/init` 커맨드가 실행되면 반드시 `project-init` 스킬을 호출하세요.
|
||
EOF
|
||
echo "✅ CLAUDE.md 템플릿을 생성했습니다. (fallback)"
|
||
fi
|
||
else
|
||
echo "ℹ️ 기존 CLAUDE.md 가 이미 존재합니다. 아래 블록을 수동으로 추가하세요:"
|
||
echo ""
|
||
echo " ## 공통 지침"
|
||
echo " @.claude/common/CLAUDE.md"
|
||
echo ""
|
||
echo " ## 프로젝트 지침"
|
||
echo " @.claude/project/overview.md"
|
||
echo " @.claude/project/conventions.md"
|
||
echo " @.claude/project/architecture.md"
|
||
echo ""
|
||
fi
|
||
|
||
# 4) 공통 skill 심볼릭 링크 (.claude/common/skills/* → .claude/skills/*)
|
||
SKILLS_SRC="$TARGET_PATH/skills"
|
||
SKILLS_DEST=".claude/skills"
|
||
|
||
if [[ -d "$SKILLS_SRC" ]]; then
|
||
echo "🔗 공통 skill 을 $SKILLS_DEST 로 링크합니다..."
|
||
mkdir -p "$SKILLS_DEST"
|
||
for dir in "$SKILLS_SRC"/*/; do
|
||
[[ -d "$dir" ]] || continue
|
||
name="$(basename "$dir")"
|
||
[[ "$name" == "README"* ]] && continue
|
||
link_src="../common/skills/$name"
|
||
link_dest="$SKILLS_DEST/$name"
|
||
if [[ -L "$link_dest" ]]; then
|
||
echo " ⏭ $link_dest (이미 링크됨)"
|
||
elif [[ -e "$link_dest" ]]; then
|
||
echo " ⚠️ $link_dest (실제 파일/폴더 존재 - 건너뜀. link-skills.sh --force 로 덮어쓰기)"
|
||
else
|
||
ln -s "$link_src" "$link_dest"
|
||
echo " ✅ $link_dest → $link_src"
|
||
fi
|
||
done
|
||
fi
|
||
|
||
echo ""
|
||
echo "🎉 설치가 완료되었습니다."
|
||
echo " - 공통 지침: $TARGET_PATH/CLAUDE.md"
|
||
echo " - 프로젝트 지침: $PROJECT_PATH/"
|
||
echo " - 공통 skill: $SKILLS_DEST/ (submodule 에 심볼릭 링크)"
|
||
echo " - 엔트리 파일: CLAUDE.md"
|
||
echo ""
|
||
echo "다음 작업을 진행해 주세요:"
|
||
echo " 1) $PROJECT_PATH/*.md 내용을 프로젝트에 맞게 채우기"
|
||
echo " 2) 변경 사항을 커밋하기"
|
||
echo " git add .gitmodules .claude CLAUDE.md"
|
||
echo " git commit -m 'chore: add gameservice-fe-agent submodule'"
|