From ede2dc201c4e14a4e941a41b5796587e6c3e2915 Mon Sep 17 00:00:00 2001 From: klaus Date: Mon, 1 Dec 2025 10:48:39 +0900 Subject: [PATCH] =?UTF-8?q?=EC=BB=A4=EB=B0=8B=20=EB=A9=94=EC=8B=9C?= =?UTF-8?q?=EC=A7=80=20=EA=B7=9C=EC=B9=99=20=EC=8A=A4=ED=81=AC=EB=A6=BD?= =?UTF-8?q?=ED=8A=B8=20=EC=B6=94=EA=B0=80=20=EB=B0=8F=20=EA=B0=80=EC=9D=B4?= =?UTF-8?q?=EB=93=9C=20=EC=A0=95=EB=A6=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 커밋 메시지 규칙 검증 스크립트를 추가하고 가이드를 정리한다. 제목 50자, 본문 72자, 빈 줄, 광고 금지 규칙을 준수한다. --- AGENTS.md | 64 +++++-------------- work/scripts/check-commit-message-rules.sh | 71 ++++++++++++++++++++++ 2 files changed, 86 insertions(+), 49 deletions(-) create mode 100755 work/scripts/check-commit-message-rules.sh diff --git a/AGENTS.md b/AGENTS.md index 26ab4905..8cf6285b 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -1,52 +1,18 @@ 질문에 대한 답변과 설명은 한국어로 한다. -### 커밋 메시지 구성 +## Quality Assurance Guidelines -``` -[optional scope]: - -[optional body] - -[optional footer(s)] -``` - -### 타입 목록 - -다음 타입 키워드 중 하나를 사용해야 합니다: - -- `feat`: 새로운 기능 추가 -- `fix`: 버그 수정 -- `docs`: 문서 변경 (코드 변경 없음) -- `style`: 포매팅, 세미콜론 누락 등 기능/로직 무관한 변경 -- `refactor`: 코드 리팩토링 (기능 변화 없음) -- `perf`: 성능 개선 -- `test`: 테스트 코드 추가/수정 -- `build`: 빌드 시스템 또는 외부 의존성 관련 변경 -- `ci`: CI 설정 관련 변경 -- `chore`: 기타 잡무성 변경 -- `revert`: 이전 커밋 되돌리기 - -### 예시 - -``` -feat(auth): 로그인 기능 추가 - -fix(api): 인증 헤더 누락 문제 수정 - -docs(readme): 사용법 예제 추가 - -refactor(user): useEffect 내부 로직 리팩토링 -``` - -### 본문 작성 규칙 - -- `왜` 변경되었는지 설명 (가능하면) -- `무엇`이 변경되었는지를 간결하게 기술 -- 줄바꿈 후 자세한 설명 가능 - ---- - -## 기타 - -- 긴 커밋 메시지 제목은 줄이지 말고 의도를 명확히 표현 -- 린트나 릴리즈 자동화 도구에서 Conventional Commits를 기대할 수 있음 +### Commit Standards +1. Write in Korean. +2. Use the present tense in the subject line (e.g., "Add feature" not "Added feature"). +3. Keep the subject line to 50 characters or less. +4. Add a blank line between the subject and body. +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. +12. Use separate git commands to stage files before committing. +13. Always validate commits using `work/scripts/check-commit-message-rules.sh` and fix until validation passes. diff --git a/work/scripts/check-commit-message-rules.sh b/work/scripts/check-commit-message-rules.sh new file mode 100755 index 00000000..db3a9a14 --- /dev/null +++ b/work/scripts/check-commit-message-rules.sh @@ -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