Community코딩 & 개발github.com

gugabfigueiredo/semver-howto

충돌 인식 및 고성능 Git 태깅을 자율적으로 수행하는 에이전트 독립적 스킬

semver-howto란 무엇인가요?

이 스킬은 Git 저장소에서 충돌을 인식하고 고성능으로 태깅하는 자율적인 버전 제안 시스템입니다. 주로 `scripts/resolve-version.sh` 스크립트를 기반으로 작동하며, 변경 코드의 영향 범위(Impact Zone)를 분석하여 적절한 시맨틱 버전(SemVer) 태그를 제안합니다. Claude Code, Cursor, Codex 등 다양한 AI 에이전트 플랫폼에서 사용할 수 있도록 설계되었습니다. 핵심 기능은 영향 범위 내 커밋 메시지를 분석하여 feat(기능 추가)는 마이너 버전, 그 외는 패치 버전으로 자동 결정하며, 항상 RC(Release Candidate) 태그만 생성합니다. 충돌 방지를 위해 로컬 및 원격 태그를 모두 검사하며, 대규모 모노레포 환경에서도 특정 경로로 범위를 좁혀 `git describe`, `git tag -l`, `git ls-remote`를 효율적으로 사용하여 성능 저하 없이 동작합니다. 결과는 표준 출력으로 제안되며, 실제 태그 생성은 사람 또는 승인 워크플로우가 수행합니다.

지원 대상~Claude Code~Codex CLI~Cursor
npx skills add gugabfigueiredo/semver-howto

Installed? Explore more 코딩 & 개발 skills: steipete/bluebubbles, steipete/eightctl, steipete/blucli · View all 6 →

즐겨 사용하는 AI에게 물어보기

이 에이전트 스킬이 미리 로드된 새 채팅을 엽니다.

문서

semver-howto은(는) 무엇을 하나요?

모든 로직은 scripts/resolve-version.sh에 있습니다. 이 파일은 에이전트에게 언제 호출해야 하는지와 규칙이 무엇인지를 알려줍니다. 절차를 다시 유도하지 마십시오 — 플래그는 스크립트의 --help를, 알고리즘은 인라인 주석을 참조하십시오.

호출 시점

  • 코드 변경 후, 버전 태그를 제안해야 할 때.
  • 사용자가 "태그 생성" / "버전 업" / "버전이 뭐지?"라고 말할 때.
  • 태그 선택을 에이전트에 위임하는 CI 단계에서.

커밋 메시지 작성이나 변경 로그 생성을 위해 호출하지 마십시오.

스크립트가 적용하는 규칙

  1. 영향 범위(Impact Zone): 수정된 경로 → git log -1 -- <paths> → git describe --match "*v*" <commit>. 모노레포에서 모든 태그로 확장하지 않습니다.
  2. 버전 업: 영향 범위 내 커밋에 feat:이 있으면 마이너(minor), 그 외는 패치(patch). 메이저(major)는 절대 자동으로 수행되지 않습니다.
  3. 충돌 방지: 로컬에서 패턴 범위 git tag -l, 그 다음 대상 git ls-remote --tags origin "refs/tags/<candidate>"로 얕은 사전 점검을 수행합니다. 점유된 주소를 넘어서 이동합니다.
  4. RC 전용: 자율적인 출력은 항상 -rc[n]입니다. 클린 태그는 거부됩니다.
  5. 제안만, 푸시 금지: 표준 출력 = 하나의 태그. 사람(또는 승인 워크플로우)이 변경을 수행합니다.

사용법

./skills/semver-howto/scripts/resolve-version.sh              # 다음 -rc[n] 제안
./skills/semver-howto/scripts/resolve-version.sh --promote    # 가장 높은 RC에서 -rc 제거
./skills/semver-howto/scripts/resolve-version.sh --paths "a b" # 명시적 영향 범위
./skills/semver-howto/scripts/resolve-version.sh --help       # 플래그 + 알고리즘 참고

종료 코드 0은 성공입니다. 0이 아니면 모호하거나 안전하지 않은 상태입니다(자세한 내용은 stderr).

성능 및 안전성

  • git describe --match "<prefix>*v*" <commit>으로 태그 탐색을 관련 참조로 제한합니다 — 수천 개의 모듈별 태그가 있는 모노레포에서 중요합니다.
  • git tag -l "<pattern>"은 packed-refs에서 제공되며, O(히스토리)가 아닌 O(일치 수)입니다.
  • git ls-remote --tags origin "refs/tags/<candidate>"은 단일 참조만 요청합니다. 객체를 가져오지 않고 FETCH_HEAD를 변경하지 않으며, 대규모 원격에서도 일반적으로 1초 미만입니다. git fetch --tags를 완전히 피합니다.
  • Diff 및 로그 쿼리는 영향 범위 경로로 제한되므로, 각 실행은 히스토리의 관련 부분만 처리합니다.
  • 안전성: RC 전용 쓰기, 로컬+원격 이중 충돌 검사, 푸시 없음, 메이저 버전 업 없음, 이전 태그가 없을 때 결정론적 부트스트랩(v0.1.0-rc1) — 사람 확인을 위해 stderr로 출력됩니다.

관련 스킬