[PYTHON] Une nouvelle forme d'application qui fonctionne avec GitHub: Comment créer des applications GitHub

GitHub Apps est une nouvelle forme d'application qui fonctionne avec GitHub. Ce format a été annoncé avec la sortie de GitHub Marketplace, la place de marché des applications [https://github.com/blog/2359-introducing-github-marketplace-and-more-tools-to-customize- votre flux de travail). En d'autres termes, l'écosystème consistant à créer des applications GitHub, à les publier sur le marché et à en tirer de l'argent a été fermement établi.

Dans cet article, je vais vous présenter comment créer des applications GitHub qui propagent de tels rêves.

Format d'application qui fonctionne avec GitHub

Commencez par organiser les formats des applications qui fonctionnent avec GitHub, y compris les applications GitHub.

Webhooks

Webhooks est un format qui déclenche un événement spécifique (tel que l'envoi) dans le référentiel et notifie les informations de mise à jour au serveur, etc., de la destination du paramètre. .. Effectuez les réglages aux emplacements suivants. Ici, vous pouvez également définir l'événement à notifier.

De plus, les Webhooks peuvent également être définis en unités d'organisation, dans ce cas, il est possible de recevoir les événements de tous les référentiels sous Organisation Devenir.

Cependant, étant donné que les Webhooks ne sont "que recevoir", vous ne pouvez rien faire du côté du référentiel GitHub (comme commenter le problème). Si vous devez effectuer une action du côté du référentiel GitHub, vous devez utiliser les applications OAuth suivantes ensemble ou utiliser les applications GitHub.

OAuth Apps

Comme son nom (OAuth) l'indique, OAuth Apps est un format qui utilise les informations d'identification d'un compte utilisateur GitHub pour fonctionner sur le référentiel GitHub. Par conséquent, lors de la création d'applications OAuth, vous devez vous inscrire à partir de Paramètres> Paramètres de développeur du compte d'utilisateur.

Ceci est utilisé non seulement pour les applications qui fonctionnent avec GitHub, mais également pour le développement de sites qui utilisent simplement des comptes d'utilisateurs GitHub comme informations d'authentification (informations de connexion). Pour l'authentification OAuth, Authentifiez-vous avec des transitions de page entre les deux -options-for-oauth-apps / # web-application-flow) est un service qui fonctionne avec le back-end. Comme il n'y a pas d'écran en premier lieu, [Le flux d'authentification hors ligne est également pris en charge](https: // developer. github.com/v3/oauth_authorizations/#get-or-create-an-authorization-for-a-specific-app).

En raison des caractéristiques des applications OAuth qui utilisent des "informations d'identification de compte utilisateur GitHub", si l'utilisateur perd l'accès ou ferme le compte, la coopération prendra naturellement fin. C'est plutôt naturel pour un usage personnel, mais ce n'est pas préférable lors du développement d'une équipe (comme une personne qui s'est retirée d'un membre du projet a mis en place une coopération!). De plus, il est possible que vous ne sachiez pas qui travaille avec OAuth.

En d'autres termes, les applications OAuth conviennent aux applications / sites que les "utilisateurs GitHub" utilisent personnellement, mais elles sont un peu problématiques en tant qu'applications pour les "référentiels GitHub" gérés par des équipes.

GitHub Apps

GitHub Apps est un format adapté au développement d'applications pour le "référentiel GitHub" par opposition aux applications OAuth mentionnées ci-dessus. En effet, l'unité d'installation est l'unité de référentiel détenue par l'utilisateur / l'organisation.

Puisqu'il peut recevoir non seulement l'accès au référentiel mais aussi l'occurrence d'événements dans le référentiel (avec des webhooks), il est utile pour développer des applications qui "réagissent à des événements spécifiques dans le référentiel et font quelque chose avec le référentiel". C'est la méthode optimale. Étant donné que l'authentification OAuth peut également être effectuée, en plus de l'utiliser pour l'authentification de connexion, au nom de l'utilisateur (avec le jeton d'accès de l'utilisateur) au lieu de comme applications GitHub -integrations / configuration-et-enregistrement-d'applications-github / identification-utilisateurs-pour-applications-github /) Il est également possible de traiter le dépôt. Cela peut être utilisé lors de la création d'un site par référentiel comme Gitter (je pense qu'il y aura beaucoup d'idées pour le chat, la gestion des tâches, etc.).

Les différences détaillées dans les méthodes d'authentification sont décrites ci-dessous.

About choosing an integration type

Cette fois, nous examinerons le développement de ces applications GitHub.

Développement d'applications GitHub

À partir de là, nous examinerons la procédure de développement des applications GitHub.

S'inscrire aux applications GitHub

Tout d'abord, enregistrez les applications GitHub à développer. Cette inscription est possible pour chaque utilisateur ou organisation. Suivez les étapes ci-dessous pour vous inscrire.

