Github CLIはGithubに対する様々な操作をコマンドラインから実行できる便利なツールです。
最近自分が関わっているプロジェクトで「直近24時間以内に更新されたPRの番号とブランチ名の一覧」を抽出してバッチ処理をしたいという要件があり、Github CLIを使ってこれを実現しました。
Github CLIの準備
Github CLIはHomebrewでインストールできます。
$ brew install gh
ghコマンドでGithubにアクセスするためには事前に認証しておく必要があります。
認証方法にはいくつかありますが、バッチサーバ上で実行する必要があったためGithubのパーソナルアクセストークンを使用した認証方法を使いました。
以下のコマンドで認証できます。
$ export GITHUB_PERSONAL_ACCESS_TOKEN=xxxxxxxxxxxx
$ echo ${GITHUB_PERSONAL_ACCESS_TOKEN} | gh auth login --with-token
なお、パーソナルアクセストークンには最低限repo
とread:org
のスコープの権限を与えておく必要があります。
条件指定でプルリクエストを抽出する
「直近24時間以内に更新されたPRの番号とブランチ名の一覧」を抽出するコマンドは以下のとおりです。
$ updated=`date -j -v-24H +"%Y-%m-%dT%H:00"`
$ gh pr list \
--state open \
--search "updated:>$updated" \
--jq ".[] | [.number, .headRefName]|@csv" \
--json number,headRefName \
| awk -F, '{print $1,$2}' \
| sed -e 's/"//g'
100 feature/foo
101 feature/bar
102 feature/baz
-
gh pr list
でプルリクエストの一覧を取得します。 -
--state open
でオープン中のプルリクエストに絞ります -
--search
で細かい条件指定が可能です。ここでは特定の時刻移行に更新があったものを抽出するようにしています -
--jq
でjqコマンドの記法でJSONレスポンスから値を取り出すことができます -
--json
でJSONレスポンスに含める要素を指定します。ここではプルリクエストの番号とブランチ名が必要だったのでその2つを指定しています
--search
に指定する検索条件はGithubのプルリクエスト・Issue検索クエリの記法になっています。
こちらにドキュメントがあります。
コマンドでやる前に、Githubのプルリクエストの検索画面でクエリを色々試しておくと良いかもしれません。