📌
[GraphQL][Github] createdAtとpublishedAtの違いを検証してみた
この記事で言いたいこと
この検証の限りは違いなし。
createdAtとpublishedAtは同じ日時を示していた。
はじめに
開発チームの生産性測定の一貫として、GithubのPR作成日時とcloseした時間の差分の平均を測定しようと思い立った。
そこでGithubのGraphQL APIを使って、実際に上記を試そうと思ったが、API DocumentのObjects - pullRequestの項目を読むとそれらしき日時がたくさんあった。
- mergedAt : マージした日時。
- closedAt : closeした日時、これは採用。
- createdAt : PR作成日時
- publishedAt : PRの公開日時?ドラフト -> オープンにした日時?
publishedAtのAPIDocumentは以下の記述となっている。
publishedAt (DateTime)
Identifies when the comment was published at.
publishedAtがいまいち英語のニュアンスが掴みづらい。
commentが公開されたとは。自らのPRの本文もcomment扱いなのか、他者からのcommentがトリガーなのか。
ということでpublishedAtについて、検証してみた。
やったこと
開発環境
- vscode
- python3
事前準備
- pip3 install gql
- githubからprivateなaccess token取得
検証方法
まず以下の3種類のPRを作成
- publicリポジトリでPRをDraftで作成(PR1)
- publicリポジトリでPRをDraftで作成 -> Openへ変更(PR2)
- publicリポジトリでPRをDraftで作成 -> Openへ変更、自らコメントを付ける(PR3)
次のスクリプトでGraphQLのAPIを叩いて、それぞれのpublishedAtの日付を確認する。
get_github_info_test_publishedAt.py
from gql import gql, Client
from gql.transport.requests import RequestsHTTPTransport
import json
test_publishedAt_query="""
query {
repository(owner:"masakid", name:"github-sample") {
pullRequests(last: 10) {
nodes {
title
url
createdAt
publishedAt
closedAt
}
}
}
}
"""
# token
with open('token_file.txt', 'r') as f:
token = f.read().strip()
# トランスポートの設定
transport = RequestsHTTPTransport(
url='https://api.github.com/graphql',
headers={"Authorization": f"bearer {token}"},
use_json=True,
)
def post(query):
# クライアントインスタンスを作成
client = Client(transport=transport, fetch_schema_from_transport=True)
# クエリを実行して結果を取得
result = client.execute(query)
# 実行結果を出力
with open("test_publishedAt_query.txt", 'w', encoding='utf-8') as f:
f.write(json.dumps(result, indent=4, ensure_ascii=False))
return result
def main():
query = gql(test_publishedAt_query)
post(query)
if __name__ == '__main__':
main()
結果
それぞれのPRでcreatedAtとpublishedAtは同じ日時となっていた。
{
"repository": {
"pullRequests": {
"nodes": [
{
"title": "PR1 : add file",
"url": "https://github.com/masakid/github-sample/pull/1",
"createdAt": "2024-03-10T06:38:47Z",
"publishedAt": "2024-03-10T06:38:47Z",
"closedAt": null
},
{
"title": "PR2 : add file",
"url": "https://github.com/masakid/github-sample/pull/2",
"createdAt": "2024-03-10T13:09:55Z",
"publishedAt": "2024-03-10T13:09:55Z",
"closedAt": null
},
{
"title": "PR3 : add file",
"url": "https://github.com/masakid/github-sample/pull/3",
"createdAt": "2024-03-10T13:10:20Z",
"publishedAt": "2024-03-10T13:10:20Z",
"closedAt": null
}
]
}
}
}
まとめ
少なくともPRのDraft、OpenではcreatedAtとpublishedAtは変わらず、
当初の目的である「GithubのPR作成日時とcloseした時間の差分」については
どっちを使ってもいいということがわかった。
最後に
もし有識者の方がいれば、どんなときにcreatedAtとpublishedAtが変わるのか
教えていただけると助かります!
Discussion