Code Review by Gemini AI #214
This file contains 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: "Code Review by Gemini AI" | |
on: | |
issue_comment: | |
types: | |
- created | |
- updated | |
jobs: | |
review: | |
runs-on: ubuntu-latest | |
permissions: | |
contents: read | |
pull-requests: write | |
issues: read | |
steps: | |
- uses: actions/checkout@v3 | |
- name: Only PR comments | |
if: ${{ !github.event.issue.pull_request || !contains(github.event.comment.body,'!ai') }} | |
run: exit 1 | |
- name: Put a reaction to the comment | |
run: gh api graphql --silent --raw-field query="mutation AddReaction {addReaction(input:{subjectId:\"$NODE_ID\",content:EYES}){reaction{content}subject{id}}}" | |
env: | |
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
NODE_ID: ${{ github.event.comment.node_id }} | |
- name: Fetch filtered PR diff (only .ts, .tsx, .sol files) | |
id: pr-diff | |
uses: actions/github-script@v6 | |
with: | |
script: | | |
const pr_number = context.payload.issue.number; | |
const pr = await github.rest.pulls.get({ | |
owner: context.repo.owner, | |
repo: context.repo.repo, | |
pull_number: pr_number | |
}); | |
const { data: diff } = await github.request('GET /repos/{owner}/{repo}/pulls/{pull_number}', { | |
headers: { | |
accept: 'application/vnd.github.v3.diff' | |
}, | |
owner: context.repo.owner, | |
repo: context.repo.repo, | |
pull_number: pr_number | |
}); | |
// Initialize variables to store filtered diff and a flag for capturing lines | |
let filteredDiff = ''; | |
let capture = false; | |
// Iterate over each line in the diff | |
diff.split('\n').forEach(line => { | |
// Check if the line is a diff line for the relevant file types | |
if (line.startsWith('diff --git')) { | |
capture = line.endsWith('.ts') || line.endsWith('.tsx') || line.endsWith('.sol'); | |
} | |
// If capturing, append the current line to the filtered diff | |
if (capture) { | |
filteredDiff += line + '\n'; | |
} | |
}); | |
// Get the head commit SHA | |
const headSha = pr.data.head.sha; | |
// Set outputs for the filtered diff and head SHA | |
core.setOutput("diff", filteredDiff); | |
core.setOutput("headSha", headSha); | |
- name: Log filtered diff to file | |
id: log-diff | |
continue-on-error: true | |
run: | | |
echo "${{ steps.pr-diff.outputs.diff }}" | |
- uses: rubensflinco/[email protected] | |
name: "Code Review by Gemini AI" | |
id: review | |
with: | |
gemini_api_key: ${{ secrets.GEMINI_API_KEY }} | |
github_token: ${{ secrets.GITHUB_TOKEN }} | |
github_repository: ${{ github.repository }} | |
github_pull_request_number: ${{ github.event.issue.number }} | |
git_commit_hash: ${{ steps.pr-diff.outputs.headSha }} | |
model: "gemini-1.5-pro-latest" | |
pull_request_diff: |- | |
${{ steps.pr-diff.outputs.diff }} | |
pull_request_chunk_size: "3500" | |
extra_prompt: |- | |
Focus your review on code logic, security vulnerabilities, and potential improvements in these files. | |
Never ask to provide more core and only review the code you received. | |
log_level: "DEBUG" | |
- name: Add thumbs down reaction if something went wrong | |
if: failure() # This step runs if any previous step failed | |
run: gh api graphql --silent --raw-field query="mutation AddReaction {addReaction(input:{subjectId:\"$NODE_ID\",content:THUMBS_DOWN}){reaction{content}subject{id}}}" | |
env: | |
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
NODE_ID: ${{ github.event.comment.node_id }} |