Registering GitHub Apps

Les applications GitHub enregistrées ici seront installées et utilisées par vos utilisateurs dans le référentiel. Les autorisations enregistrées ici sont nécessaires pour que les applications GitHub soient développées et sont les autorisations accordées par l'utilisateur qui les installe.

Authentification des applications GitHub

Si vous utilisez l'authentification OAuth avec les applications GitHub, ce sera la même chose que OAuth. Dans ce cas, l'API est utilisée à l'aide du jeton d'accès de l'utilisateur, il n'est donc pas possible d'effectuer des opérations que l'utilisateur authentifié ne peut pas effectuer.

Lors de l'authentification en tant qu'applications GitHub, vous pouvez utiliser le jeton d'accès obtenu pour exploiter les autorisations accordées par les autorisations. Cette fois, nous examinerons le processus d'authentification.

About authentication options for GitHub Apps

Pour vous authentifier en tant qu'applications GitHub, vous aurez besoin de la clé privée (fichier pem) obtenue lors de votre inscription aux applications GitHub. Grâce à cela, l'authentification est effectuée à l'aide de la méthode JSON Web Tokens (JWT). Le flux est le suivant.

image.png

Le package qui crée JWT est développé dans chaque langage, et vous pouvez utiliser celui qui correspond au langage d'implémentation (notez que vous devez crypter avec RS256 pour l'authentification côté GitHub. S'il vous plaît).

Libraries for Token Signing/Verification

De plus, cette certification a été assez réussie. Je dois spécifier la période de validité du jeton d'accès (jusqu'à 10 minutes), mais parfois cette vérification de la date et de l'heure a fonctionné ou a échoué. Ce point [même si tout le monde était accro](https://platform.github.community/t/issued-at-claim-iat-must-be-an-integer-representing-the-time-that-the- assertion-was-published / 1549), j'ai défini la date et l'heure d'émission un peu plus tôt afin que l'authentification puisse être transmise de manière stable.

Le code qui s'authentifie avec les applications GitHub récemment créées est la partie suivante, veuillez donc vous y référer lors de sa mise en œuvre.

chakki-works/typot/env.py

Implémentation du traitement pour le référentiel GitHub

Après l'authentification, vous pouvez utiliser l 'API GitHub pour effectuer diverses opérations sur le référentiel GitHub.

De plus, GitHub prévoit de créer l'API basée sur GraphQL, j'ai donc utilisé ceci lors de sa création à l'avenir Je pense que c'est mieux.

Test des applications GitHub

En raison du format des applications GitHub, un référentiel de test est indispensable pour les tests. Installez les applications GitHub créées dans ce référentiel de test et vérifiez si le processus est déclenché pour un événement donné et si le processus du référentiel fonctionne correctement. Un accès global est requis pour tester les webhooks et l'authentification, mais il est pratique d'utiliser ngrok car il s'agit d'un os à déployer sur un serveur un par un.

Cependant, vous devez toujours enregistrer un problème pour déclencher réellement l'événement. Heureusement, à partir de l'onglet "Avancé" de la page d'inscription des applications GitHub, "Redeliver" qui renvoie les événements publiés dans le passé est possible, il est donc recommandé de l'utiliser.

image.png

Après cela, j'ai personnellement enregistré le JSON réellement émis pour les tests locaux dans un fichier de test et je l'ai utilisé.

Comme vous pouvez le voir, le test est assez pénible, mais quand ce sera terminé, il sera enfin publié!

Sortie des applications GitHub

L'application développée est mise sur le marché immédiatement! Vous pensez peut-être, mais je dois vous dire un fait triste.

Requirements for listing an app on GitHub Marketplace

Il y a d'autres exigences en termes de sécurité, mais je pense que les deux points ci-dessus sont les plus difficiles à respecter. Cela signifie que l'application nouveau-né ne l'est pas.

Le nombre de référentiels installés ne peut pas être confirmé à l'écran pour le moment, et il est nécessaire de confirmer en appuyant sur l'API suivante.

GitHub Apps/Find installations

Veuillez vous référer aux applications GitHub créées l'autre jour pour un script de comptage.

chakki-works/typot/get_installations.py

Alors, n'y a-t-il pas un endroit pour l'ouvrir? Il existe une version allégée du site appelée Works with GitHub.

Works with GitHub

