GitHub¶
Detaillierter Leitfaden für die Integration mit GitHub Actions.
Berechtigungen¶
Mindestberechtigungen¶
GITHUB_TOKEN in Actions¶
In GitHub Actions ist GITHUB_TOKEN automatisch verfügbar:
Automatische Token-Berechtigungen:
| Berechtigung | Status | Hinweis |
|---|---|---|
contents: read |
Standard | |
pull-requests: write |
Muss in permissions angegeben werden |
Fork-PRs
Für PRs aus Fork-Repositories hat GITHUB_TOKEN nur Leseberechtigungen.
AI Review kann keine Kommentare für Fork-PRs posten.
Personal Access Token erhalten¶
Für lokale Ausführungen benötigen Sie einen Personal Access Token (PAT):
- Gehen Sie zu
Settings → Developer settings → Personal access tokens - Wählen Sie Fine-grained tokens (empfohlen) oder Classic
- Klicken Sie auf Generate new token
Fine-grained Token (empfohlen):
| Einstellung | Wert |
|---|---|
| Repository access | Only select repositories → Ihr Repository |
| Permissions | Pull requests: Read and write |
Classic Token:
| Scope | Beschreibung |
|---|---|
repo |
Voller Zugriff auf Repository |
- Klicken Sie auf Generate token
- Kopieren Sie den Token und speichern Sie ihn als
GITHUB_TOKEN
Token speichern
GitHub zeigt den Token nur einmal an. Speichern Sie ihn sofort.
Trigger¶
Empfohlener Trigger¶
| Typ | Wann ausgelöst |
|---|---|
opened |
PR erstellt |
synchronize |
Neue Commits im PR |
reopened |
PR wieder geöffnet |
Dateifilterung¶
Review nur für bestimmte Dateien ausführen:
Branch-Filterung¶
Secrets¶
Secrets hinzufügen¶
Settings → Secrets and variables → Actions → New repository secret
| Secret | Erforderlich | Beschreibung |
|---|---|---|
AI_REVIEWER_GOOGLE_API_KEY |
Gemini API-Schlüssel |
Verwendung¶
Secrets niemals hartcodieren
Workflow-Beispiele¶
Minimal¶
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 }}
Über GITHUB_TOKEN
secrets.GITHUB_TOKEN ist ein automatisches Token, das GitHub für jeden Workflow-Lauf erstellt. Sie müssen es nicht manuell zu den Secrets hinzufügen — es ist bereits verfügbar.
Token-Berechtigungen werden durch den permissions-Abschnitt in der Workflow-Datei definiert.
Mit Concurrency (empfohlen)¶
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
Was Concurrency bewirkt:
- Wenn ein neuer Commit gepusht wird, während das Review noch läuft — wird das alte Review abgebrochen
- Spart Ressourcen und API-Aufrufe
Mit Fork-PR-Filterung¶
jobs:
review:
runs-on: ubuntu-latest
# Nicht für Fork-PRs ausführen (kein Zugriff auf Secrets)
if: github.event.pull_request.head.repo.full_name == github.repository
GitHub Action Inputs¶
| Input | Beschreibung | Standard |
|---|---|---|
google_api_key |
Gemini API-Schlüssel | erforderlich |
github_token |
GitHub-Token | ${{ github.token }} |
language |
Antwortsprache | en |
language_mode |
Sprachmodus | adaptive |
gemini_model |
Gemini-Modell | gemini-2.5-flash |
log_level |
Log-Level | INFO |
review_max_comment_chars |
Max. MR-Kommentarzeichen im Prompt | 3000 |
review_include_bot_comments |
Bot-Kommentare in Prompt einbeziehen | true |
review_post_inline_comments |
Inline-Kommentare an Codezeilen posten | true |
gemini_model_fallback |
Fallback-Modellkette (durch Komma getrennt) | gemini-3-flash-preview |
review_enable_dialogue |
Kommentare in Dialoge gruppieren | true |
discovery_enabled |
Project Discovery aktivieren | true |
discovery_verbose |
Discovery-Kommentar immer posten | false |
discovery_timeout |
Discovery-Timeout in Sekunden | 30 |
Umgebungsvariablen
Die Action ordnet Inputs intern AI_REVIEWER_*-Umgebungsvariablen zu. Beim Ausführen außerhalb der Action verwenden Sie AI_REVIEWER_*-Variablen direkt (alte Namen wie GOOGLE_API_KEY funktionieren weiterhin als Fallback).
Variable-gesteuerte Konfiguration¶
Verwenden Sie Repository Variables, um zwischen LLM-Anbietern und Modellen zu wechseln, ohne die Workflow-Datei zu ändern. Dies ist nützlich, um die Review-Qualität verschiedener Modelle am selben PR zu vergleichen.
Einrichtung¶
Secrets (einmalig festlegen):
| Secret | Beschreibung |
|---|---|
AI_REVIEWER_GOOGLE_API_KEY |
Gemini API-Schlüssel |
AI_REVIEWER_MISTRAL_API_KEY |
Mistral API-Schlüssel |
Variables (Settings → Secrets and variables → Actions → Variables):
| Variable | Beschreibung | Standard |
|---|---|---|
LLM_PROVIDER |
Primärer Anbieter (google, mistral) |
google |
LLM_FALLBACK_PROVIDER |
Fallback-Anbieter | (keine) |
MISTRAL_MODEL |
Mistral-Modell | mistral-large-latest |
MISTRAL_API_URL |
Benutzerdefinierte API-URL (für Codestral Free Tier) | (keine) |
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 || '' }}
Presets umschalten¶
Ändern Sie die Variables in der GitHub-Oberfläche und führen Sie den Workflow am selben PR erneut aus (Re-run):
| Preset | LLM_PROVIDER |
MISTRAL_MODEL |
MISTRAL_API_URL |
LLM_FALLBACK_PROVIDER |
|---|---|---|---|---|
| Gemini (Standard) | google |
(leer) | (leer) | (leer) |
| Mistral Large | mistral |
mistral-large-latest |
(leer) | google |
| Codestral Free | mistral |
codestral-latest |
https://codestral.mistral.ai |
google |
| Devstral | mistral |
devstral-latest |
(leer) | google |
Codestral Free Tier Schlüssel
Für das Preset „Codestral Free" muss AI_REVIEWER_MISTRAL_API_KEY einen Schlüssel von codestral.mistral.ai enthalten, nicht von console.mistral.ai.
Variables vs Secrets
Secrets — verschlüsselt, in Logs verborgen — für API-Schlüssel. Variables — in Logs sichtbar — für nicht-sensible Konfiguration (Modellnamen).
Review-Ergebnis¶
Inline-Kommentare¶
AI Review postet Kommentare direkt an Code-Zeilen:
CRITICAL — kritische Probleme (Sicherheit, Bugs)
WARNING — Empfehlungen
INFO — lehrreiche Hinweise
Apply Suggestion¶
Jeder Kommentar mit einem Code-Vorschlag hat einen "Apply suggestion"-Button:
GitHub rendert dies automatisch als interaktiven Button.
Zusammenfassung¶
Am Ende des Reviews wird eine Zusammenfassung gepostet mit:
- Gesamtstatistik der Probleme
- Metriken (Zeit, Tokens, Kosten)
- Gute Praktiken (positives Feedback)
Fehlerbehebung¶
Review postet keine Kommentare¶
Überprüfen:
permissions: pull-requests: writeist im WorkflowAI_REVIEWER_GOOGLE_API_KEY-Secret ist gesetzt- PR ist nicht aus einem Fork-Repository
"Resource not accessible by integration"¶
Ursache: Unzureichende Berechtigungen.
Lösung: Berechtigungen hinzufügen:
Rate Limit von Gemini¶
Ursache: Free-Tier-Limit überschritten (15 RPM).
Lösung:
- Eine Minute warten
concurrencyhinzufügen, um alte Läufe abzubrechen- Kostenpflichtiges Tier in Betracht ziehen