Claude AI ์๋ ์ฝ๋ ๋ฆฌ๋ทฐ ๋ผ์ด๋ธ๋ฌ๋ฆฌ
dependencies {
implementation 'io.github.chanani:claude-reviewer:1.0.5'
}<dependency>
<groupId>io.github.chanani</groupId>
<artifactId>claude-reviewer</artifactId>
<version>1.0.5</version>
</dependency>import com.reviewer.ClaudeReviewer;
public class Main {
public static void main(String[] args) throws Exception {
ClaudeReviewer.builder()
.build()
.executeFullReview();
}
}- โ GitHub Actions - ์์ ์ง์
- โ Gitea Actions - ์์ ์ง์ (v1.0.5+)
GitHub Actions์์ ์๋ PR ๋ฆฌ๋ทฐ๋ฅผ ์ฌ์ฉํ๋ ค๋ฉด ์๋ 2๋จ๊ณ๊ฐ ํ์ํฉ๋๋ค:
- GitHub ์ ์ฅ์ ํ์ด์ง๋ก ์ด๋
- Settings โ Secrets and variables โ Actions
- "New repository secret" ํด๋ฆญ
- ์๋ ์ ๋ณด ์
๋ ฅ:
- Name:
ANTHROPIC_API_KEY - Secret: ๋น์ ์ Claude API ํค (์:
sk-ant-...)
- Name:
- Add secret ํด๋ฆญ
ํ๋ก์ ํธ ๋ฃจํธ์ ์๋ ํ์ผ์ ์์ฑํ์ธ์:
ํ์ผ ๊ฒฝ๋ก: .github/workflows/pr-review.yml
ํ์ผ ๋ด์ฉ:
name: AI PR Review
on:
pull_request:
types: [opened, synchronize, reopened]
jobs:
review:
runs-on: ubuntu-latest
permissions:
contents: read
pull-requests: write
steps:
- name: Checkout code
uses: actions/checkout@v4
- name: Claude PR Review
uses: chanani/lib-claude-reviewer@main
with:
github_token: ${{ secrets.GITHUB_TOKEN }}
anthropic_api_key: ${{ secrets.ANTHROPIC_API_KEY }}๐ก ์ฐธ๊ณ :
GITHUB_TOKEN์ GitHub๊ฐ ์๋ ์ ๊ณตํ๋ฏ๋ก Secrets์ ์ถ๊ฐํ ํ์ ์์ต๋๋คlanguage๋ ๊ธฐ๋ณธ๊ฐko(ํ๊ตญ์ด), ์์ด ์ํ๋ฉดlanguage: 'en'์ถ๊ฐfile_extensions๋ ๊ธฐ๋ณธ๊ฐ.java,.kt,.xml,.gradle, ๋ณ๊ฒฝ ์ํ๋ฉด ์ถ๊ฐ
git add .github/workflows/pr-review.yml
git commit -m "Add AI PR review workflow"
git push- โ PR ์์ฑ/์ ๋ฐ์ดํธ ์ ์๋์ผ๋ก Claude ์ฝ๋ ๋ฆฌ๋ทฐ
- โ PR์ ์๋์ผ๋ก ๋ฆฌ๋ทฐ ๋๊ธ ์์ฑ
- โ
.java,.kt,.xml,.gradleํ์ผ๋ง ๋ฆฌ๋ทฐ
Gitea Actions์์ ์๋ PR ๋ฆฌ๋ทฐ๋ฅผ ์ฌ์ฉํ๋ ค๋ฉด ์๋ 2๋จ๊ณ๊ฐ ํ์ํฉ๋๋ค:
- Gitea ์ ์ฅ์ ํ์ด์ง๋ก ์ด๋
- Settings โ Secrets โ Actions
- "Add Secret" ํด๋ฆญ
- ์๋ ์ ๋ณด ์
๋ ฅ:
- Name:
ANTHROPIC_API_KEY - Secret: ๋น์ ์ Claude API ํค (์:
sk-ant-...)
- Name:
- Add secret ํด๋ฆญ
ํ๋ก์ ํธ ๋ฃจํธ์ ์๋ ํ์ผ์ ์์ฑํ์ธ์:
ํ์ผ ๊ฒฝ๋ก: .gitea/workflows/pr-review.yml (๋๋ .github/workflows/pr-review.yml)
ํ์ผ ๋ด์ฉ:
name: AI PR Review
on:
pull_request:
types: [opened, synchronize, reopened]
jobs:
review:
runs-on: ubuntu-latest
permissions:
contents: read
pull-requests: write
steps:
- name: Checkout code
uses: actions/checkout@v4
- name: Claude PR Review
uses: chanani/lib-claude-reviewer@main
with:
gitea_url: 'https://gitea.example.com' # โ ๏ธ ํ์: ๋น์ ์ Gitea ์๋ฒ URL๋ก ๋ณ๊ฒฝ
github_token: ${{ secrets.GITEA_TOKEN }} # Gitea Access Token
anthropic_api_key: ${{ secrets.ANTHROPIC_API_KEY }} # โ ๏ธ ํ์: Secrets์ ๋ฑ๋ก ํ์git add .gitea/workflows/pr-review.yml
git commit -m "Add AI PR review workflow for Gitea"
git push- โ PR ์์ฑ/์ ๋ฐ์ดํธ ์ ์๋์ผ๋ก Claude ์ฝ๋ ๋ฆฌ๋ทฐ
- โ PR์ ์๋์ผ๋ก ๋ฆฌ๋ทฐ ๋๊ธ ์์ฑ
- โ
.java,.kt,.xml,.gradleํ์ผ๋ง ๋ฆฌ๋ทฐ
githubToken(String)- GitHub Personal Access Token ๋๋ Gitea Access Token (ํ์)anthropicApiKey(String)- Anthropic API Key (ํ์)repoName(String)- ์ ์ฅ์ ์ด๋ฆ "owner/repo" (ํ์)prNumber(int)- Pull Request ๋ฒํธ (ํ์)giteaUrl(String)- Gitea ์๋ฒ URL (Gitea ์ฌ์ฉ ์๋ง ํ์, ์: https://gitea.example.com)model(String)- Claude ๋ชจ๋ธ (๊ธฐ๋ณธ๊ฐ: claude-sonnet-4-5-20250929)language(String)- ๋ฆฌ๋ทฐ ์ธ์ด "ko" ๋๋ "en" (๊ธฐ๋ณธ๊ฐ: ko)fileExtensions(String)- ๋ฆฌ๋ทฐํ ํ์ผ ํ์ฅ์ (๊ธฐ๋ณธ๊ฐ: .java,.kt,.xml,.gradle)maxTokens(int)- ์ต๋ ํ ํฐ ์ (๊ธฐ๋ณธ๊ฐ: 2000)
giteaUrl์ด ์ค์ ๋์ด ์์ผ๋ฉด โ Gitea ๋ชจ๋๋ก ์๋giteaUrl์ด ์์ผ๋ฉด โ GitHub ๋ชจ๋๋ก ์๋ (๊ธฐ๋ณธ๊ฐ)
Maven Central์ ๋ฐฐํฌํ๋ ๋ฐฉ๋ฒ์ PUBLISHING.md๋ฅผ ์ฐธ์กฐํ์ธ์.
- Java 21+
- Gradle 8.x+
MIT License
Pull Request๋ ์ธ์ ๋ ํ์ํฉ๋๋ค!
์ด์๊ฐ ์๋ค๋ฉด GitHub Issues์ ๋ฑ๋กํด์ฃผ์ธ์.