Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
24 changes: 24 additions & 0 deletions .env.example
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
# GitHub 설정
# GitHub Personal Access Token (https://github.com/settings/tokens)
# 필요한 권한: repo, pull_requests, issues
GITHUB_PAT=your_github_personal_access_token

# Slack 설정 (현재 비활성화됨)
# Slack Bot Token (https://api.slack.com/apps)
# SLACK_BOT_TOKEN=your_slack_bot_token

# Slack Team ID (https://api.slack.com/methods/team.info/test)
# SLACK_TEAM_ID=your_slack_team_id

# Slack Channel IDs (쉼표로 구분, 예: C1234567890,C0987654321)
# 채널 ID 확인: https://api.slack.com/methods/conversations.list/test
# SLACK_CHANNEL_IDS=channel_id1,channel_id2

# OpenAI 설정
# OpenAI API Key (https://platform.openai.com/api-keys)
OPENAI_API_KEY=your_openai_api_key

# 사용법:
# 1. 이 파일을 .env로 복사: cp .env.example .env
# 2. .env 파일을 편집하여 실제 토큰들을 입력
# 3. 테스트 실행: python scripts/test_code_review.py --test-data
32 changes: 32 additions & 0 deletions .github/pull_request_templates/bugfix.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
## 🐛 버그 수정

### 🐛 버그 설명
<!-- 어떤 버그를 수정했는지 설명해주세요 -->

### 🔍 원인 분석
<!-- 버그의 원인을 분석해주세요 -->

### 🔧 수정 내용
<!-- 어떻게 수정했는지 설명해주세요 -->

#### 📁 변경된 파일들
- [ ] 파일명: 수정 내용 설명

### 🧪 테스트
- [ ] 버그가 수정되었는지 확인
- [ ] 기존 기능에 영향 없음 확인
- [ ] 유사한 버그가 다른 곳에 없는지 확인

### 🔗 관련 이슈
Fixes #(이슈번호)

### ✅ 체크리스트
- [ ] 코드 리뷰를 요청했습니다
- [ ] 테스트 코드를 작성했습니다 (필요시)
- [ ] 문서를 업데이트했습니다 (필요시)
- [ ] 브랜치 이름이 의미있게 지어졌습니다
- [ ] 커밋 메시지가 명확합니다

---

**참고**: 이 PR은 AI 자동 코드리뷰 시스템에 의해 자동으로 리뷰됩니다! 🤖
37 changes: 37 additions & 0 deletions .github/pull_request_templates/default.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
## 📋 Pull Request

### 🎯 변경사항 요약
<!-- 이 PR에서 변경된 내용을 간단히 설명해주세요 -->

### 🔍 변경사항 상세
<!-- 변경된 파일들과 그 이유를 설명해주세요 -->

#### 📁 변경된 파일들
- [ ] 파일명: 변경 내용 설명

### 🧪 테스트
<!-- 테스트를 어떻게 진행했는지 설명해주세요 -->
- [ ] 로컬 테스트 완료
- [ ] 기존 기능에 영향 없음 확인
- [ ] 새로운 기능 테스트 완료

### 📸 스크린샷 (UI 변경시)
<!-- UI 변경사항이 있다면 스크린샷을 첨부해주세요 -->

### 🔗 관련 이슈
<!-- 관련된 이슈가 있다면 링크해주세요 -->
Closes #(이슈번호)

### ✅ 체크리스트
- [ ] 코드 리뷰를 요청했습니다
- [ ] 테스트 코드를 작성했습니다 (필요시)
- [ ] 문서를 업데이트했습니다 (필요시)
- [ ] 브랜치 이름이 의미있게 지어졌습니다
- [ ] 커밋 메시지가 명확합니다

### 📝 추가 정보
<!-- 추가로 알려주고 싶은 정보가 있다면 작성해주세요 -->

---

**참고**: 이 PR은 AI 자동 코드리뷰 시스템에 의해 자동으로 리뷰됩니다! 🤖
34 changes: 34 additions & 0 deletions .github/pull_request_templates/feature.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
## 🚀 새로운 기능 추가

