GitHubリポジトリの招待が大量に届いてもまとめて承諾できる。そう、GitHub APIならね

ある日GitHubリポジトリの招待メールが大量に届いていたら、みなさんはどうしますか?ひとつずつメールを開いて承諾していくのは辛いですよね。GitHub APIを利用して楽に解決しましょう。
2019.04.23

こんにちは。サービスグループの武田です。

ある日GitHubのプライベートリポジトリへの招待メールが大量に届いていたら、みなさんはどうしますか?とりあえずひとつずつメールを開いて承諾していくでしょうか。

※画像はイメージです。

もちろんそれでもいいんですが、ひたすら同じ作業を繰り返すのはあまり好きでないです。楽できないかなーと調べていたらちょうどいいAPIがありました。今回はこれを使ってみましょう。

Repository Invitations | GitHub Developer Guide

環境

次のような環境で検証をしました。

$ sw_vers
ProductName:	Mac OS X
ProductVersion:	10.14.3
BuildVersion:	18D109

$ jq -V
jq-1.5

$ curl -V
curl 7.54.0 (x86_64-apple-darwin18.0) libcurl/7.54.0 LibreSSL/2.6.4 zlib/1.2.11 nghttp2/1.24.1
Protocols: dict file ftp ftps gopher http https imap imaps ldap ldaps pop3 pop3s rtsp smb smbs smtp smtps telnet tftp
Features: AsynchDNS IPv6 Largefile GSS-API Kerberos SPNEGO NTLM NTLM_WB SSL libz HTTP2 UnixSockets HTTPS-proxy

$ echo $BASH_VERSION
4.4.23(1)-release

GitHubのパーソナルアクセストークンを取得

まずはGitHub APIをたたくための準備です。GitHubでの認証方式はいくつか提供されていますが、今回は推奨されているOAuth2トークンを利用してみます。

まずブラウザからGitHubにログインし、右上の自分のアイコンをクリックして、[Settings]を選択します。

次にサイドメニューから[Developer settings]を選択します。

画面が切り替わったら、サイドメニューの[Personal access tokens]を選択し、次に右側の[Generate new token]を押下します。

次の画面では、認可するスコープを選択します。今回はリポジトリへの招待を承諾するだけですので、 repo:invite のみでOKです。Token descriptionにはわかりやすい概要を書いておきましょう。

上記項目が埋められたら、画面下にスクロールして[Generate token]を押下します。

トークンが表示されたら忘れずにメモしておきます。なおトークンは、再生成は可能ですが再取得はできません。

GitHub APIを使用してまとめて承諾

GitHub APIのアクセストークンが取得できましたので、あとはAPIをたたいて承諾するだけです。次のようなコマンドを実行しましょう。

GITHUB_API_ENDPOINT_REPO_INVITE=https://api.github.com/user/repository_invitations
GITHUB_AUTH_TOKEN=xxx #取得したアクセストークンに置き換えてください

curl -s -H "Authorization: token ${GITHUB_AUTH_TOKEN}" "$GITHUB_API_ENDPOINT_REPO_INVITE" \
	| jq '.[].id' \
	| xargs -I{} curl -s -X PATCH -H "Authorization: token ${GITHUB_AUTH_TOKEN}" "${GITHUB_API_ENDPOINT_REPO_INVITE}/{}"

やっていることは単純です。/user/repository_invitationsをGETでたたいて招待一覧を取得し、jqで招待idだけを取り出し、あとは取り出した招待idをPATCHで順番に承諾していきます。ページングには対応していませんので、実行後に未承諾の招待がないかを確認しておくといいでしょう。

curl -s -H "Authorization: token ${GITHUB_AUTH_TOKEN}" "$GITHUB_API_ENDPOINT_REPO_INVITE"

これで承諾したリポジトリにアクセスできるはずです。実際にアクセスを試してみてください。

後片付けも忘れずに

これでやりたかったことは終わりです。使用したトークンはおそらく使う予定もないはずですので、消しておきましょう。アクセストークンのページに表示されているトークン一覧から、今回作成したトークンの[Delete]ボタンを押下します。

本当に消していいのか確認されますので、間違っていないか確認したうえでボタンを押下します。

これで一仕事おしまいです。

さいごに

ある日GitHubのプライベートリポジトリへの招待メールが大量に届いていてももう大丈夫。解決方法は見つかります。そう、Developers.IOならね。