Discourse GitHub

:discourse2: Zusammenfassung Discourse GitHub Ermöglicht es Admins, Benutzern Abzeichen (Badges) basierend auf ihren GitHub-Beiträgen zuzuweisen. Zudem können Benutzer Github-Linkbacks und Permalinks erstellen sowie den Live-PR-Status in Oneboxes anzeigen.
:open_book: Installationsanleitung Dieses Plugin ist im Discourse-Kern enthalten. Eine separate Installation des Plugins ist nicht erforderlich.

Funktionen

GitHub-Abzeichen (Badges)

Weise deinen Benutzern Abzeichen basierend auf ihren GitHub-Beiträgen zu.

Verwendung:
  1. Aktiviere github badges enabled in Einstellungen > Plugins.
  2. Erstelle ein GitHub-Zugriffstoken und füge es in die Einstellung github linkback access token ein. Siehe unten für Anweisungen.
  3. Füge eine oder mehrere URLs der GitHub-Repositories hinzu, die nach Beiträgen durchsucht werden sollen, zur Site-Einstellung github badges repos hinzu.
Funktionsweise der Abzeichen-Zählung:

Abzeichen zählen Commits über alle Repositories hinweg. Wenn ein Benutzer zu mehreren Repos beiträgt, werden alle seine Commits zu einer Gesamtsumme addiert.

Committer-Abzeichen:

Abzeichen Erforderliche Commits
Bronze 1 Commit
Silber 25 Commits
Gold 1000 Commits

Abzeichen-Progression: Wenn Benutzer mehr Beiträge in den verfolgten Repositories sammeln, steigen sie automatisch in höhere Abzeichen-Stufen auf. Wenn ein Benutzer beispielsweise zu Repo A und dann zu Repo B committet, zählen beide Beiträge zu ihrem Gesamtwert, sodass er/sie von Bronze zu Silber zu Gold aufsteigen kann.


GitHub-Linkback

Erstelle einen Link von einem GitHub-Pull-Request oder Commit zurück zu einem Discourse-Beitrag, in dem er erwähnt wird.

