wing-gis/.claude/skills/sync-team-workflow/SKILL.md
htlee b9d924e81e chore: 팀 워크플로우 기반 초기 프로젝트 구성
WING-GIS 해양경찰 통합 GIS 위치정보시스템.
모노레포: frontend(React 19 + MapLibre + deck.gl) + services(Spring Boot + Gradle).

- npm + Nexus 프록시 레지스트리 설정
- 팀 워크플로우 v1.6.1 부트스트랩 파일 배치
- .githooks (commit-msg, post-checkout)
- custom_pre_commit: true (모노레포 pre-commit 별도 관리)

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-31 12:36:38 +09:00

5.0 KiB

name description
sync-team-workflow 팀 글로벌 워크플로우를 현재 프로젝트에 동기화합니다

팀 글로벌 워크플로우의 최신 파일을 서버에서 다운로드하여 로컬에 적용합니다. 호출 시 항상 서버 기준으로 전체 동기화합니다 (버전 비교 없음).

수행 절차

1. 사전 조건 확인

.claude/workflow-version.json 존재 확인:

  • 없으면 → "/init-project를 먼저 실행해주세요" 안내 후 종료

설정 읽기:

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 사용:

# common 파일: ${GITEA_URL}/gc/template-common/raw/branch/develop/<파일경로>
# 타입별 파일: ${GITEA_URL}/gc/template-${PROJECT_TYPE}/raw/branch/develop/<파일경로>

2. 디렉토리 준비

필요한 디렉토리가 없으면 생성:

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

다운로드 예시:

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.jsoncustom_pre_commit 플래그 확인:

  • "custom_pre_commit": true → pre-commit 건너뜀, "⚠️ pre-commit은 프로젝트 커스텀 유지" 로그
  • 플래그 없거나 false → .githooks/pre-commit 교체

다운로드 예시:

curl -sf "${GITEA_URL}/gc/template-${PROJECT_TYPE}/raw/branch/develop/.claude/rules/code-style.md" -o ".claude/rules/code-style.md"

3-3. 실행 권한 부여

chmod +x .githooks/* 2>/dev/null
chmod +x .claude/scripts/*.sh 2>/dev/null

4. settings.json 부분 머지

⚠️ settings.json은 타입별 템플릿에서 다운로드 (template-common에는 없음):

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 조회:

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 업데이트:

{
  "applied_global_version": "<서버 version>",
  "applied_date": "<현재날짜>",
  "project_type": "<프로젝트타입>",
  "gitea_url": "<GITEA_URL>"
}

기존 필드(custom_pre_commit 등)는 보존.

6. 변경 보고

  • 다운로드/갱신된 파일 목록 출력
  • 서버 workflow-version.jsonchanges 중 최신 항목 표시
  • 결과 형태:
✅ 팀 워크플로우 동기화 완료
  버전: v1.6.0
  갱신 파일: 22개 (rules 7, agents 3, skills 6, scripts 3, hooks 3)
  settings.json: 부분 갱신 (env, deny, hooks)

필요 환경변수

없음 (Gitea raw URL은 인증 불필요)