| 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. | |
| 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:
- Aktiviere
github badges enabledin Einstellungen > Plugins. - Erstelle ein GitHub-Zugriffstoken und füge es in die Einstellung
github linkback access tokenein. Siehe unten für Anweisungen. - Füge eine oder mehrere URLs der GitHub-Repositories hinzu, die nach Beiträgen durchsucht werden sollen, zur Site-Einstellung
github badges reposhinzu.
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:
- Aktiviere
github linkback enabledin Einstellungen > Plugins. - Erstelle ein GitHub-Zugriffstoken und füge es in die Einstellung
github linkback access tokenein. Siehe unten für Anweisungen. - Füge schließlich die Projekte hinzu, zu denen du posten möchtest, in der Site-Einstellung
github linkback projectsim folgenden Format:benutzername/repositoryfür bestimmte Repositoriesbenutzername/*für alle Repositories eines bestimmten Benutzers
GitHub-Permalink
Ersetze GitHub-Links ohne Permalink durch Permalinks.
Verwendung:
- Aktiviere
github permalinks enabledin 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:
- Gehe zu den Einstellungen deiner Organisation
- Navigiere zu Webhooks (unter Code, Planung und Automatisierung)
- Klicke auf Webhook hinzufügen
Für ein Repository:
- Gehe zu den Einstellungen deines Repositories
- Navigiere zu Webhooks
- 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
- Erstelle einen Testbeitrag mit einer GitHub-PR-URL
- Überprüfe, ob die Onebox mit einem Status-Icon angezeigt wird
- Ändere den PR-Status auf GitHub (z. B. genehmige ihn oder schließe ihn)
- 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:
- Gemerged (höchste Priorität)
- Geschlossen
- Entwurf
- Änderungen angefordert
- Genehmigt
- 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:
- Deaktiviere und entferne die Theme-Komponente
github-status-theme - 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:
- PR-Daten:
GET /repos/{owner}/{repo}/pulls/{number}— Ruft grundlegende PR-Informationen ab, einschließlich Status, Merging-Status und Entwurfsstatus - 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)
