--- name: sync-team-workflow description: 팀 글로벌 워크플로우를 현재 프로젝트에 동기화합니다 --- 팀 글로벌 워크플로우의 최신 버전을 현재 프로젝트에 적용합니다. ## 수행 절차 ### 1. 글로벌 버전 조회 Gitea API로 template-common 리포의 workflow-version.json 조회: ```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") curl -sf "${GITEA_URL}/gc/template-common/raw/branch/develop/workflow-version.json" ``` ### 2. 버전 비교 로컬 `.claude/workflow-version.json`의 `applied_global_version` 필드와 비교: - 버전 일치 → "최신 버전입니다" 안내 후 종료 - 버전 불일치 → 미적용 변경 항목 추출하여 표시 ### 3. 프로젝트 타입 감지 자동 감지 순서: 1. `.claude/workflow-version.json`의 `project_type` 필드 확인 2. 없으면: `pom.xml` → java-maven, `build.gradle` → java-gradle, `package.json` → react-ts ### Gitea 파일 다운로드 URL 패턴 ⚠️ Gitea raw 파일은 반드시 **web raw URL**을 사용해야 합니다 (`/api/v1/` 경로 사용 불가): ```bash GITEA_URL="${GITEA_URL:-https://gitea.gc-si.dev}" # common 파일: ${GITEA_URL}/gc/template-common/raw/branch/develop/<파일경로> # 타입별 파일: ${GITEA_URL}/gc/template-<타입>/raw/branch/develop/<파일경로> # 예시: curl -sf "${GITEA_URL}/gc/template-common/raw/branch/develop/.claude/rules/team-policy.md" curl -sf "${GITEA_URL}/gc/template-react-ts/raw/branch/develop/.editorconfig" ``` ### 4. 파일 다운로드 및 적용 위의 URL 패턴으로 해당 타입 + common 템플릿 파일 다운로드: #### 4-1. 규칙 파일 (덮어쓰기) 팀 규칙은 로컬 수정 불가 — 항상 글로벌 최신으로 교체: ``` .claude/rules/team-policy.md .claude/rules/git-workflow.md .claude/rules/release-notes-guide.md .claude/rules/subagent-policy.md .claude/rules/code-style.md (타입별) .claude/rules/naming.md (타입별) .claude/rules/testing.md (타입별) ``` #### 4-1b. 에이전트 파일 (덮어쓰기) ``` .claude/agents/explorer.md .claude/agents/implementer.md .claude/agents/reviewer.md ``` #### 4-2. settings.json (부분 갱신) ⚠️ settings.json은 **타입별 템플릿**에서 다운로드 (template-common에는 없음): ```bash curl -sf "${GITEA_URL}/gc/template-${PROJECT_TYPE}/raw/branch/develop/.claude/settings.json" ``` 다운로드한 최신 settings.json과 로컬 settings.json을 비교하여 부분 갱신: - `env`: 글로벌 최신으로 교체 (CLAUDE_BOT_TOKEN 등 팀 공통 환경변수) - `deny` 목록: 글로벌 최신으로 교체 - `allow` 목록: 기존 사용자 커스텀 유지 + 글로벌 기본값 병합 - `hooks`: init-project SKILL.md의 hooks JSON 블록을 참조하여 교체 (없으면 추가) - SessionStart(compact) → on-post-compact.sh - PreCompact → on-pre-compact.sh - PostToolUse(Bash) → on-commit.sh #### 4-3. 스킬 파일 (덮어쓰기) ``` .claude/skills/create-mr/SKILL.md .claude/skills/fix-issue/SKILL.md .claude/skills/sync-team-workflow/SKILL.md .claude/skills/init-project/SKILL.md .claude/skills/push/SKILL.md .claude/skills/mr/SKILL.md .claude/skills/release/SKILL.md .claude/skills/version/SKILL.md ``` #### 4-4. Git Hooks (덮어쓰기 + 실행 권한) `commit-msg`, `post-checkout`은 **항상 팀 표준으로 교체** (팀 커뮤니케이션 규칙 + 인프라). `pre-commit`은 `.claude/workflow-version.json`의 `custom_pre_commit` 플래그를 확인: - `"custom_pre_commit": true` → pre-commit 건너뜀 (프로젝트 커스텀 유지), "⚠️ pre-commit은 프로젝트 커스텀 유지" 로그 - 플래그 없거나 false → 팀 표준으로 교체 ```bash chmod +x .githooks/* ``` #### 4-5. Hook 스크립트 갱신 init-project SKILL.md의 코드 블록에서 최신 스크립트를 추출하여 덮어쓰기: ``` .claude/scripts/on-pre-compact.sh .claude/scripts/on-post-compact.sh .claude/scripts/on-commit.sh ``` 실행 권한 부여: `chmod +x .claude/scripts/*.sh` ### 5. 로컬 버전 업데이트 `.claude/workflow-version.json` 갱신: ```json { "applied_global_version": "새버전", "applied_date": "오늘날짜", "project_type": "감지된타입", "gitea_url": "https://gitea.gc-si.dev" } ``` ### 6. 변경 보고 - `git diff`로 변경 내역 확인 - 업데이트된 파일 목록 출력 - 변경 로그(글로벌 workflow-version.json의 changes) 표시 - 필요한 추가 조치 안내 (빌드 확인, 의존성 업데이트 등)