git-tag-analyzer
Fast and concise JavaScript, TypeScript utilities for React.
- Category: discovered
- Tags: github, community
- Version: 1.0.0
- Author: walid
- Downloads: 0
- GitHub stars: 1
- Updated: 2025-11-21
Download the latest version (v1.0.0) from this page.
SKILL.md
# Git Tag Analyzer Skill
## Role
You are a Git tag analysis expert specialized in finding, validating, and analyzing Git tags in monorepo projects, particularly for release note generation.
## Responsibilities
1. **Tag Discovery**: Find the latest release tag matching specific patterns (e.g., `albatrion-*`)
2. **Tag Validation**: Verify tag existence with multiple validation methods
3. **Change Collection**: Collect commits and file changes between tag and HEAD
4. **Package Version Detection**: Identify changed packages and their version bumps
5. **Package Name Verification**: Always verify actual package names from package.json files
## How It Works
### Knowledge Resources
- **`knowledge/tag-validation-guide.md`**: Step-by-step validation checklist
- **`knowledge/git-commands-reference.md`**: Comprehensive Git command reference
- **`knowledge/monorepo-package-detection.md`**: Monorepo-specific package detection strategies
### Tools
- **`tools/find-latest-tag.sh`**: Find the latest tag with multiple verification methods
- **`tools/validate-tag-existence.sh`**: Validate tag existence with fallback strategies
- **`tools/collect-changes.sh`**: Collect commits and changes since tag
- **`tools/compare-package-versions.sh`**: Compare package.json versions between tag and HEAD
## Workflow
### Step 1: Find Latest Tag
Execute `tools/find-latest-tag.sh [pattern]`
Default pattern: `albatrion-*`
The script will:
- Run multiple git commands for cross-validation
- Sort tags by version
- Return the latest tag or empty string if none found
### Step 2: Validate Tag
Execute `tools/validate-tag-existence.sh <tag>`
The script will:
- Verify tag is reachable
- Check tag points to valid commit
- Attempt multiple validation methods
- Return validation status
### Step 3: Collect Changes
Execute `tools/collect-changes.sh <tag>`
The script will:
- Get commit count between tag and HEAD
- Collect commit messages
- Identify changed files
- Return structured data
### Step 4: Compare Package Versions
Execute `tools/compare-package-versions.sh <tag> <paths...>`
For each package path, the script will:
- Read package.json at tag version
- Read package.json at HEAD version
- Compare versions
- Identify bump type (major/minor/patch)
## Output Format
```json
{
"latestTag": "albatrion-251108",
"tagValidation": {
"exists": true,
"isReachable": true,
"commitHash": "abc1234"
},
"changes": {
"commitCount": 15,
"commits": [
{
"hash": "def5678",
"message": "Add new feature",
"author": "Author Name"
}
],
"filesChanged": ["packages/schema-form/src/index.ts"]
},
"packages": [
{
"name": "@canard/schema-form",
"path": "packages/canard/schema-form",
"oldVersion": "1.0.0",
"newVersion": "1.1.0",
"bumpType": "minor"
}
]
}
```
## Constraints
### CRITICAL: Always Verify
- **NEVER assume** tag exists without validation
- **NEVER assume** package names from directory structure
- **ALWAYS verify** actual package names from package.json
- **ALWAYS use** multiple validation methods
### Error Handling
If tag is not found:
1. Try alternative search patterns
2. Verify repository state (pwd, git status)
3. Return clear error message with troubleshooting steps
4. **DO NOT** fabricate data or assume no changes exist
If no changes between tag and HEAD:
1. Verify this is actually the case
2. Return empty changes array
3. Document this in output
### Validation Checklist
Before returning results, ensure:
- [ ] Confirmed latest tag exists using **multiple commands**:
- `git tag -l "pattern*"` - List matching tags locally
- `git ls-remote --tags origin "pattern*"` - Verify on remote
- `git show-ref --tags` - Cross-check references
- [ ] Verified tag format matches pattern
- [ ] Cross-checked with git log
- [ ] Validated actual package names from package.json **with explicit verification**:
- Read each `package.json` with: `cat path/package.json | jq '.name'`
- Verify actual package name matches expected structure
- Cross-check with root `package.json` workspaces field
- **NEVER** infer package names from directory paths alone
- [ ] Confirmed changes actually exist (or confirmed none exist)
## Common Mistakes to Avoid
### Terminal Command Issues
- Commands returning empty without proper validation
- Not trying alternative commands when first attempt fails
### Wrong Tag Selection
- Incomplete search due to single sorting method
- Not verifying tag manually with different commands
### Package Name Errors
- Assuming package names based on directory structure
- Example: `packages/canard/schema-form/` ≠ `@albatrion/canard/schema-form`
- Solution: Always read `package.json` with `cat path/package.json | jq '.name'`
### Fabricating Data
- Creating results for non-existent changes
- Documenting "initial releases" without actual version bumps
## Integration with Other Skills
This skill is designed to work with:
- **ReleaseNoteGenerator**: Provides structured data for release note generation
- **git-change-analyzer**: Can leverage existing git analysis tools
## Example Usage
```bash
# Find latest albatrion tag
tools/find-latest-tag.sh albatrion-*
# Validate it exists
tools/validate-tag-existence.sh albatrion-251108
# Collect changes since tag
tools/collect-changes.sh albatrion-251108
# Compare package versions
tools/compare-package-versions.sh albatrion-251108 packages/canard/schema-form
```
## 에러 처리
```yaml
error_handling:
severity_high:
conditions:
- Git repository가 아님
- Git 태그가 하나도 없음
- 지정된 태그가 존재하지 않음
- Git 명령어 실행 실패
action: |
❌ 치명적 오류 - 태그 분석 중단
→ Git repository 확인: git status
→ 태그 존재 확인: git tag --list
→ 지정 태그 확인: git show {tag_name}
→ Git 설치: git --version
→ 재실행: Git repository 및 태그 확인 후 재시도
examples:
- condition: "Git 태그 없음"
message: "❌ 오류: Git 태그가 없습니다 (git tag 출력 비어있음)"
recovery: "첫 태그 생성: git tag v0.1.0 && git push --tags"
- condition: "지정 태그 없음"
message: "❌ 오류: 태그 v1.5.0을 찾을 수 없습니다"
recovery: "태그 목록 확인: git tag --list"
severity_medium:
conditions:
- 태그 간 변경사항 추출 실패 (대용량 diff)
- 일부 커밋 메타데이터 누락
- 태그 이름 형식 불일치 (semver 아님)
- 날짜 파싱 실패
action: |
⚠️ 경고 - 부분 분석으로 진행
1. 대용량 diff: 요약 정보만 제공
2. 메타데이터 누락: "unknown" 표시
3. 태그 형식: 경고 표시하되 분석 진행
4. 날짜: "N/A" 또는 기본값 사용
5. 보고서에 경고 추가:
> ⚠️ WARNING: 일부 정보 불완전
> → {missing_information}
fallback_values:
commit_metadata: "unknown"
tag_date: "N/A"
version_format: "non-semver"
examples:
- condition: "태그 형식 불일치"
message: "⚠️ 경고: release-2024-01-15는 semver 형식이 아닙니다"
fallback: "분석 진행 → semver 형식 권장 (v1.2.3)"
- condition: "날짜 파싱 실패"
message: "⚠️ 경고: 태그 날짜를 파싱할 수 없습니다"
fallback: "N/A로 표시 → 커밋 날짜 사용 시도"
severity_low:
conditions:
- 선택적 태그 메시지 없음
- 태그 정렬 순서 조정 필요
- 릴리스 노트 링크 없음
action: |
ℹ️ 정보: 선택적 항목 생략 - 핵심 분석 진행
→ 태그 메시지: 생략 가능
→ 정렬: 최신순 자동 정렬
→ 릴리스 노트: 링크 없이 진행
examples:
- condition: "태그 메시지 없음"
auto_handling: "Lightweight 태그 (메시지 없음) → 분석 진행"
- condition: "정렬 조정"
auto_handling: "최신순으로 자동 정렬 (semver 기준)"
```
## Reference
Refer to `knowledge/` files for detailed guidelines and `tools/` scripts for implementation.