Skip to content

fix: gemini code review 관련 깃허브 액션 오류 해결 #12

fix: gemini code review 관련 깃허브 액션 오류 해결

fix: gemini code review 관련 깃허브 액션 오류 해결 #12

Workflow file for this run

name: Gemini Automated Code Review
on:
pull_request:
types: [opened, reopened, synchronize]
branches:
- main
permissions:
pull-requests: write
contents: read
jobs:
code_review:
runs-on: ubuntu-latest
steps:
- name: Checkout repository
uses: actions/checkout@v4
- name: Set up Node.js
uses: actions/setup-node@v4
with:
node-version: 20
- name: Install GoogleGenerativeAI SDK
run: npm install @google/generative-ai
- name: Generate Git Diff for PR
run: |
git fetch origin "${{ github.event.pull_request.base.ref }}"
git fetch origin "${{ github.event.pull_request.head.ref }}"
git diff "origin/${{ github.event.pull_request.base.ref }}"..."origin/${{ github.event.pull_request.head.ref }}" > diff.txt
echo "✅ Diff generated:"
head -n 20 diff.txt || true
- name: Run Gemini Review
id: gemini_review
uses: actions/github-script@v7
env:
GEMINI_API_KEY: ${{ secrets.GEMINI_API_KEY }}
with:
script: |
const fs = require("fs");
const diff_output = fs.readFileSync("diff.txt", "utf8");
if (!diff_output.trim()) {
console.log("No code changes detected, skipping review.");
fs.writeFileSync("review_result.txt", "변경된 코드가 없어 리뷰를 건너뜁니다.");
return;
}
const { GoogleGenerativeAI } = require("@google/generative-ai");
const genAI = new GoogleGenerativeAI(process.env.GEMINI_API_KEY);
const model = genAI.getGenerativeModel({ model: "gemini-1.5-flash" });
const prompt = `
당신은 **시니어 프론트엔드 개발자**입니다.
다음은 Pull Request의 git diff 내용입니다.
각 파일의 변경사항을 면밀히 검토하고 아래 항목 중심으로 리뷰를 작성하세요.
1. 잠재적인 버그나 로직 오류
2. 성능 저하를 유발할 수 있는 부분
3. 타입스크립트 문법 / 타입 오류 및 개선점
4. 변수명, 함수명, 주석 스타일 관련 개선점
5. 중복 코드, 하드코딩된 값, 리팩토링 포인트
6. 전반적인 코드 품질 및 가독성
7. 구체적이고 건설적인 개선 제안 (최소 5개 이상)
**출력 형식 요구사항**
- 한국어로 작성
- 파일별 섹션 구분 (예: ### src/components/Button.tsx)
- 마크다운 형식 사용
- 불필요한 서론/결론 없이 리뷰 내용만 출력
아래는 변경된 코드입니다:
<git diff>
${diff_output}
</git diff>
`;
console.log("🤖 Gemini에게 코드 리뷰 요청 중...");
const result = await model.generateContent(prompt);
const text = result.response.text();
fs.writeFileSync("review_result.txt", text);
console.log("✅ Gemini 리뷰 결과 저장 완료");
- name: Comment on Pull Request
uses: actions/github-script@v7
with:
script: |
const fs = require("fs");
const review = fs.readFileSync("review_result.txt", "utf8");
const pr_number = context.payload.pull_request.number;
const owner = context.repo.owner;
const repo = context.repo.repo;
console.log(`🗣️ Posting Gemini review to PR #${pr_number}`);
await github.rest.issues.createComment({
owner,
repo,
issue_number: pr_number,
body: `## 🤖 Gemini 코드리뷰 결과\n${review}`
});
console.log("✅ Gemini 리뷰 코멘트 작성 완료");