この記事の概要
以前書いたこの記事ではPowerShellForGitHubというライブラリを使用していたのですが、実際にあるAPIにはあっても使用できないものが多かったので自分でAPIを直接Powershellから叩くことにしました。
JenkinsなどでGitHubに連携をする場合に任意のタイミングでPull Requestにコメントを打ちたいときなどが発生した際に便利です。
Windowsで使用したいのでPowershellでInvoke-requestを使用していますが、Linuxで組む場合はbashでcurlでできます。
そういえばMacでもPowershell使えるのでMacでも行けるかも(zsh使いなよ・・・)
APIについて
APIを使用するためのtokenなどは上の記事を参照
基本的な使用方法
Pull requestの情報を取得する場合
function GetPullRequestInfo
{
param(
[string] $api_url,
[string] $token,
[string] $repo,
[string] $pr_num
)
$url = $api_url + "/repos/" + $repo + "/pulls/" + $pr_num
$resp = (Invoke-WebRequest -H @{"Authorization"="token ${token}"} ${url})
$resp_StatusCode = $resp.StatusCode
Write-Host $resp_StatusCode
}
ここではAPIのtokenとapiのURL、レポジトリ名(ユーザ名\レポジトリ名)、Pull requestの番号が必要になります。
これでStatus codeが200の場合正常に情報が取得できています。
取得できる情報は、
$content = $resp.Content | ConvertFrom-Json
でJSONファイルの形で取得することができます。その後の処理はJSONの構造に従ってがんばってください。
Pull Request(Issue)にコメントする
function CreatePullRequestComment
{
param(
[string] $api_url,
[string] $token,
[string] $repo,
[string] $pr_num,
[string] $body
)
$url = $api_url + "/repos/" + $repo + "/issues/" + $pr_num + "/comments"
$string_body = @{
body = $body
}
$json_body = $string_body | ConvertTo-Json
$resp = (Invoke-WebRequest -H @{"Authorization"="token ${token}"} -Method Post ${url} -body ${json_body})
$resp_StatusCode = $resp.StatusCode
Write-Host $resp_StatusCode
}
APIのURLとtoken、レポジトリ名、Pull Request番号(Issue番号)、コメント内容($body)を渡してやります。
status codeに200が帰ってきたら成功です。
このときに、コメント内容などのオプションをJSON形式で渡してやる必要があるので、ConvertTo-Jsonを使用して構造体を変換してやります。
ちなみに改行はPowershellの改行と同じく「`n」になります。
注意すべき点は、Pull requestとIssueの番号は共通で使われるという点なのでIssue用のAPIがPull reqestにも使用できてしまうという点です。
それ以外
こちらを参考にしてください。基本形は上の2つになります。PowewrShellで一行づつ確認しながらできると思います。
渡すオプションがいっぱいある場合はIssueにコメントを与えるときのようにbodyの構造体に入れてあげてやればできるはずです。