CLAUDE.md: directory structure updated (itsm/->workspace/guardia-itsm/, etc.) repo-splitter.md: subtree split prefixes updated to workspace/ paths repo-split-orchestrator/SKILL.md: split target paths updated Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
6.2 KiB
6.2 KiB
| name | description |
|---|---|
| repo-split-orchestrator | GUARDiA 모노레포를 4개 독립 Gitea 저장소로 분리하는 오케스트레이터. 로컬 소스 분리 → Gitea repo 생성/push → CI/CD webhook 연결 → 매뉴얼 업데이트의 전체 파이프라인을 실행한다. 다음 상황에서 반드시 사용: (1) '레파지토리 분리', '저장소 분리', 'repo 분리'; (2) 'GitHub 제거', 'Gitea만 사용'; (3) '각 시스템 독립 repo'; (4) 분리 후 webhook/CI/CD 연결; (5) 다시 실행, 업데이트, 보완. |
GUARDiA 레파지토리 분리 오케스트레이터
실행 모드: 파이프라인 (순차 서브 에이전트)
repo-splitter → gitea-publisher → cicd-wirer → doc-updater
분리 목표
현재 (모노레포) 목표 (독립 repo × 5)
C:\GUARDiA\workspace\ C:\GUARDiA\repos\
├── zioinfo-web/ → ├── zioinfo-web\ (zio/zioinfo-web)
├── guardia-itsm/ → ├── guardia-itsm\ (zio/guardia-itsm)
├── guardia-manager/ → ├── guardia-manager\ (zio/guardia-manager)
├── guardia-messenger/→ ├── guardia-messenger\ (zio/guardia-messenger)
└── guardia-docs/ → └── guardia-docs\ (zio/guardia-docs)
Phase 0: 사전 확인
# 현재 모노레포 상태
cd C:\GUARDiA
git status # 커밋 안된 변경사항 없어야 함
git remote -v # origin(GitHub) + gitea + gitea-itsm 확인
# Gitea 서버 상태
curl http://101.79.17.164:3000 --head
⚠️ 주의사항:
- 미커밋 변경사항이 있으면 먼저 커밋
- 분리 중 원본 모노레포 수정 금지
C:\GUARDiA\repos\디렉토리가.gitignore에 추가됨
Phase 1: 로컬 소스 분리 (repo-splitter)
cd C:\GUARDiA
# 1-1. repos 디렉토리 생성
mkdir -p C:\GUARDiA\repos
# 1-2. 각 서브트리 히스토리 분기
git subtree split --prefix=workspace/zioinfo-web -b split/zioinfo-web
git subtree split --prefix=workspace/guardia-itsm -b split/guardia-itsm
git subtree split --prefix=workspace/guardia-manager -b split/guardia-manager
git subtree split --prefix=workspace/guardia-messenger -b split/guardia-messenger
# 1-3. 각 독립 repo 디렉토리 생성 및 클론
for name in zioinfo-web guardia-itsm guardia-manager guardia-messenger; do
split_branch="split/$name"
target="C:/GUARDiA/repos/$name"
mkdir -p "$target"
git clone --no-local --branch "$split_branch" . "$target"
echo "Created: $target"
git -C "$target" log --oneline -3
done
# 1-4. manual/ → guardia-docs
git subtree split --prefix=workspace/guardia-docs -b split/guardia-docs
mkdir -p C:\GUARDiA\repos\guardia-docs
git clone --no-local --branch split/guardia-docs . C:\GUARDiA\repos\guardia-docs
# 1-5. repos/ 모노레포 .gitignore에 추가
echo "repos/" >> C:\GUARDiA\.gitignore
Phase 2: Gitea 저장소 생성 + push (gitea-publisher)
# 2-1. 신규 저장소 생성 (manager, messenger, docs)
for repo in guardia-manager guardia-messenger guardia-docs; do
curl -sf -X POST http://101.79.17.164:3000/api/v1/user/repos \
-u 'zio:Zio@Admin2026!' \
-H 'Content-Type: application/json' \
-d "{\"name\":\"$repo\",\"private\":false,\"auto_init\":false}" \
&& echo "Created $repo"
done
# 2-2. 각 독립 repo에 Gitea remote 설정 + push
declare -A REPOS=(
[zioinfo-web]="zio/zioinfo-web"
[guardia-itsm]="zio/guardia-itsm"
[guardia-manager]="zio/guardia-manager"
[guardia-messenger]="zio/guardia-messenger"
[guardia-docs]="zio/guardia-docs"
)
for local_name in "${!REPOS[@]}"; do
repo_path="C:/GUARDiA/repos/$local_name"
gitea_url="http://zio:Zio%40Admin2026%21@101.79.17.164:3000/${REPOS[$local_name]}.git"
cd "$repo_path"
git remote add origin "$gitea_url"
git push origin main --force
echo "Pushed: $local_name → ${REPOS[$local_name]}"
done
# 2-3. 모노레포에서 GitHub(origin) remote 제거
cd C:\GUARDiA
git remote remove origin
git remote -v # gitea + gitea-itsm만 남아야 함
Phase 3: CI/CD Webhook 연결 (cicd-wirer)
# 3-1. Gitea webhook 등록
REPOS_WITH_WEBHOOK=(zioinfo-web guardia-itsm guardia-manager guardia-messenger)
for repo in "${REPOS_WITH_WEBHOOK[@]}"; do
curl -sf -X POST "http://101.79.17.164:3000/api/v1/repos/zio/$repo/hooks" \
-u 'zio:Zio@Admin2026!' \
-H 'Content-Type: application/json' \
-d '{
"type":"gitea",
"config":{"url":"http://localhost:9999","content_type":"json","secret":"zioinfo-deploy-2026"},
"events":["push"],"active":true
}' \
&& echo "Webhook: $repo"
done
# 3-2. deploy_server.py repo name 매핑 업데이트 (서버에서)
# guardia-manager, guardia-messenger 배포 경로 추가
Phase 4: 문서 업데이트 (doc-updater)
- 각 독립 repo에
CLAUDE.md생성 manual/43_레파지토리_구조_가이드.md신규 작성manual/20_zio서버_CICD_가이드.md업데이트manual/42_zio서버_소프트웨어_구성도.md업데이트
에러 핸들링
| 오류 | 원인 | 해결 |
|---|---|---|
| subtree split 실패 | prefix 경로 오탈자 | git log --oneline -- {prefix} 확인 |
| Gitea push 413 | 파일 크기 초과 | git lfs 또는 대용량 파일 .gitignore 추가 |
| Gitea repo 이미 존재 | 중복 생성 시도 | 오류 무시하고 진행 (이미 있으면 OK) |
| webhook 미트리거 | 저장소명 불일치 | deploy_server.py의 repo name 매핑 확인 |
완료 검증 체크리스트
□ C:\GUARDiA\repos\ 아래 5개 디렉토리 존재
□ 각 repo git log 정상 (히스토리 있음)
□ Gitea에 5개 저장소 확인 가능
□ GitHub remote(origin) 제거됨
□ 각 repo에 Gitea remote만 존재
□ webhook 4개 등록 완료
□ 매뉴얼 43 신규 생성
□ CLAUDE.md 업데이트
테스트 시나리오
정상 흐름:
- git subtree split → 각 브랜치 생성 확인
- repos/ 디렉토리에 클론 →
git log히스토리 확인 - Gitea push → 웹 브라우저에서 저장소 확인
- test push → webhook 트리거 → 서버 배포 로그 확인
에러 흐름:
- split 브랜치 이미 존재 → 먼저
git branch -D split/xxx후 재실행