Jonatan Matajonmatum.com
conceptosnotasexperimentosensayos
© 2026 Jonatan Mata. All rights reserved.v2.1.1
Experimentos

PR Auto-Approver

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.

evergreen#github-app#probot#terraform#lambda#api-gateway#secrets-manager#bedrock#code-review#automation#ci-cd#typescript

¿Qué es?

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:

RepositorioVersiónRol
pr-auto-approverv1.0.0App TypeScript/Probot — lógica de negocio (esbuild → ~1 MB)
terraform-aws-pr-auto-approverv1.4.0Módulo Terraform AWS — Lambda, API Gateway, Secrets Manager, SQS DLQ (Registry)
pr-auto-approver-infralatestDespliegue 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-approverv1.0.0Módulo Terraform GitHub — webhooks por repositorio (opcional, la GitHub App los configura automáticamente)

Arquitectura

Loading diagram...

Demo en producción

PR auto-aprobado por el bot después de que CI pasa

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.

¿Cómo funciona?

El flujo completo desde que se abre un PR hasta la aprobación:

  1. Se abre un PR, se completa un check suite, o se pushean nuevos commits → GitHub envía un webhook
  2. API Gateway HTTP recibe el POST y lo enruta a Lambda
  3. Lambda (Probot) valida la firma HMAC del webhook usando el secreto de Secrets Manager
  4. Verifica que el autor del PR esté en la lista de autores permitidos
  5. Espera a que todos los check suites completen exitosamente
  6. Si Bedrock está habilitado: envía el diff al modelo para revisión de código
  7. Si la revisión no encuentra problemas → aprueba el PR (vía PAT si está configurado, o como GitHub App)
  8. Si encuentra problemas → publica comentarios de revisión y solicita cambios

Seguridad

La gestión de secretos sigue el principio de mínimo privilegio:

  • La clave privada de la GitHub App, el webhook secret y el token de aprobación opcional se almacenan en AWS Secrets Manager
  • Lambda recibe los ARNs de Secrets Manager como variables de entorno — los valores crudos nunca se exponen
  • En cold start, Lambda lee los secretos y los cachea en memoria para invocaciones subsecuentes
  • Si se configura un 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ías
  • El rol IAM tiene permisos de secretsmanager:GetSecretValue solo para los ARNs específicos
  • Permisos de Bedrock (bedrock:InvokeModel) se agregan solo cuando bedrock_enabled = true
  • API Gateway con throttling (burst: 10, rate: 5 req/s) para limitar abuso

Módulo AWS — recursos creados

El módulo terraform-aws-pr-auto-approver v1.4.0 crea:

RecursoConfiguración
LambdaNode.js 20, 128 MB / 30s (sin Bedrock), 256 MB / 120s (con Bedrock)
API Gateway v2HTTP API con ruta POST
Secrets Manager2-3 secretos (private key + webhook secret + approval token opcional)
SQS Dead Letter QueueRetención 14 días, alarma cuando hay mensajes (webhooks fallidos)
IAM RoleLeast-privilege, Bedrock condicional
CloudWatch Logs14 días de retención
CloudWatch DashboardMétricas Lambda, API GW, Bedrock (opcional)
CloudWatch AlarmsErrores, throttles, duración alta, 5xx, DLQ
SNS TopicAlertas por email (opcional)
AWS BudgetPresupuesto mensual Bedrock (opcional)

Módulo GitHub — webhooks (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.

Revisión de código con Bedrock

Bot solicitando cambios después de encontrar vulnerabilidades en el código

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:

  • Bugs y errores de lógica
  • Vulnerabilidades de seguridad
  • Problemas de rendimiento
  • Manejo de errores faltante

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.

Limitación: aprobaciones de GitHub Apps y branch protection

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.

Cómo implementarlo

  1. Crear la GitHub App — permisos: pull_requests: write, checks: read, contents: read. Suscribir a eventos pull_request y check_suite. Generar una clave privada.
  2. Construir el zip de Lambda — clonar pr-auto-approver, ejecutar npm ci && npm run zip. Produce lambda.zip (~1 MB).
  3. Desplegar con Terraform — usar el módulo desde el Terraform Registry:
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"
}
  1. Configurar el webhook URL — copiar el output webhook_url y pegarlo en la configuración de la GitHub App.
  2. Instalar la App — instalar en los repositorios donde se quiere auto-aprobación.

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.

¿Por qué importa?

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.

Referencias

  • GitHub Apps documentation — GitHub, 2026. Documentación oficial para crear GitHub Apps con permisos granulares.
  • Probot framework — GitHub, 2026. Framework para construir GitHub Apps con Node.js.
  • AWS Secrets Manager — AWS, 2026. Servicio para gestionar secretos con rotación automática.
  • Amazon API Gateway HTTP APIs — AWS, 2026. APIs HTTP de baja latencia y bajo costo.
  • Amazon Bedrock — AWS, 2026. Servicio gestionado para acceder a modelos fundacionales.
  • GitHub branch protection rules — GitHub, 2026. Documentación sobre rulesets y protección de branches.
  • terraform-aws-pr-auto-approver — Terraform Registry, 2026. Módulo publicado con documentación de inputs, outputs y ejemplos.

Contenido relacionado

  • GitHub Actions

    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.

  • Terraform

    Herramienta de Infrastructure as Code de HashiCorp que permite definir, provisionar y gestionar infraestructura multi-cloud mediante archivos declarativos en HCL.

  • AWS Lambda

    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.

  • AWS API Gateway

    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.

  • Gestión de Secretos

    Prácticas y herramientas para almacenar, distribuir y rotar credenciales, API keys y otros datos sensibles de forma segura en aplicaciones y pipelines.

  • Serverless

    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.

  • Infrastructure as Code

    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.

  • CI/CD

    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.

Experimentos