--- name: sync-team-workflow description: 팀 글로벌 워크플로우를 현재 프로젝트에 동기화합니다 --- 팀 글로벌 워크플로우의 최신 파일을 서버에서 다운로드하여 로컬에 적용합니다. 호출 시 항상 서버 기준으로 전체 동기화합니다 (버전 비교 없음). ## 수행 절차 ### 1. 사전 조건 확인 `.claude/workflow-version.json` 존재 확인: - 없으면 → "/init-project를 먼저 실행해주세요" 안내 후 종료 설정 읽기: ```bash GITEA_URL=$(python3 -c "import json; print(json.load(open('.claude/workflow-version.json')).get('gitea_url', 'https://gitea.gc-si.dev'))" 2>/dev/null || echo "https://gitea.gc-si.dev") PROJECT_TYPE=$(python3 -c "import json; print(json.load(open('.claude/workflow-version.json')).get('project_type', ''))" 2>/dev/null || echo "") ``` 프로젝트 타입이 비어있으면 자동 감지: 1. `pom.xml` → java-maven 2. `build.gradle` / `build.gradle.kts` → java-gradle 3. `package.json` + `tsconfig.json` → react-ts 4. 감지 실패 → 사용자에게 선택 요청 ### Gitea 파일 다운로드 URL 패턴 ⚠️ Gitea raw 파일은 반드시 **web raw URL** 사용: ```bash # common 파일: ${GITEA_URL}/gc/template-common/raw/branch/develop/<파일경로> # 타입별 파일: ${GITEA_URL}/gc/template-${PROJECT_TYPE}/raw/branch/develop/<파일경로> ``` ### 2. 디렉토리 준비 필요한 디렉토리가 없으면 생성: ```bash mkdir -p .claude/rules .claude/agents .claude/scripts mkdir -p .claude/skills/push .claude/skills/mr .claude/skills/create-mr mkdir -p .claude/skills/release .claude/skills/version .claude/skills/fix-issue mkdir -p .githooks ``` ### 3. 서버 파일 다운로드 + 적용 각 파일을 `curl -sf` 로 다운로드하여 프로젝트 루트의 동일 경로에 저장. 다운로드 실패한 파일은 경고 출력 후 건너뜀. #### 3-1. template-common 파일 (덮어쓰기) **규칙 파일**: ``` .claude/rules/team-policy.md .claude/rules/git-workflow.md .claude/rules/release-notes-guide.md .claude/rules/subagent-policy.md ``` **에이전트 파일**: ``` .claude/agents/explorer.md .claude/agents/implementer.md .claude/agents/reviewer.md ``` **스킬 파일 (6종)**: ``` .claude/skills/push/SKILL.md .claude/skills/mr/SKILL.md .claude/skills/create-mr/SKILL.md .claude/skills/release/SKILL.md .claude/skills/version/SKILL.md .claude/skills/fix-issue/SKILL.md ``` **Hook 스크립트**: ``` .claude/scripts/on-pre-compact.sh .claude/scripts/on-post-compact.sh .claude/scripts/on-commit.sh ``` **Git Hooks** (commit-msg, post-checkout은 항상 교체): ``` .githooks/commit-msg .githooks/post-checkout ``` 다운로드 예시: ```bash curl -sf "${GITEA_URL}/gc/template-common/raw/branch/develop/.claude/rules/team-policy.md" -o ".claude/rules/team-policy.md" ``` #### 3-2. template-{type} 파일 (타입별 덮어쓰기) ``` .claude/rules/code-style.md .claude/rules/naming.md .claude/rules/testing.md ``` **pre-commit hook**: `.claude/workflow-version.json`의 `custom_pre_commit` 플래그 확인: - `"custom_pre_commit": true` → pre-commit 건너뜀, "⚠️ pre-commit은 프로젝트 커스텀 유지" 로그 - 플래그 없거나 false → `.githooks/pre-commit` 교체 다운로드 예시: ```bash curl -sf "${GITEA_URL}/gc/template-${PROJECT_TYPE}/raw/branch/develop/.claude/rules/code-style.md" -o ".claude/rules/code-style.md" ``` #### 3-3. 실행 권한 부여 ```bash chmod +x .githooks/* 2>/dev/null chmod +x .claude/scripts/*.sh 2>/dev/null ``` ### 4. settings.json 부분 머지 ⚠️ settings.json은 **타입별 템플릿**에서 다운로드 (template-common에는 없음): ```bash SERVER_SETTINGS=$(curl -sf "${GITEA_URL}/gc/template-${PROJECT_TYPE}/raw/branch/develop/.claude/settings.json") ``` 다운로드한 최신 settings.json과 로컬 `.claude/settings.json`을 비교하여 부분 갱신: - `env`: 서버 최신으로 교체 - `deny` 목록: 서버 최신으로 교체 - `allow` 목록: 기존 사용자 커스텀 유지 + 서버 기본값 병합 - `hooks`: 서버 최신으로 교체 ### 5. workflow-version.json 갱신 서버의 최신 `workflow-version.json` 조회: ```bash SERVER_VER=$(curl -sf "${GITEA_URL}/gc/template-common/raw/branch/develop/workflow-version.json") SERVER_VERSION=$(echo "$SERVER_VER" | python3 -c "import sys,json; print(json.load(sys.stdin).get('version',''))") ``` `.claude/workflow-version.json` 업데이트: ```json { "applied_global_version": "<서버 version>", "applied_date": "<현재날짜>", "project_type": "<프로젝트타입>", "gitea_url": "" } ``` 기존 필드(`custom_pre_commit` 등)는 보존. ### 6. 변경 보고 - 다운로드/갱신된 파일 목록 출력 - 서버 `workflow-version.json`의 `changes` 중 최신 항목 표시 - 결과 형태: ``` ✅ 팀 워크플로우 동기화 완료 버전: v1.6.0 갱신 파일: 22개 (rules 7, agents 3, skills 6, scripts 3, hooks 3) settings.json: 부분 갱신 (env, deny, hooks) ``` ## 필요 환경변수 없음 (Gitea raw URL은 인증 불필요)