Why not login to Qiita and try out its useful features?

We'll deliver articles that match you.

You can read useful information later.

2
1

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.

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

Posted at

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のスコープの権限を与えておく必要があります。

20210729184006.png


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

「直近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のプルリクエストの検索画面でクエリを色々試しておくと良いかもしれません。

20210729185217.png

2
1
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
2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?