GitHub¶
Detaljan vodič za integraciju sa GitHub Actions.
Dozvole¶
Minimalne dozvole¶
GITHUB_TOKEN u Actions¶
U GitHub Actions, GITHUB_TOKEN je automatski dostupan:
Automatske dozvole tokena:
| Dozvola | Status | Napomena |
|---|---|---|
contents: read |
Podrazumijevano | |
pull-requests: write |
Mora se navesti u permissions |
Fork PR-ovi
Za PR-ove iz fork repozitorijuma, GITHUB_TOKEN ima samo-čitanje dozvole.
AI Review ne može objavljivati komentare za fork PR-ove.
Kako dobiti Personal Access Token¶
Za lokalno pokretanje, trebate Personal Access Token (PAT):
- Idite na
Settings → Developer settings → Personal access tokens - Izaberite Fine-grained tokens (preporučeno) ili Classic
- Kliknite Generate new token
Fine-grained token (preporučeno):
| Podešavanje | Vrijednost |
|---|---|
| Repository access | Only select repositories → vaš repozitorijum |
| Permissions | Pull requests: Read and write |
Classic token:
| Scope | Opis |
|---|---|
repo |
Pun pristup repozitorijumu |
- Kliknite Generate token
- Kopirajte token i sačuvajte ga kao
GITHUB_TOKEN
Sačuvajte token
GitHub prikazuje token samo jednom. Sačuvajte ga odmah.
Triggeri¶
Preporučeni trigger¶
| Tip | Kada se aktivira |
|---|---|
opened |
PR kreiran |
synchronize |
Novi commitovi u PR-u |
reopened |
PR ponovo otvoren |
Filtriranje fajlova¶
Pokrenite reviziju samo za određene fajlove:
Filtriranje grana¶
Tajne¶
Dodavanje tajni¶
Settings → Secrets and variables → Actions → New repository secret
| Tajna | Obavezna | Opis |
|---|---|---|
AI_REVIEWER_GOOGLE_API_KEY |
Gemini API ključ |
Upotreba¶
Nikada ne hardkodujte tajne
Primjeri workflow-a¶
Minimalni¶
name: AI Code Review
on:
pull_request:
types: [opened, synchronize]
jobs:
review:
runs-on: ubuntu-latest
permissions:
contents: read
pull-requests: write
steps:
- uses: KonstZiv/ai-code-reviewer@v1
with:
github_token: ${{ secrets.GITHUB_TOKEN }}
google_api_key: ${{ secrets.AI_REVIEWER_GOOGLE_API_KEY }}
O GITHUB_TOKEN
secrets.GITHUB_TOKEN je automatski token koji GitHub kreira za svako pokretanje workflow-a. Ne trebate ga ručno dodavati u tajne — već je dostupan.
Dozvole tokena se definišu sekcijom permissions u workflow fajlu.
Sa konkurentnošću (preporučeno)¶
name: AI Code Review
on:
pull_request:
types: [opened, synchronize, reopened]
concurrency:
group: ai-review-${{ github.event.pull_request.number }}
cancel-in-progress: true
jobs:
review:
runs-on: ubuntu-latest
if: github.event.pull_request.head.repo.full_name == github.repository
permissions:
contents: read
pull-requests: write
steps:
- uses: KonstZiv/ai-code-reviewer@v1
with:
github_token: ${{ secrets.GITHUB_TOKEN }}
google_api_key: ${{ secrets.AI_REVIEWER_GOOGLE_API_KEY }}
language: uk
language_mode: adaptive
Šta radi konkurentnost:
- Ako se novi commit push-uje dok revizija još traje — stara revizija se otkazuje
- Štedi resurse i API pozive
Sa filterom fork PR-ova¶
jobs:
review:
runs-on: ubuntu-latest
# Ne pokreći za fork PR-ove (nema pristupa tajnama)
if: github.event.pull_request.head.repo.full_name == github.repository
GitHub Action inputi¶
| Input | Opis | Podrazumijevano |
|---|---|---|
google_api_key |
Gemini API ključ | obavezno |
github_token |
GitHub token | ${{ github.token }} |
language |
Jezik odgovora | en |
language_mode |
Jezički režim | adaptive |
gemini_model |
Gemini model | gemini-2.5-flash |
log_level |
Nivo logova | INFO |
review_max_comment_chars |
Maks. znakova komentara MR-a u promptu | 3000 |
review_include_bot_comments |
Uključi komentare botova u prompt | true |
review_post_inline_comments |
Objavi inline komentare na linijama | true |
gemini_model_fallback |
Lanac rezervnih modela (odvojenih zarezima) | gemini-3-flash-preview |
review_enable_dialogue |
Grupisati komentare u dijaloge | true |
discovery_enabled |
Aktivirati project discovery | true |
discovery_verbose |
Uvijek objaviti discovery komentar | false |
discovery_timeout |
Tajmaut discovery-ja u sekundama | 30 |
Varijable okruženja
Action interno mapira inpute na AI_REVIEWER_* varijable okruženja. Kada pokrećete van Action-a, koristite AI_REVIEWER_* varijable direktno (stara imena poput GOOGLE_API_KEY i dalje rade kao fallback).
Konfiguracija putem Variables¶
Koristite Repository Variables za prebacivanje između LLM provajdera i modela bez mijenjanja workflow fajla. Ovo je korisno za poređenje kvaliteta revizije različitih modela na istom PR-u.
Podešavanje¶
Secrets (postaviti jednom):
| Secret | Opis |
|---|---|
AI_REVIEWER_GOOGLE_API_KEY |
Gemini API ključ |
AI_REVIEWER_MISTRAL_API_KEY |
Mistral API ključ |
Variables (Settings → Secrets and variables → Actions → Variables):
| Variable | Opis | Podrazumijevano |
|---|---|---|
LLM_PROVIDER |
Primarni provajder (google, mistral) |
google |
LLM_FALLBACK_PROVIDER |
Fallback provajder | (nema) |
MISTRAL_MODEL |
Mistral model | mistral-large-latest |
MISTRAL_API_URL |
Prilagođeni URL API-ja (za Codestral free tier) | (nema) |
Workflow¶
name: AI Code Review
on:
pull_request:
types: [opened, synchronize, reopened]
concurrency:
group: ai-review-${{ github.event.pull_request.number }}
cancel-in-progress: true
jobs:
review:
runs-on: ubuntu-latest
if: github.event.pull_request.head.repo.full_name == github.repository
permissions:
contents: read
pull-requests: write
steps:
- uses: KonstZiv/ai-code-reviewer@v1
with:
github_token: ${{ secrets.GITHUB_TOKEN }}
google_api_key: ${{ secrets.AI_REVIEWER_GOOGLE_API_KEY }}
mistral_api_key: ${{ secrets.AI_REVIEWER_MISTRAL_API_KEY }}
llm_provider: ${{ vars.LLM_PROVIDER || 'google' }}
llm_fallback_provider: ${{ vars.LLM_FALLBACK_PROVIDER || '' }}
mistral_model: ${{ vars.MISTRAL_MODEL || 'mistral-large-latest' }}
mistral_api_url: ${{ vars.MISTRAL_API_URL || '' }}
Prebacivanje preseta¶
Promijenite Variables u GitHub interfejsu, zatim pokrenite workflow ponovo (Re-run) na istom PR-u:
| Preset | LLM_PROVIDER |
MISTRAL_MODEL |
MISTRAL_API_URL |
LLM_FALLBACK_PROVIDER |
|---|---|---|---|---|
| Gemini (podrazumijevano) | google |
(prazno) | (prazno) | (prazno) |
| Mistral Large | mistral |
mistral-large-latest |
(prazno) | google |
| Codestral free | mistral |
codestral-latest |
https://codestral.mistral.ai |
google |
| Devstral | mistral |
devstral-latest |
(prazno) | google |
Codestral free tier ključ
Za preset „Codestral free" AI_REVIEWER_MISTRAL_API_KEY mora sadržavati ključ sa codestral.mistral.ai, ne sa console.mistral.ai.
Variables vs Secrets
Secrets — šifrovani, skriveni u logovima — za API ključeve. Variables — vidljivi u logovima — za nesenzitivnu konfiguraciju (imena modela).
Rezultat revizije¶
Inline komentari¶
AI Review objavljuje komentare direktno na linijama koda:
CRITICAL — kritični problemi (bezbjednost, bagovi)
WARNING — preporuke
INFO — edukativne napomene
Apply Suggestion¶
Svaki komentar sa prijedlogom koda ima dugme "Apply suggestion":
GitHub automatski renderuje ovo kao interaktivno dugme.
Rezime¶
Na kraju revizije, objavljuje se Rezime sa:
- Ukupnom statistikom problema
- Metrikama (vrijeme, tokeni, cijena)
- Dobrim praksama (pozitivne povratne informacije)
Rješavanje problema¶
Revizija ne objavljuje komentare¶
Provjerite:
permissions: pull-requests: writeje u workflow-uAI_REVIEWER_GOOGLE_API_KEYtajna je podešena- PR nije iz fork repozitorijuma
"Resource not accessible by integration"¶
Uzrok: Nedovoljne dozvole.
Rješenje: Dodajte dozvole:
Rate Limit od Gemini¶
Uzrok: Prekoračeno ograničenje besplatnog nivoa (15 RPM).
Rješenje:
- Sačekajte minut
- Dodajte
concurrencyda otkažete stare pokretanja - Razmislite o plaćenom nivou