GitHub App serverless que auto-aprueba pull requests después de que CI pasa, con revisión de código opcional vía Amazon Bedrock. Cinco repositorios: app TypeScript/Probot, módulo Terraform AWS (Lambda + API Gateway + Secrets Manager + SQS DLQ), módulo Terraform GitHub (webhooks), infra de despliegue y repo de pruebas.
Una GitHub App serverless que auto-aprueba pull requests cuando todos los checks de CI pasan. Opcionalmente, antes de aprobar, envía el diff a Amazon Bedrock para una revisión de código con IA que detecta bugs, vulnerabilidades de seguridad y problemas de rendimiento.
El proyecto se divide en cinco repositorios con responsabilidades claras:
| Repositorio | Versión | Rol |
|---|---|---|
| pr-auto-approver | v1.0.0 | App TypeScript/Probot — lógica de negocio (esbuild → ~1 MB) |
| terraform-aws-pr-auto-approver | v1.4.0 | Módulo Terraform AWS — Lambda, API Gateway, Secrets Manager, SQS DLQ (Registry) |
| pr-auto-approver-infra | latest | Despliegue privado — consume los módulos, branch protegido |
| pr-auto-approver-test | — | Repo de pruebas — el historial de PRs muestra el bot en acción |
| terraform-github-pr-auto-approver | v1.0.0 | Módulo Terraform GitHub — webhooks por repositorio (opcional, la GitHub App los configura automáticamente) |

El PR #21 muestra el ciclo completo de revisión con IA. El primer commit contenía una API key hardcodeada y una vulnerabilidad de inyección SQL — el bot (jonmatumdev, usando PAT) detectó ambos problemas, dejó comentarios inline y solicitó cambios. El autor corrigió el código, pusheó un nuevo commit, el bot re-revisó automáticamente el diff actualizado, no encontró problemas y aprobó. El PR se mergeó — todo en menos de dos minutos.
El flujo completo desde que se abre un PR hasta la aprobación:
La gestión de secretos sigue el principio de mínimo privilegio:
approval_token (PAT), el bot verifica su validez en cada cold start — registra CRITICAL si está expirado y WARNING si expira en menos de 14 díassecretsmanager:GetSecretValue solo para los ARNs específicosbedrock:InvokeModel) se agregan solo cuando bedrock_enabled = trueEl módulo terraform-aws-pr-auto-approver v1.4.0 crea:
| Recurso | Configuración |
|---|---|
| Lambda | Node.js 20, 128 MB / 30s (sin Bedrock), 256 MB / 120s (con Bedrock) |
| API Gateway v2 | HTTP API con ruta POST |
| Secrets Manager | 2-3 secretos (private key + webhook secret + approval token opcional) |
| SQS Dead Letter Queue | Retención 14 días, alarma cuando hay mensajes (webhooks fallidos) |
| IAM Role | Least-privilege, Bedrock condicional |
| CloudWatch Logs | 14 días de retención |
| CloudWatch Dashboard | Métricas Lambda, API GW, Bedrock (opcional) |
| CloudWatch Alarms | Errores, throttles, duración alta, 5xx, DLQ |
| SNS Topic | Alertas por email (opcional) |
| AWS Budget | Presupuesto mensual Bedrock (opcional) |
El módulo terraform-github-pr-auto-approver v1.0.0 configura webhooks en cada repositorio especificado. Este módulo es opcional — al instalar la GitHub App en un repositorio, los webhooks se configuran automáticamente. El módulo solo es necesario si se prefiere gestionar los webhooks vía IaC en lugar de la configuración de la App.
module "approver_github" {
source = "jonmatum/pr-auto-approver/github"
version = "~> 1.0"
webhook_url = module.approver_infra.webhook_url
webhook_secret = var.webhook_secret
github_repositories = ["repo-one", "repo-two"]
}Suscribe cada repositorio a los eventos pull_request y check_suite, apuntando al endpoint de API Gateway.

