커밋 메시지 규칙 스크립트 추가 및 가이드 정리

커밋 메시지 규칙 검증 스크립트를 추가하고 가이드를 정리한다.

제목 50자, 본문 72자, 빈 줄, 광고 금지 규칙을 준수한다.
This commit is contained in:
2025-12-01 10:48:39 +09:00
parent 2740522f05
commit ede2dc201c
2 changed files with 86 additions and 49 deletions

View File

@@ -1,52 +1,18 @@
질문에 대한 답변과 설명은 한국어로 한다. 질문에 대한 답변과 설명은 한국어로 한다.
### 커밋 메시지 구성 ## Quality Assurance Guidelines
``` ### Commit Standards
<type>[optional scope]: <description> 1. Write in Korean.
2. Use the present tense in the subject line (e.g., "Add feature" not "Added feature").
[optional body] 3. Keep the subject line to 50 characters or less.
4. Add a blank line between the subject and body.
[optional footer(s)] 5. Keep the body to 72 characters or less per line.
``` 6. Within a paragraph, only break lines when the text exceeds 72 characters.
7. Describe changes to public API features and do not include implementation details such as package-private code.
### 타입 목록 8. Do not mention test code in commit messages.
9. Do not use any prefix (such as "fix:", "update:", "docs:", "feat:", etc.) in the subject line.
다음 타입 키워드 중 하나를 사용해야 합니다: 10. Do not start the subject line with a lowercase letter unless the first word is a function name or another identifier that is conventionally lowercase and there is a clear, justifiable reason for the exception. Otherwise, always start with an uppercase letter.
11. Do not include tool advertisements, branding, or promotional content in commit messages.
- `feat`: 새로운 기능 추가 12. Use separate git commands to stage files before committing.
- `fix`: 버그 수정 13. Always validate commits using `work/scripts/check-commit-message-rules.sh` and fix until validation passes.
- `docs`: 문서 변경 (코드 변경 없음)
- `style`: 포매팅, 세미콜론 누락 등 기능/로직 무관한 변경
- `refactor`: 코드 리팩토링 (기능 변화 없음)
- `perf`: 성능 개선
- `test`: 테스트 코드 추가/수정
- `build`: 빌드 시스템 또는 외부 의존성 관련 변경
- `ci`: CI 설정 관련 변경
- `chore`: 기타 잡무성 변경
- `revert`: 이전 커밋 되돌리기
### 예시
```
feat(auth): 로그인 기능 추가
fix(api): 인증 헤더 누락 문제 수정
docs(readme): 사용법 예제 추가
refactor(user): useEffect 내부 로직 리팩토링
```
### 본문 작성 규칙
- `왜` 변경되었는지 설명 (가능하면)
- `무엇`이 변경되었는지를 간결하게 기술
- 줄바꿈 후 자세한 설명 가능
---
## 기타
- 긴 커밋 메시지 제목은 줄이지 말고 의도를 명확히 표현
- 린트나 릴리즈 자동화 도구에서 Conventional Commits를 기대할 수 있음

View File

@@ -0,0 +1,71 @@
#!/bin/bash
# Check if a commit message follows project rules
# Rules: 50/72 formatting, no advertisements/branding
# Usage: ./check-commit-message-rules.sh [commit-hash]
# If no commit-hash is provided, checks the latest commit
# Determine which commit to check
if [ $# -eq 0 ]; then
commit_ref="HEAD"
echo "Checking latest commit..."
else
commit_ref="$1"
echo "Checking commit: $commit_ref"
fi
# Get the commit message
commit_message=$(git log -1 --pretty=format:"%s%n%b" "$commit_ref")
# Split into subject and body
subject=$(echo "$commit_message" | head -n1)
body=$(echo "$commit_message" | tail -n +2 | sed '/^$/d')
echo "Checking commit message format..."
echo "Subject: $subject"
# Check subject line length
subject_length=${#subject}
if [ $subject_length -gt 50 ]; then
echo "[FAIL] Subject line too long: $subject_length characters (max 50)"
exit_code=1
else
echo "[PASS] Subject line length OK: $subject_length characters"
exit_code=0
fi
# Check body line lengths if body exists
if [ -n "$body" ]; then
echo "Checking body line lengths..."
while IFS= read -r line; do
line_length=${#line}
if [ $line_length -gt 72 ]; then
echo "[FAIL] Body line too long: $line_length characters (max 72)"
echo "Line: $line"
exit_code=1
fi
done <<< "$body"
if [ $exit_code -eq 0 ]; then
echo "[PASS] All body lines within 72 characters"
fi
else
echo "[INFO] No body content to check"
fi
# Check for advertisements, branding, or promotional content
echo "Checking for advertisements and branding..."
if echo "$commit_message" | grep -qi "generated with\|claude code\|anthropic\|co-authored-by.*claude\|🤖"; then
echo "[FAIL] Commit message contains advertisements, branding, or promotional content"
exit_code=1
else
echo "[PASS] No advertisements or branding detected"
fi
if [ $exit_code -eq 0 ]; then
echo "[PASS] Commit message follows all rules"
else
echo "[FAIL] Commit message violates project rules"
fi
exit $exit_code