Lo que vas a construir
Un sistema de code review automatizado que analiza pull requests y sugiere mejoras usando IA.
Cada vez que alguien hace un PR, la IA revisa el diff completo. Detecta bugs potenciales, vulnerabilidades de seguridad, codigo duplicado, y oportunidades de refactoring. Genera un reporte con score de calidad y comentarios especificos por linea.
Al terminar tendras un script que obtiene el diff de GitHub, lo envia a Gemini para analisis, y genera un reporte detallado. Puedes integrarlo con GitHub Actions para que corra automaticamente en cada PR.
El prompt para empezar
Crea un script que:
- Obtenga diff de un PR de GitHub
- Envíe a Gemini para análisis
- Genere comentarios de review
- (Opcional) Postee en GitHub
Lo que la IA creará
import google.generativeai as genai
import subprocess
import os
genai.configure(api_key=os.environ["GEMINI_API_KEY"])
model = genai.GenerativeModel("gemini-1.5-flash")
def get_diff(base: str = "main") -> str:
"""Obtener diff del branch actual vs base"""
result = subprocess.run(
["git", "diff", base],
capture_output=True,
text=True
)
return result.stdout
def review_code(diff: str) -> str:
"""Revisar código con IA"""
prompt = f"""Eres un senior developer haciendo code review.
Analiza este diff y proporciona:
1. **Resumen**: Qué hace este cambio
2. **Bugs potenciales**: Errores que podrían ocurrir
3. **Seguridad**: Vulnerabilidades detectadas
4. **Mejoras**: Sugerencias de refactoring
5. **Score**: 1-10 de calidad
DIFF:
```diff
{diff[:10000]}
Responde en español, sé constructivo y específico."""
response = model.generate_content(prompt)
return response.text
def main(): print("🔍 Obteniendo diff...") diff = get_diff()
if not diff:
print("No hay cambios para revisar")
return
print(f"📝 Analizando {len(diff)} caracteres de diff...")
review = review_code(diff)
print("\n" + "=" * 50)
print("📋 CODE REVIEW")
print("=" * 50)
print(review)
if name == "main": main()
---
## Integración con GitHub Actions
```yaml
name: AI Code Review
on:
pull_request:
types: [opened, synchronize]
jobs:
review:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
with:
fetch-depth: 0
- name: Get diff
run: |
git diff origin/main > diff.txt
- name: AI Review
env:
GEMINI_API_KEY: ${{ secrets.GEMINI_API_KEY }}
run: |
python review.py diff.txt > review.md
- name: Comment on PR
uses: actions/github-script@v7
with:
script: |
const fs = require('fs');
const review = fs.readFileSync('review.md', 'utf8');
github.rest.issues.createComment({
owner: context.repo.owner,
repo: context.repo.repo,
issue_number: context.issue.number,
body: review
});