如何计算用户在属于组织的任何回购协议上发出的拉取请求?
How to get count of pull requests made by a user on any repo belonging to an organization?
我正在尝试开发一个评级系统,该系统可以列出 GitHub 上对我的组织贡献最大的个人。我正在尝试通过计算用户在任何组织的回购中创建的“合并”拉取请求的数量来做到这一点。
我对 GitHub API 比较熟悉,但我很难确定要发出的正确请求。任何帮助将不胜感激。谢谢你们。另外,如果以这种方式计算的贡献也包括私人回购中的贡献,那就更好了。
PS:我不想使用提交次数作为计数,因为这不是一个精确的衡量标准,因为在开发一项功能时,一些用户会一次提交一个文件,而另一些用户会提交在创建了一堆之后。所以,请不要建议。
此外,还有无效的拉取请求,或者一些已经过时的请求,我不想将它们计入贡献数量。
您可以使用 search query 来查找问题:
- 类型
pr
: type:pr
- 作者:
author:{some user}
- 合并:
is:merged
- 在特定组织中:
org:{some org}
org:mui-org author:eps1lon type:pr is:merged
呼叫将是:
https://api.github.com/search/issues?q=org:mui-org%20author:eps1lon%20type:pr%20is:merged
curl -s "https://api.github.com/search/issues?q=org:mui-org%20author:eps1lon%20type:pr%20is:merged" | \
jq '.total_count'
输出:
715
您可以使用 GraphQL API 来 :
- 获取您组织中的用户列表
- 使用 aliases 为每个用户动态构建请求以执行搜索查询
所以你最终只有 2 个请求
python中的示例:
import requests
token = "YOUR_TOKEN"
org = "mui-org"
userQuery = """
{
organization(login: "%s"){
membersWithRole(first: 100){
nodes {
login
}
}
}
}
"""
pullRequestQuery = """
%s: search(query: "org:%s author:%s type:pr is:merged", type: ISSUE){
issueCount
}
"""
def makeCall(query):
r = requests.post("https://api.github.com/graphql",
headers = {
"Authorization": f"Bearer {token}"
},
json = {
"query": query
}
)
return r.json()["data"]
userList = makeCall(userQuery % org)
#build a list of keys matching user (user0: johndoe ....)
keyList = {}
for idx, user in enumerate(userList["organization"]["membersWithRole"]["nodes"]):
keyList[f"user{idx}"] = user["login"]
#build the query
builtQuery = "".join([
pullRequestQuery % (t, org, keyList[t])
for t in keyList.keys()
])
result = makeCall("{%s}" % builtQuery)
#match the original user login
stats = {}
for it in result.keys():
stats[keyList[it]] = result[it]["issueCount"]
print(stats)
输出:
{'kof': 1, 'pelotom': 57, 'mbrookes': 487, 'dtassone': 78, 'sebald': 29, 'hai-cea': 14, 'kgregory': 21, 'oliviertassinari': 2077, 'merceyz': 70, 'nathanmarks': 80, 'mnajdova': 56, 'leMaik': 45, 'DanailH': 4, 'alitaheri': 98, 'm2mathew': 6, 'eps1lon': 715, 'DDDDDanica': 13, 'joshwooding': 110, 'dimitropoulos': 2, 'dmtrKovalenko': 352}
您可以安装 github app pr count 以查看您组织中每个人在回购中的 PR 计数。它提供有关代码贡献的排行榜和其他 objective 数据。
我正在尝试开发一个评级系统,该系统可以列出 GitHub 上对我的组织贡献最大的个人。我正在尝试通过计算用户在任何组织的回购中创建的“合并”拉取请求的数量来做到这一点。
我对 GitHub API 比较熟悉,但我很难确定要发出的正确请求。任何帮助将不胜感激。谢谢你们。另外,如果以这种方式计算的贡献也包括私人回购中的贡献,那就更好了。
PS:我不想使用提交次数作为计数,因为这不是一个精确的衡量标准,因为在开发一项功能时,一些用户会一次提交一个文件,而另一些用户会提交在创建了一堆之后。所以,请不要建议。
此外,还有无效的拉取请求,或者一些已经过时的请求,我不想将它们计入贡献数量。
您可以使用 search query 来查找问题:
- 类型
pr
:type:pr
- 作者:
author:{some user}
- 合并:
is:merged
- 在特定组织中:
org:{some org}
org:mui-org author:eps1lon type:pr is:merged
呼叫将是:
https://api.github.com/search/issues?q=org:mui-org%20author:eps1lon%20type:pr%20is:merged
curl -s "https://api.github.com/search/issues?q=org:mui-org%20author:eps1lon%20type:pr%20is:merged" | \
jq '.total_count'
输出:
715
您可以使用 GraphQL API 来 :
- 获取您组织中的用户列表
- 使用 aliases 为每个用户动态构建请求以执行搜索查询
所以你最终只有 2 个请求
python中的示例:
import requests
token = "YOUR_TOKEN"
org = "mui-org"
userQuery = """
{
organization(login: "%s"){
membersWithRole(first: 100){
nodes {
login
}
}
}
}
"""
pullRequestQuery = """
%s: search(query: "org:%s author:%s type:pr is:merged", type: ISSUE){
issueCount
}
"""
def makeCall(query):
r = requests.post("https://api.github.com/graphql",
headers = {
"Authorization": f"Bearer {token}"
},
json = {
"query": query
}
)
return r.json()["data"]
userList = makeCall(userQuery % org)
#build a list of keys matching user (user0: johndoe ....)
keyList = {}
for idx, user in enumerate(userList["organization"]["membersWithRole"]["nodes"]):
keyList[f"user{idx}"] = user["login"]
#build the query
builtQuery = "".join([
pullRequestQuery % (t, org, keyList[t])
for t in keyList.keys()
])
result = makeCall("{%s}" % builtQuery)
#match the original user login
stats = {}
for it in result.keys():
stats[keyList[it]] = result[it]["issueCount"]
print(stats)
输出:
{'kof': 1, 'pelotom': 57, 'mbrookes': 487, 'dtassone': 78, 'sebald': 29, 'hai-cea': 14, 'kgregory': 21, 'oliviertassinari': 2077, 'merceyz': 70, 'nathanmarks': 80, 'mnajdova': 56, 'leMaik': 45, 'DanailH': 4, 'alitaheri': 98, 'm2mathew': 6, 'eps1lon': 715, 'DDDDDanica': 13, 'joshwooding': 110, 'dimitropoulos': 2, 'dmtrKovalenko': 352}
您可以安装 github app pr count 以查看您组织中每个人在回购中的 PR 计数。它提供有关代码贡献的排行榜和其他 objective 数据。