[PYTHON] Eine neue Form der App, die mit GitHub funktioniert: So erstellen Sie GitHub-Apps

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.

Anwendungsformat, das mit GitHub funktioniert

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.

Entwicklung von GitHub Apps

Von hier aus werden wir uns die Vorgehensweise für die eigentliche Entwicklung von GitHub-Apps ansehen.

Registrieren Sie sich für GitHub Apps

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.

Registering GitHub Apps

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.

GitHub Apps-Authentifizierung

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.

image.png

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.

chakki-works/typot/env.py

Implementierung der Verarbeitung für das GitHub-Repository

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.

GitHub Apps testen

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.

image.png

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!

Veröffentlichung von GitHub Apps

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.

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!

Recommended Posts

Eine neue Form der App, die mit GitHub funktioniert: So erstellen Sie GitHub-Apps
So entwickeln Sie eine Cart-App mit Django
So erstellen Sie ein Wörterbuch mit einer hierarchischen Struktur.
Verfahren zur Erstellung plattformübergreifender Apps mit kivy
So erstellen Sie einen Raspberry Pi, der die Tweets eines bestimmten Benutzers spricht
Wie man ein Schießspiel mit toio macht (Teil 1)
Grundlagen von PyTorch (2) - Wie erstelle ich ein neuronales Netzwerk?
So stellen Sie eine mit Flask erstellte Web-App für Heroku bereit
So erstellen Sie mit Flask einen BOT für Cisco Webex-Teams
[Python] So erstellen Sie eine Liste von Zeichenfolgen Zeichen für Zeichen
Wie man ein einfaches Flappy Bird-Spiel mit Pygame macht
So zeigen Sie eine Liste der mit pyenv installierbaren Versionen an
Wie erstelle ich eine japanisch-englische Übersetzung?
Wie man einen lockeren Bot macht
Wie erstelle ich einen Crawler?
So erstellen Sie eine rekursive Funktion
Wie erstelle ich einen Crawler?
So erstellen Sie eine Überwachungskamera (Überwachungskamera) mit Opencv und Python
Ich habe versucht, das Entwicklungsstartverfahren von Django kurz zusammenzufassen
Node.js: So töten Sie Nachkommen eines Prozesses, der von child_process.fork () gestartet wurde
[Python] Wie erstelle ich eine Matrix aus sich wiederholenden Mustern (repmat / tile)
Ich habe versucht, mit Go einen exklusiven Kontrollmechanismus zu erstellen
So erstellen Sie einen Klon aus Github
So rufen Sie eine POST-Anfrage auf, die Japanisch (Shift-JIS) mit Anfragen unterstützt
[EC2] So machen Sie mit Selen eine Bildschirmaufnahme Ihres Smartphones
Ich habe versucht, eine Blockchain zu implementieren, die tatsächlich mit ungefähr 170 Zeilen funktioniert
So fügen Sie ein Paket mit PyCharm hinzu
[Python] Wie man eine Klasse iterierbar macht
Machen wir einen Jupyter-Kernel
Wie man einen Janken-Bot macht, der leicht bewegt werden kann (Kommentar)
[Einführung in Python] So sortieren Sie den Inhalt einer Liste effizient mit Listensortierung
Ein Memorandum darüber, wie man Pandas schreibt, das ich persönlich oft vergesse
So zeichnen Sie mit matplotlib ein Balkendiagramm, das mehrere Serien zusammenfasst
So erstellen Sie einen benutzerdefinierten Backtrader-Indikator
Wie erstelle ich eine Pelican Site Map?
Zusammenfassung zum Erstellen einer LAMP + Wordpress-Umgebung mit Sakura VPS
Ich habe eine einfache Mail-Sendeanwendung mit tkinter von Python erstellt
Finden Sie heraus, wie Sie eine Datei mit einer bestimmten Anzahl von Zeilen gleichmäßig teilen können
Ich habe versucht, einen Übersetzungs-BOT zu erstellen, der mit Discord unter Verwendung von Googletrans funktioniert
[Einführung in Python] So erhalten Sie den Datenindex mit der for-Anweisung
Wie man ein Dialogsystem für Anfänger erstellt
Lesen einer CSV-Datei mit Python 2/3
So senden Sie eine Nachricht mit Curl an LINE
Ein Memorandum, um WebDAV nur mit Nginx zu erstellen
So zeichnen Sie ein 2-Achsen-Diagramm mit Pyplot
Versuchen Sie, in Python einen "Entschlüsselungs" -Code zu erstellen
So legen Sie Attribute mit Mock of Python fest
So implementieren Sie "named_scope" von RubyOnRails mit Django
Versuchen Sie, mit Python eine Diedergruppe zu bilden
So implementieren Sie einen neuen CPUFreq-Prozessortreiber
Erstellen Sie mit Amazon Lex einen LINE WORKS-Bot
Ich habe eine Twitter-App erstellt, die die Zeichen der Vorverbindung mit Heroku entschlüsselt (Fehler).
Konvertieren Sie Bilder aus dem FlyCapture SDK in ein Formular, das mit openCV verwendet werden kann
So verwenden Sie eine Bibliothek, die ursprünglich nicht in Google App Engine enthalten war
[Mac] Ich möchte einen einfachen HTTP-Server erstellen, auf dem CGI mit Python ausgeführt wird
So veröffentlichen Sie GitHub-Seiten mit Pelican, einem statischen HTML-Generator von Python
Die Theorie, dass der Schlüssel zur Kontrolle der Infektion des neuen Coronavirus die Hyperdispersion der Anfälligkeit ist.