GitHub Issuesの進捗一覧をワンライナーでサクッと取ってみた
はじめに
GitHub Issuesでのチケット管理を始めてから幾日か経ち、Pull-Requestのmergeと同時にissueが自動完了する手軽さはすごいなと感じているところです。
ただ、これまでの進捗報告用のマクロが流用できず、望んだ通りのフォーマットで都合いい感じにデータが取れるようなスニペットもなかなか落ちておらず、止む無くこしらえてみました。
GitHub Issuesへのapiアクセス
Issuesを一覧で取得するAPIが存在しており、今回はそれを利用しました。
Issues | GitHub Developer Guide
必要なのはPersonal Access Tokenの発行のみです。
今回欲しかったデータ
大体以下のデータさえ取っておけば振り返りには問題ないとしました。番号も取っているのは長いタイトルの読み上げを防ぐためです。
- number
- title
- state
- url
スニペット
6日前までに更新があったissueを取得しています。
% curl -X GET -u "$USERNAME:$PERSONAL_ACCESS_TOKEN" -H "Time-Zone: Asia/Tokyo" https://api.github.com/repos/:user/:repos/issues\?state=all | \ jq -r '.[] | if (.updated_at|fromdate) > now - (60 * 60 * 24 * 6) then .title = "- (" + .state + (if .pull_request == null then "-pr" else "-issue" end) + ") No." + (.number|tostring) + " " + .title + " " + .html_url else empty end | .title' - (open-issue) No.142 ワンライナーをこしらえる https://github.com/repos/USER/REPOS/issues/111 - (closed-pr) No.139 READMEを書き直す https://github.com/repos/USER/REPOS/issues/110
このAPIで気をつける点はissueとpull-requestをひとまとめにして返しているところです。issueには.pull_request
のKeyが存在しないため、null判定となるかどうかでprとissueの出し分けをしています。
また、state=all
を付けることでOpen状態のみ取れる状況を回避しています。パラメータ部分のクエスチョンをエスケープさせないとエラーとなるため要注意です。
あとがき
色々と想定外のハマりどころはあったものの、大体求めていたフォーマットに出来ました。jqが色々な加工に対応していることに驚きつつも、あれこれひねる程可読性が落ちていくのは課題だなと感じています。
markdown形式でサクッと一覧を作りたい人の参考になれば幸いです。