Cuando bedrock_enabled = true, Lambda envía el diff del PR a Claude 3.5 Haiku (configurable) antes de aprobar. En el PR #21, el bot detectó 2 problemas en código intencionalmente vulnerable — una API key hardcodeada y una inyección SQL — y solicitó cambios con comentarios inline en lugar de aprobar. El modelo revisa:
El prompt de revisión fue ajustado para reducir falsos positivos — el modelo solo reporta problemas concretos, no sugerencias de estilo. Si Bedrock está deshabilitado o falla, el bot hace fallback a auto-aprobación después de que CI pasa — la revisión de IA nunca bloquea el flujo.
Cuando se pushean nuevos commits a un PR abierto, el bot descarta su revisión anterior (limpia el estado de «changes requested») y re-ejecuta la revisión automáticamente sobre el diff actualizado.
Las aprobaciones de una GitHub App no cuentan como revisiones de usuario real en las reglas de protección de branch (rulesets) en el plan gratuito de GitHub. Esto significa que aunque el bot apruebe un PR, la regla «Require approvals» sigue sin cumplirse.
La solución implementada es un approval_token opcional — un Personal Access Token (PAT) almacenado en Secrets Manager. Cuando está configurado, el bot envía la aprobación usando ese token en lugar de la identidad de la GitHub App, lo que cuenta como una revisión de usuario real y satisface las reglas de protección de branch.
module "approver_infra" {
source = "jonmatum/pr-auto-approver/aws"
version = "~> 1.4"
# ... otras variables ...
approval_token = var.approval_token # PAT opcional para satisfacer branch protection
}Esta limitación es específica del plan gratuito — en GitHub Enterprise, las aprobaciones de GitHub Apps sí cuentan para branch protection.
pull_requests: write, checks: read, contents: read. Suscribir a eventos pull_request y check_suite. Generar una clave privada.npm ci && npm run zip. Produce lambda.zip (~1 MB).module "approver" {
source = "jonmatum/pr-auto-approver/aws"
version = "~> 1.4"
github_app_id = "123456"
github_app_private_key = file("private-key.pem")
github_webhook_secret = var.webhook_secret
allowed_authors = "bot-username,your-username"
lambda_zip_path = "./lambda.zip"
# Opcional: revisión de código con IA
bedrock_enabled = true
# Opcional: aprobaciones que cuentan para branch protection
approval_token = var.approval_token
# Opcional: monitoreo
monitoring_enabled = true
alert_email = "you@example.com"
}webhook_url y pegarlo en la configuración de la GitHub App.Para el modo PAT: crear un PAT clásico (scope repo) desde una segunda cuenta de GitHub, agregar esa cuenta como colaborador con acceso de escritura.
En equipos con agentes de IA que generan PRs automáticamente — como el content agent de esta base de conocimiento — el cuello de botella se mueve de «escribir código» a «revisar y aprobar PRs». Este bot elimina la espera manual para PRs de autores confiables que ya pasaron CI, mientras que la capa opcional de Bedrock agrega una red de seguridad de revisión de código sin intervención humana.
Plataforma de CI/CD nativa de GitHub. Workflows declarativos en YAML que automatizan build, test, deploy y cualquier tarea del ciclo de desarrollo — directamente desde el repositorio.
Herramienta de Infrastructure as Code de HashiCorp que permite definir, provisionar y gestionar infraestructura multi-cloud mediante archivos declarativos en HCL.
Servicio de cómputo serverless de AWS que ejecuta código en respuesta a eventos sin necesidad de aprovisionar ni administrar servidores, escalando automáticamente desde cero hasta miles de ejecuciones concurrentes.
Servicio managed de AWS para crear, publicar y gestionar APIs REST, HTTP y WebSocket que actúan como puerta de entrada a funciones Lambda y otros servicios backend.
Prácticas y herramientas para almacenar, distribuir y rotar credenciales, API keys y otros datos sensibles de forma segura en aplicaciones y pipelines.
Modelo de computación en la nube donde el proveedor gestiona la infraestructura automáticamente, permitiendo ejecutar código sin aprovisionar ni administrar servidores, pagando solo por el uso real.
Práctica de definir y gestionar infraestructura mediante archivos de configuración versionados en lugar de procesos manuales. Fundamento de la automatización moderna de operaciones.
Continuous Integration y Continuous Delivery/Deployment — prácticas que automatizan la integración de código, testing y entrega a producción. Fundamento de la ingeniería de software moderna.