Added contributions script and contributors to the changelog
This commit is contained in:
parent
e99b7703b9
commit
dfef5e3850
30
CHANGELOG
30
CHANGELOG
|
@ -199,6 +199,36 @@ Documentation:
|
||||||
|
|
||||||
- Document how to use Redis over unix sockets (#770)
|
- Document how to use Redis over unix sockets (#770)
|
||||||
|
|
||||||
|
Contributors to this release (commiters and translators):
|
||||||
|
|
||||||
|
- Ale London
|
||||||
|
- Alexander
|
||||||
|
- Ben Finney
|
||||||
|
- ButterflyOfFire
|
||||||
|
- Ciarán Ainsworth
|
||||||
|
- Damien Nicolas
|
||||||
|
- Daniele Lira Mereb
|
||||||
|
- Eliot Berriot
|
||||||
|
- Elza Gelez
|
||||||
|
- gerry_the_hat
|
||||||
|
- gordon
|
||||||
|
- interfect
|
||||||
|
- jake
|
||||||
|
- Jee
|
||||||
|
- jovuit
|
||||||
|
- Mélanie Chauvel
|
||||||
|
- nouts
|
||||||
|
- Pierrick
|
||||||
|
- Qasim Ali
|
||||||
|
- Quentí
|
||||||
|
- Renon
|
||||||
|
- Rodrigo Leite
|
||||||
|
- Sylke Vicious
|
||||||
|
- Thomas Brockmöller
|
||||||
|
- Tixie
|
||||||
|
- Vierkantor
|
||||||
|
- Von
|
||||||
|
- Zach Halasz
|
||||||
|
|
||||||
0.18.3 (2019-03-21)
|
0.18.3 (2019-03-21)
|
||||||
-------------------
|
-------------------
|
||||||
|
|
|
@ -0,0 +1,114 @@
|
||||||
|
import argparse
|
||||||
|
import requests
|
||||||
|
|
||||||
|
GITLAB_URL = "https://dev.funkwhale.audio"
|
||||||
|
GITLAB_PROJECT_ID = 17
|
||||||
|
WEBLATE_URL = "https://translate.funkwhale.audio"
|
||||||
|
WEBLATE_COMPONENT_ID = "funkwhale/front"
|
||||||
|
|
||||||
|
|
||||||
|
def get_commits(ref_name, since):
|
||||||
|
url = GITLAB_URL + "/api/v4/projects/{}/repository/commits".format(
|
||||||
|
GITLAB_PROJECT_ID
|
||||||
|
)
|
||||||
|
while url:
|
||||||
|
response = requests.get(
|
||||||
|
url, params={"since": since, "ref_name": ref_name, "per_page": 100}
|
||||||
|
)
|
||||||
|
response.raise_for_status()
|
||||||
|
|
||||||
|
yield from response.json()
|
||||||
|
|
||||||
|
if "next" in response.links:
|
||||||
|
url = response.links["next"]["url"]
|
||||||
|
else:
|
||||||
|
url = None
|
||||||
|
|
||||||
|
|
||||||
|
def get_commit_stats(commits):
|
||||||
|
stats = {"total": 0, "commiters": {}}
|
||||||
|
for commit in commits:
|
||||||
|
if commit["message"].startswith("Merge branch "):
|
||||||
|
continue
|
||||||
|
stats["total"] += 1
|
||||||
|
try:
|
||||||
|
stats["commiters"][commit["author_name"]] += 1
|
||||||
|
except KeyError:
|
||||||
|
stats["commiters"][commit["author_name"]] = 1
|
||||||
|
|
||||||
|
return stats
|
||||||
|
|
||||||
|
|
||||||
|
def get_tag_date(ref):
|
||||||
|
url = GITLAB_URL + "/api/v4/projects/{}/repository/tags/{}".format(
|
||||||
|
GITLAB_PROJECT_ID, ref
|
||||||
|
)
|
||||||
|
response = requests.get(url)
|
||||||
|
response.raise_for_status()
|
||||||
|
data = response.json()
|
||||||
|
return data["commit"]["committed_date"]
|
||||||
|
|
||||||
|
|
||||||
|
def get_translations(since):
|
||||||
|
url = WEBLATE_URL + "/api/components/{}/changes/".format(WEBLATE_COMPONENT_ID)
|
||||||
|
while url:
|
||||||
|
response = requests.get(url)
|
||||||
|
response.raise_for_status()
|
||||||
|
if "next" in response.json():
|
||||||
|
url = response.json()["next"]
|
||||||
|
else:
|
||||||
|
url = None
|
||||||
|
for t in response.json()["results"]:
|
||||||
|
if t["timestamp"] < since:
|
||||||
|
url = None
|
||||||
|
break
|
||||||
|
|
||||||
|
yield t
|
||||||
|
|
||||||
|
|
||||||
|
def get_translations_stats(translations):
|
||||||
|
stats = {"total": 0, "translators": {}}
|
||||||
|
for translation in translations:
|
||||||
|
if not translation["author"]:
|
||||||
|
continue
|
||||||
|
print("translation", translation["action_name"])
|
||||||
|
continue
|
||||||
|
stats["total"] += 1
|
||||||
|
try:
|
||||||
|
stats["translators"][translation["author"]] += 1
|
||||||
|
except KeyError:
|
||||||
|
stats["translators"][translation["author"]] = 1
|
||||||
|
|
||||||
|
return stats
|
||||||
|
|
||||||
|
|
||||||
|
def main():
|
||||||
|
parser = argparse.ArgumentParser()
|
||||||
|
parser.add_argument("ref_name")
|
||||||
|
parser.add_argument("last_tag")
|
||||||
|
args = parser.parse_args()
|
||||||
|
since = get_tag_date(args.last_tag)
|
||||||
|
commits = get_commits(args.ref_name, since)
|
||||||
|
commits_stats = get_commit_stats(commits)
|
||||||
|
|
||||||
|
commiter_names = commits_stats["commiters"].keys()
|
||||||
|
print("Commiters:")
|
||||||
|
for commiter in sorted(commits_stats["commiters"].keys(), key=lambda v: v.upper()):
|
||||||
|
print(commiter)
|
||||||
|
translations = get_translations(since)
|
||||||
|
translations_stats = get_translations_stats(translations)
|
||||||
|
translators_ids = sorted(translations_stats["translators"].keys())
|
||||||
|
# There is no way to query user/author info via weblate API and we need the names…
|
||||||
|
print(
|
||||||
|
"Execute the following SQL query on the weblate server to get the translators names:"
|
||||||
|
)
|
||||||
|
print("$ weblate dbshell")
|
||||||
|
print(
|
||||||
|
"SELECT full_name FROM weblate_auth_user WHERE id in ({});".format(
|
||||||
|
", ".join([str(i) for i in translators_ids])
|
||||||
|
)
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
main()
|
Loading…
Reference in New Issue