PR Reviewer Manager (Group)
Azure DevOps extension que gestiona automáticamente grupos revisores obligatorios en Pull Requests basándose en análisis de criticidad de cambios de infraestructura.
Overview
Esta extensión de Azure DevOps agrega una task inteligente para administrar automáticamente los grupos revisores requeridos en Pull Requests, en función del resultado de validaciones (por ejemplo, un análisis de criticidad). Lee un archivo de resultados (markdown) que contiene un veredicto y, con base en ello, agrega o remueve un grupo revisor requerido del PR actual usando la API oficial de Azure DevOps.
Características
- Reemplazo directo del script bash: funciona exactamente igual que el script original
- Mismo comportamiento: usa las mismas variables de entorno y lógica
- Detección automática de ramas: identifica ramas base/main y destino (master/main)
- Formato idéntico: genera el mismo formato de salida que el script bash
- Integración nativa con Azure DevOps: funciona como task de Azure Pipelines
- Manejo robusto de errores y logs para facilitar el troubleshooting
Instalación
- Instala la extensión desde el Marketplace de Azure DevOps.
- Obtén el GUID del grupo revisor requerido en tu organización.
- Asegura que el token (PAT o System.AccessToken) tenga permisos para modificar PRs.
Uso básico en pipeline
- task: pr-reviewer-manager@1
displayName: 'Administrar revisores de PR según validación'
inputs:
token: $(PAT_AZDO) # o $(System.AccessToken)
remoteUrl: $(REMOTE_URL) # https://Org@dev.azure.com/Org/Project/_git/Repo
requiredGroupId: $(REQUIRED_GROUP_ID) # GUID del grupo (identityId)
resultFile: /tmp/iac_validation_result.md
Parámetros
Parámetro |
Descripción |
Requerido |
Default |
token |
Personal Access Token o System.AccessToken |
Sí |
- |
remoteUrl |
URL del repositorio |
Sí |
- |
requiredGroupId |
GUID del grupo revisor requerido |
Sí |
- |
resultFile |
Ruta al archivo de resultado de validación |
No |
/tmp/iac_validation_result.md |
El archivo debe contener una línea con el veredicto:
# Análisis de Criticidad
...
Bloquear: SI
o
# Análisis de Criticidad
...
Bloquear: NO
Comportamiento:
Bloquear: SI
→ agrega el grupo como revisor requerido
Bloquear: NO
→ remueve el grupo revisor (si existe)
Ejemplo completo
stages:
- stage: ValidateInfrastructure
jobs:
- job: RunValidation
steps:
# Análisis de criticidad (genera el archivo de resultado)
- script: |
# Tu lógica de validación aquí
echo "Bloquear: SI" > /tmp/iac_validation_result.md
displayName: 'Analizar criticidad del cambio'
# Administrar revisores automáticamente
- task: pr-reviewer-manager@1
displayName: 'Aplicar política de revisores'
inputs:
token: '$(System.AccessToken)'
remoteUrl: '$(Build.Repository.Uri)'
requiredGroupId: 'aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee'
resultFile: '/tmp/iac_validation_result.md'
Requisitos
- Azure DevOps Services o Azure DevOps Server 2019+
- Token válido (PAT o System.AccessToken) con permisos para contribuir a PRs
- Contexto de Pull Request (ejecutar dentro de una validación de PR)
Desarrollo
Estructura del proyecto
├── src/
│ ├── index.ts # Código fuente principal
│ ├── task.json # Definición de la task
│ └── scripts/ # Scripts auxiliares
├── dist/ # Código compilado
├── images/ # Iconos y recursos
├── vss-extension.json # Manifiesto de la extensión
└── package.json # Dependencias y scripts
Comandos de desarrollo
# Instalar dependencias
npm install
# Compilar TypeScript
npm run build
# Ejecutar tests
npm test
# Empaquetar extensión
npm run package
# Publicar al marketplace
npm run publish
Configuración de la Task
Task para Azure Pipelines que:
- Lee un archivo (ej.
/tmp/iac_validation_result.md
)
- Normaliza el contenido
- Busca
Bloquear: SI
o Bloquear: NO
- Agrega o elimina un grupo revisor requerido en el PR actual
Uso en pipeline
- task: pr-reviewer-manager@1
displayName: Agregar/Remover grupo revisor según resultado
inputs:
token: $(PAT_AZDO) # o $(System.AccessToken)
remoteUrl: $(REMOTE_URL) # https://Org@dev.azure.com/Org/Project/_git/Repo
requiredGroupId: $(REQUIRED_GROUP_ID) # GUID del grupo (identityId)
resultFile: /tmp/iac_validation_result.md
Parámetros
Parámetro |
Descripción |
Requerido |
Default |
token |
Personal Access Token o System.AccessToken |
Sí |
- |
remoteUrl |
URL del repositorio |
Sí |
- |
requiredGroupId |
GUID del grupo revisor requerido |
Sí |
- |
resultFile |
Ruta al archivo de resultado de validación |
No |
/tmp/iac_validation_result.md |
Lógica de funcionamiento
- Lee el archivo de resultado especificado
- Normaliza el contenido (elimina BOM, convierte CRLF)
- Busca patrones:
Bloquear: SI
o Bloquear: NO
- Extrae información del PR desde
remoteUrl
- Llama a Azure DevOps REST API para:
Bloquear: SI
: Agregar grupo como revisor requerido
Bloquear: NO
: Remover grupo revisor
Requisitos técnicos
- Node.js 16+
- TypeScript 4.5+
- Azure DevOps Services o Server 2019+
- Permisos de "Contribute to pull requests" en el token
Pipeline de CI/CD
La extensión incluye un pipeline de Azure DevOps (azure-pipelines.yml
) que:
- Build: Compila TypeScript y empaqueta la extensión
- Approval: Requiere aprobación manual para publicación
- Deploy: Publica al marketplace usando
tfx-cli
- Tag: Crea tag de versión en Git
Troubleshooting
Errores comunes
- 401 Unauthorized: Token expirado o incorrecto
- 403 Forbidden: Permisos insuficientes en el token
- 404 Not Found: PR no encontrado o URL incorrecta
- Extension not found: ID de extensión incorrecto en marketplace
Logs
La task genera logs detallados para debugging, revisar la salida de la pipeline para identificar problemas.