diff --git a/.coderabbit.yaml b/.coderabbit.yaml new file mode 100644 index 0000000..ad948f3 --- /dev/null +++ b/.coderabbit.yaml @@ -0,0 +1,144 @@ +# AI가 응답할 때 사용할 기본 언어를 설정합니다. (예: ko-KR, en-US) +language: "ko-KR" + +# 안정성 우선, 실험 기능 OFF +early_access: false + +# AI의 페르소나와 응답 톤앤매너를 상세하게 지시합니다. 최대 200자까지 작성할 수 있습니다. +tone_instructions: > + 당신은 iOS 개발자의 성장을 돕는 시니어 엔지니어입니다. 목표는 코드 품질 개선을 통해 개발자가 한 단계 성장하도록 돕는 것입니다. + 1. 피드백은 명확하고 구체적으로 작성하며, 문제의 원인과 개선 방법을 제시하세요. + 2. 리뷰는 교육적이어야 하며, 관련 개념과 Apple 공식 문서 또는 WWDC 자료를 함께 추천하세요. + 3. 비판보다 개선 중심의 제안을 우선하세요. + 4. 칭찬은 짧고 위트 있게 전달하세요. + +# 코드 리뷰 기능 세부 설정 +reviews: + # 리뷰의 전반적인 스타일을 설정합니다. 'chill'은 비교적 덜 엄격하고 부드러운 톤을 의미합니다. + profile: "chill" + + # 리뷰 진행/상태 메시지 최소화 + review_status: false + commit_status: false + in_progress_fortune: false + + # CodeRabbit의 코멘트를 모두 `resolve`하면, 자동으로 Approve를 하는 기능입니다. + # PR은 2명의 리뷰어의 Approve 후 가능하다는 팀 컨벤션이 있기 때문에 false로 설정했습니다. + request_changes_workflow: false + + # PR의 전체적인 변경 사항에 대한 고수준의 요약(summary)을 생성할지 여부입니다. + high_level_summary: true + + # 변경된 각 파일에 대한 요약을 생성할지 여부입니다. + # PR이 너무 길어지는 것을 방지하기 위해 비활성화했습니다. + changed_files_summary: false + + # 코드의 실행 흐름을 보여주는 시퀀스 다이어그램을 생성할지 여부입니다. + sequence_diagrams: true + + # PR에 연결된 이슈(Issue)를 분석하여 리뷰 컨텍스트에 활용할지 여부입니다. + assess_linked_issues: true + + # 연관된 다른 이슈를 찾아서 링크할지 여부입니다. + related_issues: false + + # 연관된 다른 PR을 찾아서 링크할지 여부입니다. + related_prs: false + + # PR에 적절한 레이블(e.g., 'bug', 'enhancement')을 제안할지 여부입니다. + suggested_labels: false + + # 제안된 레이블을 자동으로 PR에 적용할지 여부입니다. + auto_apply_labels: false + + # 이 PR을 리뷰할 만한 적절한 동료 리뷰어를 추천할지 여부입니다. + suggested_reviewers: false + + # 추천된 리뷰어를 자동으로 할당할지 여부입니다. + auto_assign_reviewers: false + + # 리뷰 요약에 위트 있는 시(poem)를 포함할지 여부입니다. + # 몇몇 팀원들의 반대가 있었지만, CodeRabbit이 써주는 시가 귀여워서 개인 취향으로 강력 주장해서 활성화시켰습니다. + poem: true + + # 특정 파일 경로에 따라 다른 리뷰 지침을 적용합니다. + # 모노레포를 사용하는 프로젝트였기 때문에 각 분야마다 다른 인스트럭션을 작성했습니다. + + path_instructions: + - path: Sources/**/*.swift + instructions: | + [Library 기준] + 1. 이 코드는 SwiftUI-Kit 라이브러리 코드이므로 범용성, 재사용성, API 일관성을 우선 리뷰해주세요. + 2. public API가 직관적이고 SwiftUI 스타일에 맞는지, 네이밍과 Modifier 패턴이 일관적인지 검토해주세요. + 3. 라이브러리 사용자가 최소한의 코드로 쉽게 적용할 수 있는 설계인지 확인해주세요. + 4. 구현 디테일보다는 API 사용성(API ergonomics), 확장성, 유지보수성을 중심으로 리뷰해주세요. + + [Representable] + 5. UIViewRepresentable / UIViewControllerRepresentable의 make/update 역할 분리가 명확한지 확인해주세요. + 6. update 단계에서 불필요한 작업이 반복되지 않는지, SwiftUI 상태와 UIKit 동기화가 올바른지 검토해주세요. + 7. Coordinator가 필요한 경우에만 사용되었는지 확인해주세요. + + [Modifier / API] + 8. mutating 대신 값 복사 기반 설계가 자연스러운지 확인해주세요. + 9. Modifier 네이밍이 SwiftUI 패턴과 일관적인지 검토해주세요. + 10. chainable API가 예측 가능하게 동작하는지 검토해주세요. + + [View / Component] + 11. 특정 앱에 종속되지 않은 범용 컴포넌트인지 확인해주세요. + 12. 하드코딩된 값 없이 외부 주입 가능한 구조인지 검토해주세요. + 13. 불필요한 리렌더링 유발 요소가 없는지 성능 관점에서 확인해주세요. + + [Extension / Helper] + 14. 전역 네임스페이스 오염 가능성이 없는지 검토해주세요. + 15. 공용 헬퍼 또는 확장 코드가 범용적인 책임만 가지는지 확인해주세요. + 16. 특정 컴포넌트 전용 로직이 범용 유틸리티로 새어 나오지 않았는지 검토해주세요. + 17. 공용 헬퍼가 과도하게 책임을 가지거나 특정 컴포넌트 로직을 포함하지 않는지 확인해주세요. + + - path: Tests/**/*.swift + instructions: | + 1. public API 기준으로 테스트가 작성되었는지 확인해주세요. + 2. 구현이 아니라 "사용 결과"를 검증하는 테스트인지 검토해주세요. + 3. 비동기 테스트 안정성(flaky) 여부를 확인해주세요. + + - path: Package.swift + instructions: | + 1. Swift Package 구조가 라이브러리 배포에 적절한지 검토해주세요. + 2. product / target / dependency 구성이 명확한지 확인해주세요. + +# ---------------------------------------------------------------- # +# 자동 리뷰 트리거 설정 +# ---------------------------------------------------------------- # +#auto_review: +# # PR이 생성됐을 때 +# # `@coderabbitai review`를 코멘트에 입력하면 리뷰를 시작합니다. +# enabled: false +# +# # 이미 리뷰가 진행된 PR에 새로운 커밋이 추가될 때, 변경된 부분에 대해서만 자동으로 리뷰를 진행할지 여부입니다. +# auto_incremental_review: false + +# ---------------------------------------------------------------- # +# 채팅 기능 설정 +# ---------------------------------------------------------------- # +chat: + # 사용자가 @coderabbitai 태그를 지정하지 않아도 자동으로 답글을 달 수 있도록 설정합니다. + auto_reply: false + +# ---------------------------------------------------------------- # +# CodeRabbit의 지식 기반(Knowledge Base) 설정 +# ---------------------------------------------------------------- # +knowledge_base: + # 웹 검색을 통해 최신 정보나 문서를 참조할 수 있도록 허용할지 여부입니다. + web_search: + enabled: true + + # CodeRabbit이 대화나 리뷰를 통해 학습한 내용을 어디에 저장하고 참조할지 범위를 설정합니다. 'local'은 현재 레포지토리에 한정됨을 의미합니다. + learnings: + scope: local + + # 이슈 정보를 참조할 범위를 설정합니다. + issues: + scope: local + + # 풀 리퀘스트 정보를 참조할 범위를 설정합니다. + pull_requests: + scope: local diff --git a/.github/workflows/email-notify.yml b/.github/workflows/email-notify.yml index 71f0e03..75d0354 100644 --- a/.github/workflows/email-notify.yml +++ b/.github/workflows/email-notify.yml @@ -3,7 +3,6 @@ # PR 생성 시 이메일 발송 # PR 병합 시 이메일 발송 # PR 코드리뷰(라인 댓글) 시 이메일 발송 -# 이슈 생성 시 이메일 발송 # 불필요한 항목은 출력하지 않음 # 📧 이메일 알림을 위한 GitHub Actions @@ -11,8 +10,6 @@ name: Email Notifications on: - issues: - types: [opened] # 이슈 생성 시 pull_request: types: [opened, closed] # PR 생성 및 병합 시 issue_comment: @@ -24,6 +21,7 @@ on: jobs: notify_by_email: + if: github.actor != 'coderabbitai[bot]' runs-on: ubuntu-latest steps: @@ -70,11 +68,6 @@ jobs: LINK="${{ github.event.review.html_url }}" COMMENT="${{ github.event.review.body }}" - elif [[ "${{ github.event_name }}" == "issues" ]]; then - EVENT_LABEL="이슈 생성" - TITLE="${{ github.event.issue.title }}" - LINK="${{ github.event.issue.html_url }}" - else echo "event_label=무시됨" >> $GITHUB_OUTPUT echo "body=지원되지 않는 이벤트입니다." >> $GITHUB_OUTPUT