kopia lustrzana https://dev.funkwhale.audio/funkwhale/funkwhale
117 wiersze
3.1 KiB
Python
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()
|