今日変更したプルリクエストを出力
今日変更したプルリクエストを出力
背景
今日変更したプルリクエストを shell 上で確認したい。
仕様
- 対象のプルリクエスト
06:00
より前の時間- 前日の
06:00
~ 今日の05:59
のプルリクエストを対象とする
- 前日の
06:00
以降- 今日の
06:00
~ 現在時刻 のプルリクエストを対象とする
- 今日の
## DONE
には、マージしたプルリクエストを出力## WIP
には、マージしていない、今日更新したプルリクエストを出力
出力
$ tps
## DONE
- [username/dotfiles #73 tps の追加](https://github.com/username/dotfiles/pull/73)
- [username/hogehogehoge #3 hogehoge](https://github.com/username/hogehogehoge/pull/3)
## WIP
- None
コード
dotfiles/zsh/.my_functions/.tps.zshrc
# 今日の GitHub 上での作業内容
function tps() {
if [ ! -e $DOTFILES_PATH/zsh/.my_functions/.tps.txt ]; then
echo "$DOTFILES_PATH/zsh/.my_functions/.tps.txt is required"
return 1
fi
echo -n "## DONE\n\n$(_pr_list 'done')\n\n## WIP \n\n$(_pr_list 'wip')\n"
}
# プルリクエストを取得する
# * $ _pr_list done => 前日の `06:00` ~ 今日の `05:59` のプルリクエストを取得
# * $ _pr_list wip => 今日の `06:00` ~ 現在時刻 のプルリクエストを取得
function _pr_list() {
if [ $# -ne 1 ]; then
# 引数がないときは、終了する
echo "Requires an argument"
return 1
elif [ ! -e $DOTFILES_PATH/zsh/.my_functions/.tps.txt ]; then
# .tps.txt がないときは、終了する
echo "$DOTFILES_PATH/zsh/.my_functions/.tps.txt is required"
return 1
fi
local search_syntax
local updated_today="$(date '+updated:>=%Y-%m-%dT06:00:00+09:00' --date '6 hour ago')"
if [[ $1 == 'done' ]]; then
search_syntax="is:merged $updated_today"
elif [[ $1 == 'wip' ]]; then
search_syntax="is:unmerged $updated_today"
else
echo "Unknown argument: \"$1\"\n Available argument: done, wip"
return 1
fi
local result=''
local json_fields='headRepositoryOwner,headRepository,title,url,number'
local jq_expression='.[] | .result = "- [" + .headRepositoryOwner.login + "/" + .headRepository.name + " #" + (.number|tostring) + " " + .title + "](" + .url + ")" | .result'
cat $DOTFILES_PATH/zsh/.my_functions/.tps.txt | while read line
do
local pr_list="$(gh pr list -R $line --assignee @me --search $search_syntax --json $json_fields --jq $jq_expression)"
if [ -n "$pr_list" ]; then
result+="$pr_list\n"
fi
done
# なにもないとき
if [[ $result == '' ]]; then
result+="- None"
fi
echo -n $result
}
dotfiles/zsh/.my_functions/.tps.txt
出力の対象にしたいディレクトリを指定。
username/dotfiles
username/hoge
username/hogehogehoge
使い方
# gh をインストール
$ brew install gh
$ pwd
/Users/username/dotfiles
# zsh/.my_functions/.tps.zshrc の読み込み
$ source zsh/.my_functions/.tps.zshrc
$ tps
## DONE
- [username/dotfiles #73 tps の追加](https://github.com/username/dotfiles/pull/73)
- [username/hogehogehoge #3 hogehoge](https://github.com/username/hogehogehoge/pull/3)
## WIP
- None
学び
a = b
だとエラーになるので、a=b
と書く
ファイルの中身を出力して、1 行ずつ処理
空文字判定
時間指定
- zsh date unix time (epoch time) を自由自在に出力する | typememo.jp
--date '6 hour ago'
6 時間前- date コマンドの使い方: UNIX/Linux の部屋
$ gh pr list
例: closed
のプルリクエストを検索
$ gh pr list --search "is:closed"
Showing 2 of 2 pull requests in username/dotfiles that match your search
#2 hogehoge した feature/hogehoge
#1 hoge した feature/hoge
使ったオプション
--asignee @me
- 自分がアサインされているプルリクエストのみ
--search
is:merged
: マージされているis:unmerged
: マージされていないupdated:>=???
: ???以降に更新
--json
- 出力したいデータを選択する
--jq
- 必ず
--json
と一緒に使う --json
で出力したものをjq
で加工するイメージ
- 必ず