Verwendung:
  1. Aktiviere github linkback enabled in Einstellungen > Plugins.
  2. Erstelle ein GitHub-Zugriffstoken und füge es in die Einstellung github linkback access token ein. Siehe unten für Anweisungen.
  3. Füge schließlich die Projekte hinzu, zu denen du posten möchtest, in der Site-Einstellung github linkback projects im folgenden Format:
    • benutzername/repository für bestimmte Repositories
    • benutzername/* für alle Repositories eines bestimmten Benutzers

GitHub-Permalink

Ersetze GitHub-Links ohne Permalink durch Permalinks.

Verwendung:
  1. Aktiviere github permalinks enabled in Einstellungen > Plugins.

PR-Live-Status

Zeige Live-Statusindikatoren für GitHub-Pull-Request-Oneboxes in Beiträgen und Chat-Nachrichten an. Die Status aktualisieren sich automatisch über Webhooks, wenn sich PRs auf GitHub ändern.

Status-Typen
Status Farbe Beschreibung
Entwurf (Draft) Grau PR ist als Entwurf markiert
Offen (Open) Grau PR ist offen und wartet auf Review
Genehmigt (Approved) Grün PR wurde von Reviewern genehmigt
Änderungen angefordert (Changes Requested) Orange Reviewer haben Änderungen angefordert
Gemerged (Merged) Lila PR wurde gemerged
Geschlossen (Closed) Rot PR wurde ohne Merging geschlossen
Verwendung:
Schritt 1: Feature aktivieren

Gehe zu Admin > Einstellungen > Plugins und setze github pr status enabled auf true.

Schritt 2: GitHub-Zugriffstokens konfigurieren

Um PR-Status abzurufen (insbesondere für private Repositories), konfiguriere GitHub-Zugriffstokens.

Einstellung: github onebox access tokens

Format:

organisationsname|ghp_dein_token_hier
standard|ghp_fallback_token_hier

Du kannst Tokens pro Organisation angeben, plus ein standard-Token, das als Fallback dient. Jede Zeile sollte org_name|token enthalten, wobei das Token ein GitHub Personal Access Token (klassisch) mit dem repo-Scope ist.

Beispiel:

discourse|ghp_xxxxxxxxxxxxxxxxxxxx
mein-unternehmen|ghp_yyyyyyyyyyyyyyyyyyyy
standard|ghp_zzzzzzzzzzzzzzzzzzzzzz
Schritt 3: GitHub-Webhooks einrichten (für Echtzeit-Updates)

Um automatische Status-Updates bei Änderungen an PRs zu erhalten, richte einen Webhook auf GitHub ein.

Webhook-Geheimnis generieren:

openssl rand -hex 32

Setze die Site-Einstellung github webhook secret auf dein generiertes Geheimnis.

Webhook auf GitHub erstellen:

Du kannst den Webhook auf Organisationsebene (um alle Repos abzudecken) oder pro Repository erstellen.

Für eine Organisation:

  1. Gehe zu den Einstellungen deiner Organisation
  2. Navigiere zu Webhooks (unter Code, Planung und Automatisierung)
  3. Klicke auf Webhook hinzufügen

Für ein Repository:

  1. Gehe zu den Einstellungen deines Repositories
  2. Navigiere zu Webhooks
  3. Klicke auf Webhook hinzufügen

Webhook-Konfiguration:

Feld Wert
Payload-URL https://dein-discourse-site.com/discourse-github/webhooks/github
Content-Type application/json
Geheimnis Dein generiertes Webhook-Geheimnis
SSL-Verifizierung Aktivieren (empfohlen)
Ereignisse Wähle “Lass mich einzelne Ereignisse auswählen”

Wähle diese Ereignisse aus:

  • Pull Requests
  • Pull Request Reviews

Klicke auf Webhook hinzufügen, um zu speichern.

Schritt 4: Setup überprüfen
  1. Erstelle einen Testbeitrag mit einer GitHub-PR-URL
  2. Überprüfe, ob die Onebox mit einem Status-Icon angezeigt wird
  3. Ändere den PR-Status auf GitHub (z. B. genehmige ihn oder schließe ihn)
  4. Aktualisiere die Discourse-Seite nach einigen Sekunden — der Status sollte sich aktualisieren

Du kannst den Webhook-Lieferstatus in den Webhook-Einstellungen von GitHub überprüfen, um zu bestätigen, dass Ereignisse erfolgreich gesendet und empfangen werden.

Status-Priorität

Wenn ein PR mehrere Zustände hat (z. B. genehmigt, aber auch Änderungen angefordert), wird der Status anhand dieser Priorität bestimmt:

  1. Gemerged (höchste Priorität)
  2. Geschlossen
  3. Entwurf
  4. Änderungen angefordert
  5. Genehmigt
  6. Offen (Standard)
Logik des Review-Status

Das Feature ruft Review-Informationen von der GitHub-API ab, um den Genehmigungsstatus zu bestimmen:

  • Nimmt den neuesten Review von jedem Reviewer
  • Ignoriert die Review-Status “Kommentiert” und “Ausstehend”
  • Zeigt “Änderungen angefordert”, wenn ein Reviewer Änderungen angefordert hat
  • Zeigt “Genehmigt” nur an, wenn Reviews existieren und keiner Änderungen angefordert hat
Wo es funktioniert
  • Forenbeiträge — Jeder Beitrag, der eine GitHub-PR-Onebox enthält
  • Chat-Nachrichten — PR-Oneboxes im Chat zeigen ebenfalls Live-Status an

Hinweis: Inline-Oneboxes (wenn ein Link inline im Text erscheint, anstatt als vollständige Vorschau) zeigen keine Status-Icons an.

Migration von der GitHub-Status-Theme-Komponente

Dieses Feature ersetzt die Theme-Komponente GitHub Status Indicators. Die beiden sind nicht kompatibel und sollten nicht zusammen verwendet werden.

Wenn du aktuell die Theme-Komponente verwendest:

  1. Deaktiviere und entferne die Theme-Komponente github-status-theme
  2. Aktiviere dieses integrierte Feature über die Einstellung github pr status enabled

Konfiguration

GitHub-Zugriffstoken

Damit das Linkback-Feature funktioniert und die Abzeichen an deine Benutzer vergeben werden können, musst du ein GitHub-Zugriffstoken bereitstellen. Du kannst dein Token hier generieren: Sign in to GitHub · GitHub.

Das Linkback-Feature erfordert den Scope public_repo, und die Vergabe von Abzeichen erfordert keinen Scope (lasse alles unhaken, wenn du nur Abzeichen vergeben möchtest). Da der Scope public_repo Schreibzugriff auf Repositories gewährt, empfehlen wir, ein Wegwerf-GitHub-Konto zu erstellen, das keinen Zugriff auf Repositories hat, und es nur zur Generierung eines Tokens zu verwenden.

Token-Scopes nach Feature

Feature Erforderlicher Scope
Abzeichen Kein Scope erforderlich
Linkback public_repo
PR-Status (öffentliche Repos) Kein Scope erforderlich
PR-Status (private Repos) repo

Referenz der Site-Einstellungen

Einstellung Standard Beschreibung
enable discourse github plugin false Hauptschalter für das Plugin
github badges enabled false GitHub-Beitrags-Abzeichen aktivieren
github badges repos (leer) Repository-URLs, die für Abzeichen verfolgt werden sollen
github linkback enabled false Linkbacks von GitHub zu Discourse aktivieren
github linkback access token (leer) Zugriffstoken für das Linkback-Feature
github linkback projects (leer) Projekte, für die Linkbacks erstellt werden sollen
github permalinks enabled false GitHub-Links durch Permalinks ersetzen
github pr status enabled false PR-Status-Icons auf Oneboxes aktivieren
github webhook secret (leer) Geheimnis zur Verifizierung der Webhook-Signatur
github onebox access tokens (leer) Zugriffstokens für die GitHub-API (Format: org|token)

Technische Details

PR-Status-API-Nutzung

Wenn eine GitHub-PR-Onebox generiert wird, führt Discourse bis zu zwei API-Aufrufe durch:

  1. PR-Daten: GET /repos/{owner}/{repo}/pulls/{number} — Ruft grundlegende PR-Informationen ab, einschließlich Status, Merging-Status und Entwurfsstatus
  2. Reviews: GET /repos/{owner}/{repo}/pulls/{number}/reviews — Ruft Review-Daten ab, um den Genehmigungsstatus zu bestimmen

Diese Aufrufe verwenden dein konfiguriertes Zugriffstoken, wenn verfügbar, wodurch der Zugriff auf private Repositories ermöglicht wird.

Webhook-Sicherheit

Webhook-Anfragen werden durch HMAC-SHA256-Signaturvalidierung überprüft. GitHub signiert die Webhook-Payload mit deinem Geheimnis, und Discourse überprüft diese Signatur, bevor sie verarbeitet wird. Ungültige Signaturen werden mit einer 403-Antwort abgelehnt.

Webhook-Ereignisse, die Updates auslösen

  • PR-Statusänderungen (geöffnet, geschlossen, wiedereröffnet)
  • PR gemerged
  • Entwurfsstatusänderungen (in Entwurf konvertiert, bereit für Review)
  • Pull Request Reviews eingereicht
  • Reviews bearbeitet oder verworfen

Leistungsbetrachtungen

  • Rebaking wird als Hintergrundjob mit niedriger Priorität in die Warteschlange gestellt, um die Site-Performance nicht zu beeinträchtigen
  • Nur Beiträge/Nachrichten mit vollständigen GitHub-PR-Oneboxes werden rebaked (Inline-Oneboxes werden übersprungen)
  • Chat-Nachrichten-Rebakes überspringen Benachrichtigungen, um doppelte Warnungen zu verhindern

ÄNDERUNGSLOG (CHANGELOG)

2025-12-10

  • FIX: Überspringt Benachrichtigungen beim Rebaking von Chat-Nachrichten aus GitHub-Webhooks

2025-12-09

  • FIX: Überspringt das Rebaking von Beiträgen mit Inline-GitHub-PR-Oneboxes
  • FIX: Vermeidet Zwischenzustände beim Rebaking von Beiträgen mit Oneboxes
  • FIX: Rebaked Chat-Nachrichten, wenn sich der GitHub-PR-Status ändert
  • UX: Verwendet min-height, um Layout-Shift zu verhindern, wenn sich das Status-Icon ändert
  • UX: Reduziert die Größe des GitHub-PR-Status-Icons auf Mobilgeräten

2025-12-08

  • FEATURE: Fügt den Status “Änderungen angefordert” zu GitHub-PR-Oneboxes hinzu

2025-12-04

  • FEATURE: Live-Status-Icon für GitHub-PRs

2025-11-10

  • FEATURE: Zulassungs- und Ablehnungsliste für Linkbacks

2025-11-08

  • FEATURE: Kategorie-Ignorierliste für GitHub-Linkbacks hinzugefügt

2024-12-20

  • DEV: discourse-github in den Kern verschoben (keine separate Installation mehr erforderlich)
33 „Gefällt mir“

Wie ist der Prozess für mehrere Links? Werden sie einfach zum selben Commit-Kommentar hinzugefügt? Oder wird jedes Mal ein komplett neuer Kommentar erstellt?

1 „Gefällt mir“

Ich frage mich, ob Commit- und PR-Badges vereinfacht werden könnten, da wir versuchen, Das Paradoxon der Wahl zu vermeiden :)\n\nDerzeit habe ich gerade die Commit-Badges geforkt und gelöscht, aber natürlich verliere ich mich selbst aus dem Commit-Badge (weil ich direkt committe) und Fork ist nicht gleichbedeutend damit, immer beim Kern zu bleiben.

Der Platzhalter * hat für mich bei einer GitHub-Organisation nicht funktioniert. Ich musste jeden Repo einzeln eintragen. Hatten andere damit Probleme mit einer Organisation im Gegensatz zu einem Benutzer?

Wie lege ich die Sprache für Linkback-Kommentare fest?

Vielen Dank, ich mag dieses Plugin wirklich! Ich war verwirrt über das Abzeichensystem und war froh, die Erklärung in einem anderen Thema zu finden: Github Badges are not working. Its hard to see if I do something wrong or if the plugin is not working - #4 by simon

Die Antwort besagt jedoch, dass

Das Plugin erstellt 6 Abzeichen:

Ich sehe keines dieser Abzeichen, bin mir nicht sicher, was passiert ist? Gibt es eine Möglichkeit, die Erstellung dieser Abzeichen (neu) auszulösen?

1 „Gefällt mir“

Um meine eigene Frage zu beantworten: Nach ein paar Stunden lief die geplante Aufgabe und die Abzeichen wurden erstellt.

Der manuelle Weg wäre anscheinend, den Sidekiq-Job auszulösen.

1 „Gefällt mir“

Feature-Anfrage: Kategorien und/oder Tags vom Linkback ausschließen

Wir haben eine Kategorie Ankündigungen, in die das RSS-Plugin automatisch neue GitHub-Releases zieht. Wenn die Versionshinweise auf Issues verlinken, erscheint dieser Link ebenfalls in Discourse und es wird ein Linkback erstellt, der jedoch für niemanden nützlich ist und für Unordnung auf GitHub sorgt.

Ich möchte in der Lage sein, bestimmte Beiträge auszuschließen, z.B. Kategorien oder Tags oder sogar nur Beiträge von dem Benutzer, der im RSS-Plugin konfiguriert ist, von der Erstellung von Linkbacks.

:partying_face: Dieses Plugin ist jetzt Teil des Discourse-Kerns im Rahmen von Bundling more popular plugins with Discourse core. Wenn Sie selbst hosten und das Plugin verwenden, müssen Sie es vor dem nächsten Upgrade aus Ihrer app.yml entfernen.

1 „Gefällt mir“