-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathaction.yml
More file actions
101 lines (97 loc) · 3.48 KB
/
Copy pathaction.yml
File metadata and controls
101 lines (97 loc) · 3.48 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
name: "Gemini AI Code Reviewer"
description: "This GitHub Action automatically reviews PRs using Google's Gemini AI model."
author: 'emnakhemiri'
branding:
icon: 'zoom-in'
color: 'blue'
inputs:
GITHUB_TOKEN:
description: 'GitHub token. Scope to contents:read + pull_requests:write (+ checks:write for Checks API).'
required: true
GEMINI_API_KEY:
description: 'Google Gemini API key'
required: true
MODEL:
description: 'Model string (e.g. gemini-2.5-flash, gemini-2.5-pro, or a Claude model). Single swap moves tiers.'
required: false
default: 'gemini-2.5-flash'
EXCLUDE:
description: 'Comma-separated list of file patterns to exclude'
required: false
default: ''
MAX_ITERATIONS:
description: 'Max tool-call iterations in the agentic loop.'
required: false
default: '6'
TIMEOUT_MS:
description: 'Wall-clock budget for the agentic loop, in ms.'
required: false
default: '30000'
SMALL_PR_FILES_THRESHOLD:
description: 'Below this file count (AND line count), use single-pass.'
required: false
default: '5'
SMALL_PR_LINES_THRESHOLD:
description: 'Below this changed-line count (AND file count), use single-pass.'
required: false
default: '50'
MAX_CONCURRENT_REVIEWS:
description: 'Max concurrent PR reviews in the same process.'
required: false
default: '3'
GEMINI_RPM:
description: 'Max requests per minute to Gemini. Set to 5 for free-tier flash, 60+ for paid.'
required: false
default: '5'
MIN_CONFIDENCE_TO_POST:
description: 'Minimum finding confidence to post inline (low|medium|high).'
required: false
default: 'high'
PROMPT_CACHE_TTL_SECONDS:
description: 'Gemini context cache TTL for system prompt + conventions.'
required: false
default: '3600'
CODING_CONVENTIONS:
description: 'Team conventions block appended to the cached prompt.'
required: false
default: ''
ENABLE_LANGSMITH:
description: 'Enable LangSmith tracing when truthy.'
required: false
default: 'false'
LANGSMITH_PROJECT:
description: 'LangSmith project name.'
required: false
default: 'gemini-ai-code-reviewer'
runs:
using: 'composite'
steps:
- uses: actions/checkout@v4
- uses: actions/setup-python@v4
with:
python-version: '3.10'
- name: Install dependencies
shell: bash
run: |
python -m pip install --upgrade pip
pip install -r ${{ github.action_path }}/requirements.txt
- name: Run code review
shell: bash
env:
GITHUB_TOKEN: ${{ inputs.GITHUB_TOKEN }}
GEMINI_API_KEY: ${{ inputs.GEMINI_API_KEY }}
# MODEL is the single swap point between Gemini tiers / Claude.
GEMINI_MODEL: ${{ inputs.MODEL }}
EXCLUDE: ${{ inputs.EXCLUDE }}
MAX_ITERATIONS: ${{ inputs.MAX_ITERATIONS }}
TIMEOUT_MS: ${{ inputs.TIMEOUT_MS }}
SMALL_PR_FILES_THRESHOLD: ${{ inputs.SMALL_PR_FILES_THRESHOLD }}
SMALL_PR_LINES_THRESHOLD: ${{ inputs.SMALL_PR_LINES_THRESHOLD }}
MAX_CONCURRENT_REVIEWS: ${{ inputs.MAX_CONCURRENT_REVIEWS }}
GEMINI_RPM: ${{ inputs.GEMINI_RPM }}
MIN_CONFIDENCE_TO_POST: ${{ inputs.MIN_CONFIDENCE_TO_POST }}
PROMPT_CACHE_TTL_SECONDS: ${{ inputs.PROMPT_CACHE_TTL_SECONDS }}
CODING_CONVENTIONS: ${{ inputs.CODING_CONVENTIONS }}
ENABLE_LANGSMITH: ${{ inputs.ENABLE_LANGSMITH }}
LANGSMITH_PROJECT: ${{ inputs.LANGSMITH_PROJECT }}
run: python ${{ github.action_path }}/review_code_gemini.py