Discourse GitHub

:discourse2: Resumen Discourse GitHub Permite al personal asignar insignias a los usuarios en función de sus contribuciones en GitHub. También permite a los usuarios crear Linkbacks de GitHub, Enlaces permanentes y mostrar el estado en vivo de las PR en los oneboxes.
:open_book: Guía de instalación Este plugin está integrado en el núcleo de Discourse. No es necesario instalar el plugin por separado.

Funcionalidades

Insignias de GitHub

Asigna insignias a tus usuarios en función de sus contribuciones en GitHub.

Cómo usarlo:
  1. Habilita github badges enabled en Configuración → Plugins.
  2. Genera un token de acceso de GitHub y pégalo en la configuración github linkback access token. Consulta las instrucciones a continuación.
  3. Añade una o más URL de los repositorios de GitHub que se escanearán en busca de contribuciones a la configuración del sitio github badges repos.
Cómo funciona el conteo de insignias:

Las insignias cuentan los commits en todos los repositorios y, cuando un usuario contribuye a varios repos, todos sus commits se suman en un total único.

Insignias de Committer:

Insignia Commits requeridos
Bronce 1 commit
Plata 25 commits
Oro 1000 commits

Progresión de insignias: A medida que los usuarios acumulan más contribuciones en cualquiera de los repositorios rastreados, avanzan automáticamente por los niveles de insignias. Por ejemplo, si un usuario hace un commit en el Repo A y luego en el Repo B, ambas contribuciones cuentan hacia su total, permitiéndole progresar de Bronce a Plata a Oro.


Linkback de GitHub

Crea un enlace desde un pull request o commit de GitHub de vuelta a una publicación de Discourse donde se menciona.