### 🎯 기능 설명
<!-- 새로 추가된 기능에 대해 설명해주세요 -->

### 🔧 구현 내용
<!-- 어떻게 구현했는지 설명해주세요 -->

#### 📁 변경된 파일들
- [ ] 파일명: 변경 내용 설명

### 🧪 테스트
- [ ] 새로운 기능 테스트 완료
- [ ] 기존 기능에 영향 없음 확인
- [ ] 에러 케이스 테스트 완료

### 📚 문서 업데이트
- [ ] README 업데이트 (필요시)
- [ ] API 문서 업데이트 (필요시)
- [ ] 주석 추가 (필요시)

### 🔗 관련 이슈
Closes #(이슈번호)

### ✅ 체크리스트
- [ ] 코드 리뷰를 요청했습니다
- [ ] 테스트 코드를 작성했습니다
- [ ] 문서를 업데이트했습니다
- [ ] 브랜치 이름이 의미있게 지어졌습니다
- [ ] 커밋 메시지가 명확합니다

---

**참고**: 이 PR은 AI 자동 코드리뷰 시스템에 의해 자동으로 리뷰됩니다! 🤖
38 changes: 38 additions & 0 deletions .github/workflows/auto-code-review.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
name: Auto Code Review

on:
pull_request:
types: [opened, synchronize, reopened]
branches: [main, develop]

jobs:
code-review:
runs-on: ubuntu-latest

steps:
- name: Checkout code
uses: actions/checkout@v4

- name: Set up Python
uses: actions/setup-python@v4
with:
python-version: "3.12"

- name: Install dependencies
run: |
python -m pip install --upgrade pip
pip install -r requirements.txt

- name: Run code review
env:
GITHUB_PAT: ${{ secrets.AUTO_CODE_REVIEW_TOKEN }}
# SLACK_BOT_TOKEN: ${{ secrets.SLACK_BOT_TOKEN }}
# SLACK_TEAM_ID: ${{ secrets.SLACK_TEAM_ID }}
# SLACK_CHANNEL_IDS: ${{ secrets.SLACK_CHANNEL_IDS }}
OPENAI_API_KEY: ${{ secrets.OPENAI_API_KEY }}
run: |
python scripts/auto_code_review.py \
--owner ${{ github.repository_owner }} \
--repo ${{ github.event.repository.name }} \
--pr-number ${{ github.event.pull_request.number }} \
--pr-url ${{ github.event.pull_request.html_url }}
6 changes: 5 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -32,4 +32,8 @@ build-storybook.log
chromatic.log
chromatic-build-*.xml
chromatic-diagnostics.json
.turbo/
.turbo/
# Environment variables
.env
.env.local
.env.*.local
160 changes: 160 additions & 0 deletions README-auto-code-review.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,160 @@
# 자동 코드리뷰 설정 가이드

## 개요

이 프로젝트는 MCP(Model Context Protocol)를 활용하여 GitHub PR에 대한 자동 코드리뷰를 수행하는 시스템입니다.

**현재 상태**: Slack 알림 기능은 비활성화되어 있으며, GitHub PR 코멘트만 작성됩니다.

## 설정 방법

### 1. 환경변수 설정

#### 방법 1: .env.example 템플릿 사용 (권장)

```bash
# 1. 템플릿 파일을 .env로 복사
cp .env.example .env

# 2. .env 파일을 편집하여 실제 토큰들을 입력
# 예: GITHUB_PAT=ghp_xxxxxxxxxxxxxxxxxxxx
```

#### 방법 2: 직접 .env 파일 생성

`.env` 파일을 생성하고 다음 환경변수들을 설정하세요:

```bash
# GitHub 설정
GITHUB_PAT=your_github_personal_access_token

# OpenAI 설정
OPENAI_API_KEY=your_openai_api_key

# Slack 설정 (현재 비활성화됨)
# SLACK_BOT_TOKEN=your_slack_bot_token
# SLACK_TEAM_ID=your_slack_team_id
# SLACK_CHANNEL_IDS=channel_id1,channel_id2
```

### 2. 필요한 토큰 및 권한

#### GitHub Personal Access Token

