0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

PowershellからGitHubのAPIを使用する

Last updated at Posted at 2023-02-23

この記事の概要

以前書いたこの記事では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の構造体に入れてあげてやればできるはずです。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?