fix: gemini code review 관련 깃허브 액션 오류 해결 #12
Workflow file for this run
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| 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 리뷰 코멘트 작성 완료"); |