Automatización de disparos de pruebas QA mediante comandos y menús interactivos en Slack.
Este proyecto es un bot de Slack construido con Python (Flask + Slack Bolt SDK) que permite a cualquier miembro del equipo ejecutar suites de pruebas automatizadas en diferentes repositorios sin salir de Slack.
- Selector de Proyectos: Menú dinámico que lista los repositorios de QA configurados.
- Selección de Suite: Carga dinámicamente las suites disponibles para cada proyecto.
- Gestión de Ramas: Capacidad de disparar workflows en ramas específicas (develop, main, feature branch).
- Notificaciones en Tiempo Real: Informa en un canal centralizado quién lanzó qué pruebas para evitar duplicidad de ejecuciones.
- Vercel Ready: Configurado para desplegarse fácilmente en Vercel como un API serverless.
- Backend: Python 3.12 + Flask.
- Integración Slack: Slack Bolt SDK (Modo Socket para local, HTTP para Vercel).
- Integración GitHub: API de GitHub Actions (Workflow Dispatch).
- Infraestructura: Despliegue en Vercel.
.
├── api/
│ ├── services/ # Lógica de integración con GitHub
│ ├── utils/ # Generación de bloques de UI de Slack
│ ├── bot.py # Inicialización de la App Slack
│ ├── config.py # Configuración de repos, suites y canales
│ ├── handlers.py # Manejadores de eventos, comandos y acciones
│ └── index.py # Punto de entrada Flask y recepción de reportes
├── requirements.txt # Dependencias de Python
└── vercel.json # Configuración para despliegue serverless
Para que el bot funcione, debes crear una Slack App en Slack API.
- Crea una nueva App "From scratch".
- Dale un nombre (ej.
Lanzador QA) y selecciona el Workspace.
En OAuth & Permissions, agrega los siguientes Bot Token Scopes:
chat:write: Para que el bot pueda enviar mensajes.commands: Para habilitar el comando/qa_run_tests.im:write: Para responder por mensajes directos.
- Activa Interactivity.
- Request URL: Poner la URL de tu servidor +
/api/slack/events(ej:https://tu-url.vercel.app/api/slack/events).
- Activa Events.
- Request URL: La misma URL que en el paso anterior.
- Suscríbete a eventos de bot:
app_home_opened: Para mostrar la interfaz en la pestaña Home.app_mention: Para responder cuando mencionen al bot.message.im: Para responder en chats privados.
Crea un comando llamado /qa_run_tests apuntando a la misma URL de eventos.
Crea un archivo .env o configúralas en Vercel:
| Variable | Descripción |
|---|---|
SLACK_BOT_TOKEN |
Token xoxb-... obtenido en OAuth & Permissions. |
SLACK_SIGNING_SECRET |
Secret obtenido en Basic Information. |
GITHUB_PAT |
Personal Access Token de GitHub con permisos de workflow. |
SLACK_REPORT_CHANNEL |
ID del canal de Slack donde se enviarán todos los reportes de ejecución. |
Edita api/config.py para añadir nuevos repositorios:
"nombre-repo-github": {
"nombre_visible": "Nombre en Slack",
"workflow_name": "archivo_workflow.yml",
"default_branch": "main",
"workflow_input_key": "suite", # Nombre del input en el .yml
"suites": ["All", "Smoke", "Regression"]
}Para que el bot informe los resultados de los tests de vuelta a Slack, añade este paso al final de tu archivo .yml de GitHub Actions:
- name: Reportar al Slack Bot
if: always()
run: |
curl -X POST https://tu-url-del-bot.vercel.app/api/report \
-H "Content-Type: application/json" \
-d '{
"repo": "${{ github.event.repository.name }}",
"suite": "${{ github.event.inputs.suite || github.event.inputs.pipeline || 'Auto' }}",
"status": "${{ job.status }}",
"run_url": "${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }}"
}'Tip
Seguridad: No es necesario enviar el channel_id en el JSON si ya lo configuraste en las variables de entorno del bot (SLACK_REPORT_CHANNEL). Esto mantiene tus archivos .yml limpios y seguros.
# 1. Instalar dependencias
pip install -r requirements.txt
# 2. Configurar variables de entorno
export SLACK_BOT_TOKEN=...
export SLACK_SIGNING_SECRET=...
export GITHUB_PAT=...
# 3. Correr la app
python api/index.pyTip
En local, la app intentará usar Socket Mode si detecta SLACK_APP_TOKEN. Si no, funcionará por HTTP normal.
- Flypass QA Team