GitHub Apps ist eine neue Form der Anwendung, die mit GitHub funktioniert. Dieses Format ist ein Anwendungsmarktplatz [angekündigt mit der Veröffentlichung des GitHub-Marktplatzes](https://github.com/blog/2359-introducing-github-marketplace-and-more-tools-to-customize- Ihr Workflow). Mit anderen Worten, das Ökosystem, GitHub-Apps zu erstellen, auf dem Markt zu veröffentlichen und damit Geld zu verdienen, ist fest etabliert.
In diesem Artikel werde ich vorstellen, wie man GitHub-Apps erstellt, die solche Träume verbreiten.
Organisieren Sie zunächst die Formate von Anwendungen, die mit GitHub funktionieren, einschließlich GitHub-Apps.
Webhooks
Webhooks ist ein Format, das ein bestimmtes Ereignis (z. B. Pushing) im Repository auslöst und die Aktualisierungsinformationen an den Server usw. über das Einstellungsziel benachrichtigt. .. Nehmen Sie die Einstellungen an den folgenden Stellen vor. Hier können Sie auch festlegen, dass das Ereignis benachrichtigt werden soll.
Darüber hinaus können Webhooks können auch in Organisationseinheiten festgelegt werden. In diesem Fall können Ereignisse aller Repositorys unter Organisation empfangen werden Werden.
Da Webhooks jedoch "nur empfangen" werden, können Sie auf der GitHub-Repository-Seite nichts tun (z. B. das Problem kommentieren). Wenn Sie auf der Seite des GitHub-Repositorys Maßnahmen ergreifen müssen, müssen Sie die folgenden OAuth-Apps zusammen verwenden oder GitHub-Apps verwenden.
OAuth Apps
Wie der Name (OAuth) andeutet, verwendet OAuth Apps die Anmeldeinformationen eines GitHub-Benutzerkontos, um das GitHub-Repository zu bearbeiten. Daher müssen Sie sich beim Erstellen von OAuth-Apps unter Einstellungen> Entwicklereinstellungen des Benutzerkontos registrieren.
Dies wird nicht nur für Apps verwendet, die mit GitHub arbeiten, sondern auch für die Entwicklung von Websites, die einfach GitHub-Benutzerkonten als Authentifizierungsinformationen (Anmeldeinformationen) verwenden. Für die OAuth-Authentifizierung Authentifizieren mit Seitenübergängen dazwischen -options-for-oauth-apps / # Webanwendungsfluss) ist ein Dienst, der mit dem Back-End zusammenarbeitet. Da es überhaupt keinen Bildschirm gibt, wird auch [Offline-Authentifizierungsfluss unterstützt](https: // Entwickler). github.com/v3/oauth_authorizations/#get-or-create-an-authorization-for-a-specific-app).
Aufgrund der Eigenschaften von OAuth Apps, die "GitHub-Benutzerkonto-Anmeldeinformationen" verwenden, endet die Zusammenarbeit natürlich, wenn der Benutzer den Zugriff verliert oder das Konto schließt. Dies ist für den persönlichen Gebrauch eher natürlich, aber bei der Entwicklung eines Teams nicht vorzuziehen (z. B. wenn sich eine Person aus einem Projektmitglied zurückgezogen hat, um eine Zusammenarbeit aufzubauen!). Es ist auch möglich, dass Sie nicht wissen, wer mit OAuth arbeitet.
Mit anderen Worten, OAuth-Apps eignen sich für Apps / Websites, die "GitHub-Benutzer" persönlich verwenden, sind jedoch als Apps für "GitHub-Repositorys", die von Teams verwaltet werden, etwas problematisch.
GitHub Apps
GitHub Apps ist ein Format, das zum Entwickeln von Apps für das "GitHub-Repository" im Gegensatz zu den oben genannten OAuth-Apps geeignet ist. Dies liegt daran, dass die Installationseinheit die Repository-Einheit ist, die vom Benutzer / der Organisation gehalten wird.
Da es nicht nur Zugriff auf das Repository, sondern auch das Auftreten von Ereignissen im Repository (mit einem Webhook) erhalten kann, ist es nützlich, um Anwendungen zu entwickeln, die "auf bestimmte Ereignisse im Repository reagieren und etwas mit dem Repository tun". Dies ist die optimale Methode. Da die OAuth-Authentifizierung zusätzlich zur Verwendung für die Anmeldeauthentifizierung auch im Namen des Benutzers (mit dem Zugriffstoken des Benutzers) anstelle von GitHub-Apps durchgeführt werden kann -Integrationen / Einrichten und Registrieren von Github-Apps / Identifizieren von Benutzern für Github-Apps /) Es ist auch möglich, das Repository zu verarbeiten. Dies kann beim Erstellen einer Pro-Repository-Site wie Gitter verwendet werden (ich denke, es gibt viele Ideen für Chats, Aufgabenverwaltung usw.).
Die detaillierten Unterschiede bei den Authentifizierungsmethoden werden nachfolgend beschrieben.
About choosing an integration type
Dieses Mal werden wir uns die Entwicklung dieser GitHub-Apps ansehen.
Von hier aus werden wir uns die Vorgehensweise für die eigentliche Entwicklung von GitHub-Apps ansehen.
Registrieren Sie zunächst die zu entwickelnden GitHub-Apps. Diese Registrierung ist für jeden Benutzer oder jede Organisation möglich. Führen Sie die folgenden Schritte aus, um sich zu registrieren.
Die hier registrierten GitHub-Apps werden von Ihren Benutzern im Repository installiert und verwendet. Die hier registrierten Berechtigungen sind erforderlich, damit die GitHub-Apps entwickelt werden können, und sind die Berechtigungen, die der Benutzer erteilt, der sie installiert.
Wenn Sie die OAuth-Authentifizierung mit GitHub Apps verwenden, entspricht diese der OAuth-Authentifizierung. In diesem Fall wird die API mithilfe des Zugriffstokens des Benutzers verwendet, sodass keine Vorgänge ausgeführt werden können, die der authentifizierte Benutzer nicht ausführen kann.
Bei der Authentifizierung als GitHub Apps können Sie das dort erhaltene Zugriffstoken verwenden, um die von Berechtigungen erteilten Berechtigungen zu verwenden. Dieses Mal werden wir uns den Authentifizierungsprozess ansehen.
About authentication options for GitHub Apps
Um sich als GitHub Apps zu authentifizieren, benötigen Sie den privaten Schlüssel (PEM-Datei), den Sie bei der Registrierung für GitHub Apps erhalten haben. Auf diese Weise wird die Authentifizierung mit der Methode JSON Web Tokens (JWT) durchgeführt. Der Fluss ist wie folgt.
Das Paket, mit dem JWT erstellt wird, wird in jeder Sprache entwickelt. Sie können das Paket verwenden, das der Implementierungssprache entspricht (beachten Sie, dass Sie für die Authentifizierung auf der GitHub-Seite mit RS256 verschlüsseln müssen. Bitte).
Libraries for Token Signing/Verification
Darüber hinaus war diese Zertifizierung recht erfolgreich. Ich muss den Gültigkeitszeitraum des Zugriffstokens angeben (bis zu 10 Minuten), aber manchmal hat diese Datums- und Zeitprüfung funktioniert oder ist fehlgeschlagen. Dieser Punkt [obwohl jeder süchtig war](https://platform.github.community/t/issued-at-claim-iat-must-be-an-integer-representing-the-time-that-the- Behauptung-wurde-ausgestellt / 1549), habe ich das Ausstellungsdatum und die Ausstellungszeit etwas früher gemacht, damit die Authentifizierung stabil weitergegeben werden kann.
Der Code, der sich mit den kürzlich erstellten GitHub-Apps authentifiziert, ist der folgende Teil. Bitte beziehen Sie sich bei der Implementierung darauf.
Nach der Authentifizierung können Sie die GitHub-API verwenden, um verschiedene Vorgänge im GitHub-Repository auszuführen.
Außerdem plant GitHub, die API auf Basis von GraphQL zu erstellen. Daher habe ich diese bei der zukünftigen Erstellung verwendet Ich denke es ist besser.
Aufgrund des Formats von GitHub Apps ist ein Test-Repository zum Testen unverzichtbar. Installieren Sie die in diesem Test-Repository erstellten GitHub-Apps und überprüfen Sie, ob der Prozess für ein bestimmtes Ereignis ausgelöst wird und ob der Prozess für das Repository ordnungsgemäß funktioniert. Zum Testen von Webhooks und zur Authentifizierung ist ein globaler Zugriff erforderlich. Die Verwendung von ngrok ist jedoch zweckmäßig, da die Bereitstellung nacheinander auf einem Server ein Problem darstellt.
Sie müssen jedoch noch ein Problem registrieren, um das Ereignis tatsächlich auszulösen. Glücklicherweise ist auf der Registerkarte "Erweitert" der Registrierungsseite von GitHub Apps "Redeliver" möglich, mit dem in der Vergangenheit veröffentlichte Ereignisse erneut gesendet werden. Es wird daher empfohlen, dies zu verwenden.
Danach habe ich den tatsächlich für lokale Tests ausgegebenen JSON persönlich in einer Testdatei gespeichert und verwendet.
Wie Sie sehen können, ist der Test ein ziemlicher Schmerz, aber wenn dies vorbei ist, wird er endlich veröffentlicht!
Die entwickelte App wird sofort auf den Markt gebracht! Sie mögen denken, aber ich muss Ihnen eine traurige Tatsache sagen.
Requirements for listing an app on GitHub Marketplace
Es gibt andere Anforderungen an die Sicherheit, aber ich denke, die beiden oben genannten Punkte sind am schwierigsten zu erfüllen. Es bedeutet, dass die Neugeborenen-App nicht ist.
Die Anzahl der installierten Repositorys kann derzeit nicht auf dem Bildschirm bestätigt werden. Sie müssen dies bestätigen, indem Sie auf die folgende API klicken.
GitHub Apps/Find installations
Ein Zählskript finden Sie in den GitHub-Apps, die neulich erstellt wurden.
chakki-works/typot/get_installations.py
Gibt es dann keinen Ort, an dem es geöffnet werden kann? Es gibt eine Light-Version der Site namens Works with GitHub.
Sie können dies beantragen, wenn es den Nutzungsbedingungen von GitHub entspricht (Klicken Sie hier für Details) (https://developer.github.com/apps/adding-integrations/adding-integrations-to-works-with- Siehe github / Anforderungen für das Hinzufügen einer Integration zum Arbeiten mit github /)). Bitte beachten Sie, dass Sie nach der Bewerbung die Beschreibung usw. nicht mehr ändern können. Wenn Sie die Genehmigung bestanden haben, müssen Sie sich an den Zähler wenden, um sie zu ändern. Da es anscheinend jeden Freitag überprüft wird -with-github /), es ist eine gute Idee, sich vor Freitag zu bewerben.
Obwohl ich GitHub schon lange benutze, habe ich zum ersten Mal von der Existenz dieser Site erfahren und die Googleabilität von "Works with GitHub" ist ungewöhnlich niedrig, sodass ich nicht in die Suche geraten kann (als Bonus). Es gibt keinen Link vom GitHub-Portal. Daher können die hier aufgeführten Vorteile gering sein.
Abschließend möchte ich das von mir erstellte GitHub Apps-Repository vorstellen. Ich hoffe, es wird für Ihre Implementierung hilfreich sein.
chakki-works/typot (Wenn Sie es nützlich finden, würde ich ermutigt, wenn Sie mir einen Stern m (_ _) m geben könnten)
Informationen zur Funktion finden Sie im folgenden Artikel.
Bot, der den in der Pull-Anfrage versteckten Typ automatisch erkennt und in Ihrem Namen korrigiert
Lassen Sie uns unser Bestes geben, um die Welt auf dem GitHub-Marktplatz zu erobern!