GitHub Appsを作ってみたら色々詰まって苦労した。。。
開発合宿でGitHub Appsでアプリを初めて作ってみました
自分が詰まったところを中心に情報を残します
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のID
が GitHub App's identifier
になります。
Private key
も 同じ場所にあります。
つまりポイント3
ヘッダーは以下を指定する
"Authorization": "Bearer 作成したJWT", "Accept": "application/vnd.github.machine-man-preview+json"
何つくったの?
GitHub
+ Amazon API Gateway
+ AWS Lambda
*+ Python
で GitHubラベル管理アプリを作りました。
ソースコードを整理できたら公開するかも。。。
参考URL
https://qiita.com/icoxfog417/items/fe411b94b8e7ae229e3e
Authentication options for GitHub Apps | GitHub Developer Guide