1
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 3 years have passed since last update.

GitHub APIを使ってPRのCreateからMergeまでの時間を取得する

Last updated at Posted at 2021-06-12

やりたい事

レビュー待ちで、作業が滞ることがあり、改善の第一歩としてPRの時間を見える化する。
見える化の為に、PRのCreateからMergeまでの時間を取得するツールを作成する。

制限事項

  • 最終的には、期間を指定して、その期間内の平均値を出すようにするが、この記事ではPR指定で時間を取得している。
  • 取得する期間は営業日を考慮したものが好ましいが、この記事では考慮していない。

ツール

下記のGitHub APIを使ってPRの情報を取得する。

https://api.github.com/repos/{owner}/{repo}/pulls/{pull_number}

上記のレスポンスには、PRの作成された日時とマージされた日時が含まれるため、その差を計算する事で、時間を取得しています。

また、プライベートリポジトリにも対応できるように、Personal access tokensも設定できるようにしました。
ツールについては、昔少しかじったPythonで作成してみました。

GetElapsedTimeOfPr.py
import urllib.request
import json
import ssl
import datetime
import sys

argvs = sys.argv
url = argvs[1]
if len(argvs) > 2:
  token = argvs[2]
else:
  token = ''

ssl._create_default_https_context = ssl._create_unverified_context
req = urllib.request.Request(url)
if len(token) > 0:
  req.add_header('Authorization', 'token {}'.format(token))

with urllib.request.urlopen(req) as res:
  res_str = res.read().decode('utf-8')

json_str = json.loads(res_str)
KEY_TITLE = 'title'
KEY_CREATED_AT = 'created_at'
KEY_MERGED_AT = 'merged_at'
print('title:{}'.format(json_str[KEY_TITLE]))
print('created_at:{} '.format(json_str[KEY_CREATED_AT]))
print('merged_at:{}'.format(json_str[KEY_MERGED_AT]))

TIME_FORMAT = '%Y-%m-%dT%H:%M:%SZ'
created_dt = datetime.datetime.strptime(json_str[KEY_CREATED_AT], TIME_FORMAT)
merged_dt = datetime.datetime.strptime(json_str[KEY_MERGED_AT], TIME_FORMAT)
elapsed_time = merged_dt - created_dt
print('Elapsed time:{}h'.format(elapsed_time.total_seconds() // 3600))

使い方

python3 GetElapsedTimeOfPr.py https://api.github.com/repos/{owner}/{repo}/pulls/{pull_number} {token}

参考

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