Cómo usarlo:
  1. Habilita github linkback enabled en Configuración → Plugins.
  2. Genera un token de acceso de GitHub y pégalo en la configuración github linkback access token. Consulta las instrucciones a continuación.
  3. Finalmente, añade los proyectos a los que deseas publicar en la configuración del sitio github linkback projects en los siguientes formatos:
    • usuario/repositorio para repositorios específicos
    • usuario/* para todos los repositorios de un usuario determinado

Enlace permanente de GitHub

Reemplaza los enlaces no permanentes de GitHub con enlaces permanentes.

Cómo usarlo:
  1. Habilita github permalinks enabled en Configuración → Plugins.

Estado en vivo de PR

Muestra indicadores de estado en vivo en los oneboxes de pull requests de GitHub en publicaciones y mensajes de chat. El estado se actualiza automáticamente mediante webhooks cuando las PR cambian en GitHub.

Tipos de estado
Estado Color Descripción
Borrador Gris La PR está marcada como borrador
Abierto Gris La PR está abierta y esperando revisión
Aprobado Verde La PR ha sido aprobada por los revisores
Cambios solicitados Naranja Los revisores han solicitado cambios
Fusionado Púrpura La PR ha sido fusionada
Cerrado Rojo La PR fue cerrada sin fusionar
Cómo usarlo:
Paso 1: Habilitar la funcionalidad

Ve a Admin > Configuración > Plugins y establece github pr status enabled en true.

Paso 2: Configurar tokens de acceso de GitHub

Para obtener el estado de la PR (especialmente para repositorios privados), configura los tokens de acceso de GitHub.

Configuración: github onebox access tokens

Formato:

nombre_organización|ghp_tu_token_aquí
predeterminado|ghp_token_copia_de_seguridad_aquí

Puedes especificar tokens por organización, además de un token predeterminado que se usa como copia de seguridad. Cada línea debe contener nombre_org|token donde el token es un Token de Acceso Personal de GitHub (clásico) con el alcance repo.

Ejemplo:

discourse|ghp_xxxxxxxxxxxxxxxxxxxx
mi-empresa|ghp_yyyyyyyyyyyyyyyyyyyy
predeterminado|ghp_zzzzzzzzzzzzzzzzzzzzzz
Paso 3: Configurar webhooks de GitHub (para actualizaciones en tiempo real)

Para obtener actualizaciones automáticas de estado cuando cambian las PR, configura un webhook en GitHub.

Generar un secreto de webhook:

openssl rand -hex 32

Establece la configuración del sitio github webhook secret con tu secreto generado.

Crear el webhook en GitHub:

Puedes crear el webhook a nivel de organización (para cubrir todos los repos) o por repositorio.

Para una organización:

  1. Ve a la Configuración de tu organización
  2. Navega a Webhooks (bajo Código, planificación y automatización)
  3. Haz clic en Agregar webhook

Para un repositorio:

  1. Ve a la Configuración de tu repositorio
  2. Navega a Webhooks
  3. Haz clic en Agregar webhook

Configuración del webhook:

Campo Valor
URL de carga útil https://tu-sitio-de-discourse.com/discourse-github/webhooks/github
Tipo de contenido application/json
Secreto Tu secreto de webhook generado
Verificación SSL Habilitar (recomendado)
Eventos Selecciona “Permíteme seleccionar eventos individuales”

Selecciona estos eventos:

  • Pull requests
  • Revisiones de pull request

Haz clic en Agregar webhook para guardar.

Paso 4: Verificar la configuración
  1. Crea una publicación de prueba con una URL de PR de GitHub
  2. Verifica que el onebox se muestre con un icono de estado
  3. Cambia el estado de la PR en GitHub (por ejemplo, apruébala o ciérrala)
  4. Dentro de unos segundos, actualiza la página de Discourse; el estado debería actualizarse

Puedes verificar el estado de entrega del webhook en la configuración de webhooks de GitHub para confirmar que los eventos se están enviando y recibiendo correctamente.

Prioridad de estado

Cuando una PR tiene múltiples estados (por ejemplo, aprobada pero también con cambios solicitados), el estado se determina mediante esta prioridad:

  1. Fusionado (mayor prioridad)
  2. Cerrado
  3. Borrador
  4. Cambios solicitados
  5. Aprobado
  6. Abierto (predeterminado)
Lógica del estado de revisión

La funcionalidad obtiene información de revisión de la API de GitHub para determinar el estado de aprobación:

  • Toma la última revisión de cada revisor
  • Ignora los estados de revisión “comentado” y “pendiente”
  • Muestra “cambios solicitados” si algún revisor ha solicitado cambios
  • Muestra “aprobado” solo si existen revisiones y ninguna solicita cambios
Dónde funciona
  • Publicaciones del foro — Cualquier publicación que contenga un onebox de PR de GitHub
  • Mensajes de chat — Los oneboxes de PR en el chat también muestran el estado en vivo

Nota: Los oneboxes en línea (cuando un enlace aparece en línea en el texto en lugar de como una vista previa completa) no muestran iconos de estado.

Migración desde el componente de tema GitHub Status

Esta funcionalidad reemplaza el componente de tema GitHub Status Indicators. Los dos no son compatibles y no deben usarse juntos.

Si estás utilizando actualmente el componente de tema:

  1. Deshabilita y elimina el componente de tema github-status-theme
  2. Habilita esta funcionalidad integrada a través de la configuración github pr status enabled

Configuración

Token de acceso de GitHub

Para que la funcionalidad de linkback funcione y se otorguen las insignias a tus usuarios, necesitas proporcionar un token de acceso de GitHub. Puedes generar tu token aquí: Sign in to GitHub · GitHub.

La funcionalidad de linkback requiere el alcance public_repo, y otorgar insignias no requiere ningún alcance (deja todo desmarcado si solo quieres insignias). Dado que el alcance public_repo otorga acceso de escritura a los repositorios, te recomendamos crear una cuenta de GitHub desechable que no tenga acceso a ningún repositorio y usarla solo para generar un token.

Alcances de token por funcionalidad

Funcionalidad Alcance requerido
Insignias No se requiere ningún alcance
Linkback public_repo
Estado de PR (repos públicos) No se requiere ningún alcance
Estado de PR (repos privados) repo

Referencia de configuraciones del sitio

Configuración Predeterminado Descripción
enable discourse github plugin false Interruptor principal del plugin
github badges enabled false Habilitar insignias de contribución de GitHub
github badges repos (vacío) URL de repositorios para rastrear insignias
github linkback enabled false Habilitar linkbacks de GitHub a Discourse
github linkback access token (vacío) Token de acceso para la funcionalidad de linkback
github linkback projects (vacío) Proyectos para crear linkbacks
github permalinks enabled false Reemplazar enlaces de GitHub con enlaces permanentes
github pr status enabled false Habilitar iconos de estado de PR en oneboxes
github webhook secret (vacío) Secreto para verificación de firma de webhook
github onebox access tokens (vacío) Tokens de acceso para la API de GitHub (formato: org|token)

Detalles técnicos

Uso de la API de estado de PR

Cuando se genera un onebox de PR de GitHub, Discourse realiza hasta dos llamadas a la API:

  1. Datos de PR: GET /repos/{owner}/{repo}/pulls/{number} — Obtiene información básica de la PR, incluido el estado, el estado de fusión y el estado de borrador
  2. Revisiones: GET /repos/{owner}/{repo}/pulls/{number}/reviews — Obtiene datos de revisión para determinar el estado de aprobación

Estas llamadas utilizan tu token de acceso configurado si está disponible, permitiendo el acceso a repositorios privados.

Seguridad de webhooks

Las solicitudes de webhook se verifican mediante validación de firma HMAC-SHA256. GitHub firma la carga útil del webhook con tu secreto, y Discourse verifica esta firma antes de procesarla. Las firmas no válidas se rechazan con una respuesta 403.

Eventos de webhook que desencadenan actualizaciones

  • Cambios en el estado de la PR (abierto, cerrado, reabierto)
  • PR fusionada
  • Cambios en el estado de borrador (convertido a borrador, listo para revisión)
  • Revisiones de pull request enviadas
  • Revisiones editadas o descartadas

Consideraciones de rendimiento

  • El rebake se pone en cola como un trabajo en segundo plano de baja prioridad para evitar afectar el rendimiento del sitio
  • Solo se rebakean las publicaciones/mensajes con oneboxes completos de PR de GitHub (se omiten los oneboxes en línea)
  • Los rebakes de mensajes de chat omiten notificaciones para evitar alertas duplicadas

REGISTRO DE CAMBIOS

2025-12-10

  • CORRECCIÓN: Omitir notificaciones al rebakear mensajes de chat desde webhooks de GitHub

2025-12-09

  • CORRECCIÓN: Omitir rebakear publicaciones con oneboxes de PR de GitHub en línea
  • CORRECCIÓN: Evitar estado intermedio al rebakear publicaciones con oneboxes
  • CORRECCIÓN: Rebakear mensajes de chat cuando cambia el estado de PR de GitHub
  • UX: Usar altura mínima para evitar cambios de diseño cuando cambia el icono de estado
  • UX: Reducir el tamaño del icono de estado de PR de GitHub en móviles

2025-12-08

  • FUNCIONALIDAD: Añadir estado “cambios solicitados” a los oneboxes de PR de GitHub

2025-12-04

  • FUNCIONALIDAD: Icono de estado en vivo de PR de GitHub

2025-11-10

  • FUNCIONALIDAD: Permitir y denegar listas para linkbacks

2025-11-08

  • FUNCIONALIDAD: Añadir lista de exclusión de categorías para linkbacks de GitHub

2024-12-20

  • DESARROLLO: Mover discourse-github al núcleo (ya no requiere instalación separada)
33 Me gusta

¿Cuál es el proceso para varios enlaces? ¿Simplemente los agrega al mismo comentario de confirmación? ¿O crea un comentario completamente nuevo cada vez?

1 me gusta

Me pregunto si las insignias de commits y PRs podrían simplificarse porque estamos tratando de alejarnos de la paradoja de la elección :)\n\nActualmente acabo de bifurcar y eliminar las insignias de commit, pero por supuesto, me pierdo la insignia de commit (porque estoy haciendo commit directamente) y la bifurcación no es igual a mantenerme siempre con el núcleo.

El comodín * no me funcionó para una organización de GitHub, terminé poniendo cada repositorio individualmente. ¿Alguien más ha tenido problemas con esto en una organización en comparación con un usuario?

¿Cómo configurar el idioma del comentario de enlace?

¡Gracias, me encanta este plugin! Estaba confundido acerca del sistema de insignias y me alegré de encontrar la explicación en un tema diferente: Github Badges are not working. Its hard to see if I do something wrong or if the plugin is not working - #4 by simon

Sin embargo, esa respuesta señala que

El plugin crea 6 insignias:

No veo ninguna de estas insignias, ¿no estoy seguro de qué pasó? ¿Hay alguna forma de (re)activar la creación de estas insignias?

1 me gusta

Para responder a mi propia pregunta, después de unas horas se ejecutó la tarea programada y fue entonces cuando se crearon las insignias.

La forma manual de hacerlo sería activar el trabajo de sidekiq, al parecer.

1 me gusta

Solicitud de función: excluir categorías y/o etiquetas de las retroenlaces

Tenemos una categoría llamada Anuncios en la que el plugin RSS automáticamente extrae nuevos lanzamientos de GitHub. Cuando las notas de lanzamiento enlazan a problemas, ese enlace también aparece en Discourse y se crea un retroenlace, pero uno que no es útil para nadie, creando clutter en Github.

Me gustaría poder excluir ciertas publicaciones, es decir, categorías o etiquetas o incluso solo publicaciones del usuario que está configurado en el plugin RSS, de la creación de retroenlaces.

:partying_face: Este plugin ahora está incluido en el núcleo de Discourse como parte de Bundling more popular plugins with Discourse core. Si te autoalojas y usas el plugin, necesitas eliminarlo de tu app.yml antes de tu próxima actualización.

1 me gusta