sakutarou’s blog

とりあえずWeb系技術をゆるく書いていく

GitHub Appsを作ってみたら色々詰まって苦労した。。。

開発合宿でGitHub Appsでアプリを初めて作ってみました
自分が詰まったところを中心に情報を残します

fusic.co.jp

GitHub 連携

GitHubで何かしら連携をやろうと考えた場合以下が考えられます。
上3つは今でも使ったことがあるのですが、GitHub Appsは全く使ったことがありませんでした。
なので今回は GitHub Apps にトライしてみました。

GitHub Appsって何?

特徴としては以下

  • organization単位にインストールすることが可能(個人アカウントで作成することも可能)
  • 特定のリポジトリのみにアクセス権を与えることが可能
  • 詳細な権限設定とWebhookが利用可能
  • JWT認証をすることでAPIコールも可能
  • 一般公開も可能(自分の組織に限定することも可能)

要は、OAuthなど今まで個人に紐づいていたものが組織に紐づいて、且つ WebhookとAPIコールもくっついてくるすっごい便利なものだよと

GitHub Appsの登録

とりあえず最初にAppsの登録をします。
ここで Webhookや権限などを設定しておきます。

Creating a GitHub App | GitHub Developer Guide

JWT認証

APIをコールする為には、JWT認証を行いトークンを取得する必要があります。
ここでがっつり詰まってしまいました。

どうすればいいの

このURLに対して証明書と一緒にPOSTを送信するだけ!
すっごい簡単!
※ :installation_id は自身のものに修正する
https://api.github.com/installations/:installation_id/access_tokens

つまりポイントその1

そもそも installation_id って何!

WebHookリクエストの一部としてくっついてきます。

  # 上省略
  "installation": {
    "id": XXXXXX
  }

これでPOSTが送信できる!

つまりポイントその2

何をPOSTすればいいのか分からない!
以下をPOSTします。

- "iat": 現在日時タイムスタンプ,
- "exp": 発行するJWTの失効日時タイムスタンプ(最大10分), 
- "iss": GitHub App's identifier

GitHub App's identifier 何これ!
こいつが何かわかりませんでした。。。

作成したGitHub AppsのGeneralページにある AboutのIDGitHub App's identifier になります。
Private key も 同じ場所にあります。

つまりポイント3

ヘッダーは以下を指定する

"Authorization": "Bearer 作成したJWT",
"Accept": "application/vnd.github.machine-man-preview+json"

何つくったの?

GitHub + Amazon API Gateway + AWS Lambda *+ PythonGitHubラベル管理アプリを作りました。
ソースコードを整理できたら公開するかも。。。

参考URL

https://qiita.com/icoxfog417/items/fe411b94b8e7ae229e3e

Authentication options for GitHub Apps | GitHub Developer Guide