- **생성 위치**: https://github.com/settings/tokens
- **필요 권한**: `repo`, `pull_requests`, `issues`
- **설명**: PR 정보를 읽고 리뷰 코멘트를 작성하기 위해 필요

#### OpenAI API Key

- **생성 위치**: https://platform.openai.com/api-keys
- **설명**: GPT-4를 사용한 코드 분석을 위해 필요

#### Slack Bot Token (현재 비활성화됨)

- **생성 위치**: https://api.slack.com/apps
- **필요 권한**: `chat:write`, `channels:read`
- **설명**: 리뷰 완료 알림을 Slack 채널에 전송하기 위해 필요 (현재 사용하지 않음)

### 3. GitHub Actions Secrets 설정

GitHub 저장소의 Settings > Secrets and variables > Actions에서 다음 secrets를 추가하세요:

- `GITHUB_PAT`
- `OPENAI_API_KEY`
- `SLACK_BOT_TOKEN` (선택사항, 현재 비활성화됨)
- `SLACK_TEAM_ID` (선택사항, 현재 비활성화됨)
- `SLACK_CHANNEL_IDS` (선택사항, 현재 비활성화됨)

### 4. Docker 설치 확인

MCP 서버들이 Docker 컨테이너로 실행되므로 Docker가 설치되어 있어야 합니다.

### 5. 테스트 실행

```bash
# 의존성 설치
pip install -r requirements.txt

# 로컬 테스트 (테스트 데이터 사용)
python scripts/test_code_review.py --test-data

# 로컬 테스트 (실제 PR 사용)
python scripts/test_code_review.py

# 특정 PR 번호로 테스트
python scripts/test_code_review.py --pr 123
```

## 동작 방식

1. **PR 생성/업데이트**: GitHub Actions가 PR 이벤트를 감지
2. **MCP 서버 실행**: GitHub MCP 서버를 Docker로 실행
3. **코드리뷰 수행**: OpenAI GPT-4를 사용하여 코드 분석
4. **리뷰 코멘트 작성**: PR에 자동으로 리뷰 코멘트 작성
5. **Slack 알림**: 현재 비활성화됨

## 커스터마이징

### 리뷰 기준 수정

`scripts/auto_code_review.py`의 `human_message` 부분을 수정하여 리뷰 기준을 변경할 수 있습니다.

### Slack 알림 활성화

Slack 알림을 다시 활성화하려면:

1. `scripts/auto_code_review.py`에서 Slack 관련 주석을 해제
2. `.github/workflows/auto-code-review.yml`에서 Slack 환경변수 주석 해제
3. `.env` 파일에 Slack 토큰들 설정

### 특정 파일만 리뷰

GitHub Actions 워크플로우에 조건을 추가하여 특정 파일이 변경된 경우에만 리뷰를 실행할 수 있습니다.

## 문제 해결

### Docker 권한 오류

```bash
sudo usermod -aG docker $USER
```

### MCP 서버 연결 실패

- Docker가 실행 중인지 확인
- 네트워크 연결 상태 확인
- 환경변수가 올바르게 설정되었는지 확인

### OpenAI API 오류

- API 키가 유효한지 확인
- API 사용량 한도 확인
- 모델명이 올바른지 확인

### 환경변수 오류

```bash
# .env 파일 존재 확인
ls -la .env

# 환경변수 로드 확인
python -c "from dotenv import load_dotenv; load_dotenv(); import os; print('GITHUB_PAT:', bool(os.getenv('GITHUB_PAT')))"
```

## 모니터링

GitHub Actions 탭에서 워크플로우 실행 상태를 확인할 수 있습니다.

## 비용 고려사항

- OpenAI API 사용량에 따른 비용 발생
- GitHub Actions 실행 시간에 따른 비용 발생 (공개 저장소는 무료)
- Docker 컨테이너 실행 비용

## 보안 고려사항

- GitHub PAT는 최소 권한으로 설정
- Slack Bot Token은 필요한 채널만 접근 가능하도록 설정
- 환경변수는 절대 코드에 하드코딩하지 않음
- `.env` 파일은 절대 Git에 커밋하지 않음
Loading