Beeeat’s log

Beeeat’s log

プログラミングで出くわした知識やツール、日常生活、働き方その他色々なことをメモしていくブログ

octokit.rb を使ってコミットハッシュに紐付いたプルリクエストを取得する

最近,業務でコミットハッシュ( SHA-1 )に紐付いたプルリクエストを取得する方法が無いかを探していて,意外と苦労していました.

もう駄目かなぁと思ったのですが,何とか方法を見つけたので今回はその方法についてまとめていきます・

やり方

探してみた結果,どうやらGitHub の「List pull requests associated with a commit」という API を使えば良いことがわかりました.

developer.github.com

注意点としてはこの 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 を使ってコミットハッシュに紐付いたプルリクエストを取得する方法についてまとめみました.この内容についての文献があまりなかったのが少し不思議ではありました(こういうことやりたいのは自分だけってことなのかな😅)

こんなことをやりたかった理由についてなのですが,これについては業務で取り組んでいることが終わったタイミングでまたブログに書こうと思います(あともう少し!!!).