Vous pouvez en faire la demande s'il est conforme aux conditions d'utilisation de GitHub (Cliquez ici pour plus de détails) (https://developer.github.com/apps/adding-integrations/adding-integrations-to-works-with- Voir github / requirements-for-added-an-integration-to-works-with-github /)). Veuillez noter qu'une fois que vous avez postulé, vous ne pouvez pas modifier la description, etc., et une fois que vous avez passé l'approbation, vous devez contacter le comptoir pour la modifier. [Il semble qu'ils examinent tous les vendredis](https://developer.github.com/apps/adding-integrations/adding-integrations-to-works-with-github/adding-an-integration-to-works -with-github /), c'est une bonne idée de postuler avant vendredi.

Cependant, bien que j'utilise GitHub depuis longtemps, c'est la première fois que j'apprends l'existence de ce site, et la googleabilité de "Works with GitHub" est anormalement faible, donc je ne peux pas être pris dans la recherche (plus Il n'y a pas de lien depuis le portail GitHub). Par conséquent, les avantages énumérés ici peuvent être minimes.

Enfin, je voudrais vous présenter le référentiel GitHub Apps que j'ai créé. J'espère que cela vous sera utile pour votre mise en œuvre.

chakki-works/typot (Si vous le trouvez utile, je serais encouragé si vous pouviez me donner une étoile m (_ _) m)

Veuillez vous référer à l'article suivant pour la fonction.

Bot qui détecte automatiquement le type masqué dans la pull request et le corrige en votre nom

Faisons de notre mieux pour conquérir le monde sur le marché GitHub!

Recommended Posts

Une nouvelle forme d'application qui fonctionne avec GitHub: Comment créer des applications GitHub
Comment développer une application de panier avec Django
Comment créer un dictionnaire avec une structure hiérarchique.
Procédure de création d'application multi-plateforme avec kivy
Comment faire un Raspberry Pi qui parle les tweets d'un utilisateur spécifié
Comment faire un jeu de tir avec toio (partie 1)
Bases de PyTorch (2) -Comment créer un réseau de neurones-
Comment déployer une application Web créée avec Flask sur Heroku
Comment créer un BOT Cisco Webex Teams à l'aide de Flask
[Python] Comment créer une liste de chaînes de caractères caractère par caractère
Comment faire un simple jeu Flappy Bird avec Pygame
Comment afficher une liste des versions installables avec pyenv
Comment faire une traduction japonais-anglais
Comment créer un bot slack
Comment créer un robot - Avancé
Comment créer une fonction récursive
Comment créer un robot - Basic
Comment créer une caméra de surveillance (caméra de sécurité) avec Opencv et Python
J'ai essayé de résumer brièvement la procédure de démarrage du développement de Django
Node.js: Comment tuer les descendants d'un processus démarré par child_process.fork ()
[Python] Comment créer une matrice de motifs répétitifs (repmat / tile)
J'ai essayé de créer un mécanisme de contrôle exclusif avec Go
Comment créer un clone depuis Github
Comment appeler une requête POST prenant en charge le japonais (Shift-JIS) avec des requêtes
[EC2] Comment faire une capture d'écran de votre smartphone avec du sélénium
J'ai essayé de mettre en œuvre une blockchain qui fonctionne réellement avec environ 170 lignes
Comment ajouter un package avec PyCharm
[Python] Comment rendre une classe itérable
Faisons un noyau jupyter
Comment créer un bot Janken qui peut être facilement déplacé (commentaire)
[Introduction à Python] Comment trier efficacement le contenu d'une liste avec le tri par liste
Un mémorandum sur la façon d'écrire des pandas que j'ai tendance à oublier personnellement
Comment dessiner un graphique à barres qui résume plusieurs séries avec matplotlib
Comment créer un indicateur personnalisé Backtrader
Comment créer un plan de site Pelican
Résumé de la création d'un environnement LAMP + Wordpress avec Sakura VPS
J'ai fait une application d'envoi de courrier simple avec tkinter de Python
Découvrez comment diviser uniformément un fichier avec un certain nombre de lignes
J'ai essayé de créer un BOT de traduction qui fonctionne avec Discord en utilisant googletrans
[Introduction à Python] Comment obtenir l'index des données avec l'instruction for
Comment créer un système de dialogue dédié aux débutants
Comment lire un fichier CSV avec Python 2/3
Comment envoyer un message à LINE avec curl
Un mémorandum pour faire WebDAV uniquement avec nginx
Comment dessiner un graphique à 2 axes avec pyplot
Essayez de créer un code de "décryptage" en Python
Comment spécifier des attributs avec Mock of Python
Comment implémenter "named_scope" de RubyOnRails avec Django
Essayez de créer un groupe de dièdre avec Python
Comment implémenter un nouveau pilote de processeur CPUFreq
Créer un bot LINE WORKS avec Amazon Lex
J'ai créé une application Twitter qui décrypte les caractères de pré-connexion avec heroku (échec)
Convertir des images du SDK FlyCapture en un formulaire pouvant être utilisé avec openCV
Comment utiliser une bibliothèque qui n'est pas initialement incluse dans Google App Engine
[Mac] Je souhaite créer un serveur HTTP simple qui exécute CGI avec Python
Comment publier des pages GitHub avec Pelican, un générateur HTML statique créé par Python
La théorie selon laquelle la clé du contrôle de l'infection du nouveau coronavirus est l'hyperdispersion de la sensibilité.