funkwhale/scripts/get-contributions-stats.py

117 wiersze
3.1 KiB
Python

import argparse
import requests
import os
GITLAB_URL = "https://dev.funkwhale.audio"
GITLAB_PROJECT_ID = 17
WEBLATE_URL = "https://translate.funkwhale.audio"
WEBLATE_COMPONENT_ID = "funkwhale/front"
def get_issues(next_release):
url = GITLAB_URL + "/api/v4/issues"
while url:
response = requests.get(
url,
params={"per_page": 20, "milestone": next_release, "scope": "all"},
headers={"PRIVATE-TOKEN": os.environ["PRIVATE_TOKEN"]},
)
response.raise_for_status()
yield from response.json()
if "next" in response.links:
url = response.links["next"]["url"]
else:
url = None
def get_merge_requests(next_release):
url = GITLAB_URL + "/api/v4/merge_requests"
while url:
response = requests.get(
url,
params={"per_page": 20, "milestone": next_release, "scope": "all"},
headers={"PRIVATE-TOKEN": os.environ["PRIVATE_TOKEN"]},
)
response.raise_for_status()
yield from response.json()
if "next" in response.links:
url = response.links["next"]["url"]
else:
url = None
def get_participants(project_id, issue_iid, object_type="issues"):
if object_type not in ["issues", "merge_requests"]:
raise ValueError("object_type needs to be `issues` or `merge_requests`")
url = GITLAB_URL + "/api/v4/projects/{}/{}/{}/participants".format(
project_id, object_type, issue_iid
)
response = requests.get(
url,
params={"per_page": 100},
headers={"PRIVATE-TOKEN": os.environ["PRIVATE_TOKEN"]},
)
response.raise_for_status()
participants = []
for participant in response.json():
participants.append(participant["name"])
return participants
def clear_list(inList):
outList = list(dict.fromkeys(inList))
try:
outList.remove("funkwhale-bot")
except:
pass
try:
outList.remove("weblate (bot)")
except:
pass
outList.sort()
return outList
def main():
if "PRIVATE_TOKEN" not in os.environ:
print("Please configure an Gitlab Access token in $PRIVATE_TOKEN")
return
parser = argparse.ArgumentParser()
parser.add_argument("next_tag")
args = parser.parse_args()
issues = get_issues(args.next_tag)
mrs = get_merge_requests(args.next_tag)
print("\nContributors to our Issues:\n")
issue_participants = []
for issue in issues:
participants = get_participants(issue["project_id"], issue["iid"])
issue_participants.extend(participants)
issue_participants = clear_list(issue_participants)
for contributor in issue_participants:
print(contributor)
print("\nContributors to our Merge Requests:\n")
mr_participants = []
for mr in mrs:
participants = get_participants(mr["project_id"], mr["iid"], "merge_requests")
mr_participants.extend(participants)
mr_participants = clear_list(mr_participants)
for contributor in mr_participants:
print(contributor)
return
if __name__ == "__main__":
main()