BambooHero

iOSアプリ開発と株式投資をメインに色々書きます

Github CLIで「直近24時間以内に更新されたPR」を抽出する

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

なお、パーソナルアクセストークンには最低限reporead:orgのスコープの権限を与えておく必要があります。

f:id:bamboohero:20210729184006p:plain


条件指定でプルリクエストを抽出する

「直近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検索クエリの記法になっています。 こちらにドキュメントがあります。

docs.github.com

コマンドでやる前に、Githubのプルリクエストの検索画面でクエリを色々試しておくと良いかもしれません。

f:id:bamboohero:20210729185217p:plain