octokit.rb を使ってコミットハッシュに紐付いたプルリクエストを取得する
最近,業務でコミットハッシュ( SHA-1 )に紐付いたプルリクエストを取得する方法が無いかを探していて,意外と苦労していました.
ローカルリポジトリにある git の commit の sha または ブランチ名を利用して,プルリクエストの番号って取得できないかなぁ...
— okabeeeat (@okabeeeat) 2020年6月20日
GitHub API のドキュメント見てもそれらしいものが無さそうな感じなんだよなぁ...なんか方法無いだろうか...
もう駄目かなぁと思ったのですが,何とか方法を見つけたので今回はその方法についてまとめていきます・
やり方
探してみた結果,どうやらGitHub の「List pull requests associated with a commit」という API を使えば良いことがわかりました.
注意点としてはこの API はプレビュー版のため,APIをリクエストする時に以下の Accept ヘッダーを追加する必要があります.
application/vnd.github.groot-preview+json
こんな感じで curl で叩けば取得できます.
$curl https://api.github.com/repos/ユーザ名/リポジトリ名/commits/コミットハッシュ/pulls -H "Accept: application/vnd.github.groot-preview+json" [ { "url": "https://api.github.com/repos/ユーザ名/リポジトリ名/pulls/コミットハッシュに紐付くプルリクエストの番号", 〜省略〜
octokit.rb を使う場合
octokit.rbを使って取得することもできます.あくまでサンプルですが既にプルリクエストが作られているプロジェクトに次のようなコードを追加をすれば,取得できます.
※octokit.rb のバージョンは v4.15 以上にする必要があります.
以下, sample プロジェクトにコードを追加した場合としています.
sample/.env
GITHUB_REPOSITORY='ユーザ名/リポジトリ名' GITHUB_PERSONAL_ACCESS_TOKEN='アクセストークン'
sample/Gemfile
gem "octokit", "~> 4.18" gem 'dotenv'
sample/sample.rb
require 'dotenv' require 'octokit' Dotenv.load octkit_client = Octokit::Client.new(:access_token => ENV['GITHUB_PERSONAL_ACCESS_TOKEN']) begin puts octkit_client.commit_pulls(ENV['GITHUB_REPOSITORY'], proc { `git rev-parse HEAD`.chomp }.call, accept: ::Octokit::Preview::PREVIEW_TYPES[:commit_pulls]).inspect rescue Octokit::UnprocessableEntity puts 'commitを push していない, またはプルリクエストを作っていなければ error になります' rescue => e puts e end
Accept ヘッダーはoption
として accept: ::Octokit::Preview::PREVIEW_TYPES[:commit_pulls]
追加すればできます.
参考: rdoc.info
実行
$sample - [sample-brunch] » bundle install $sample - [sample-brunch] » ruby sample.rb 〜ここにレスポンス結果が表示される〜
まとめと所感
今回は octokit.rb を使ってコミットハッシュに紐付いたプルリクエストを取得する方法についてまとめみました.この内容についての文献があまりなかったのが少し不思議ではありました(こういうことやりたいのは自分だけってことなのかな😅)
こんなことをやりたかった理由についてなのですが,これについては業務で取り組んでいることが終わったタイミングでまたブログに書こうと思います(あともう少し!!!).