summaryrefslogtreecommitdiff
path: root/scripts
diff options
context:
space:
mode:
Diffstat (limited to 'scripts')
-rw-r--r--scripts/createContributors.py90
-rw-r--r--scripts/getChangelog.py90
-rw-r--r--scripts/makeRelease.sh4
3 files changed, 184 insertions, 0 deletions
diff --git a/scripts/createContributors.py b/scripts/createContributors.py
new file mode 100644
index 000000000..fba19c793
--- /dev/null
+++ b/scripts/createContributors.py
@@ -0,0 +1,90 @@
+#!/usr/bin/env python3
+import pycountry
+import requests
+import configparser
+import os
+
+contributorsFile = open("CONTRIBUTORS.md", "w")
+
+###### Developers #####
+MAINTAINERS = ['ByteHamster', 'keunes']
+FORMER_MAINTAINERS = ['mfietz', 'TomHennen']
+
+csvFile = open("app/src/main/assets/developers.csv", "w")
+contributorsFile.write('# Developers\n\n')
+page = 1
+hasMore = True
+first = True
+while hasMore:
+ nextPage = ('https://api.github.com/repos/AntennaPod/AntennaPod/contributors'
+ + '?q=contributions&order=desc&per_page=100&page=' + str(page))
+ print("Loading " + nextPage)
+ json = requests.get(nextPage).json()
+ for contributor in json:
+ role = 'Contributor'
+ if contributor['login'] == 'danieloeh':
+ role = 'Original creator of AntennaPod (retired)'
+ elif contributor['login'] in MAINTAINERS:
+ role = 'Maintainer'
+ elif contributor['login'] in FORMER_MAINTAINERS:
+ role = 'Maintainer (retired)'
+ csvFile.write(contributor['login'].replace(";", "") + ';' + str(contributor['id']) + ';' + role + '\n')
+ if not first:
+ contributorsFile.write(', ')
+ first = False
+ contributorsFile.write('[' + contributor['login'] + '](https://github.com/' + contributor['login'] + ')')
+ page = page + 1
+ hasMore = len(json) > 0
+csvFile.close()
+
+###### Translators #####
+config = configparser.ConfigParser()
+config.read(os.path.expanduser("~") + '/.transifexrc')
+if 'https://www.transifex.com' in config and config['https://www.transifex.com']['username'] == 'api':
+ TRANSIFEX_TOKEN = config['https://www.transifex.com']['token']
+else:
+ TRANSIFEX_TOKEN = ""
+
+languages = dict()
+
+nextPage = 'https://rest.api.transifex.com/team_memberships?filter[organization]=o:antennapod'
+while nextPage is not None:
+ print("Loading " + nextPage)
+ r = requests.get(nextPage,
+ headers={'Authorization': 'Bearer ' + TRANSIFEX_TOKEN,
+ 'Accept': 'application/vnd.api+json'})
+ for item in r.json()['data']:
+ language = item['relationships']['language']['data']['id']
+ user = item['relationships']['user']['data']['id']
+ if not language in languages:
+ langCode = language.replace('l:', '')
+ try:
+ langName = pycountry.languages.lookup(langCode).name
+ except:
+ try:
+ langName = pycountry.languages.lookup(
+ langCode.split('_')[0]).name + ' (' + langCode + ')'
+ except:
+ langName = code
+ print('\033[91mLanguage code not found:' + langCode + '\033[0m')
+ languages[language] = {'name': langName, 'translators': []}
+ languages[language]['translators'].append(user.replace('u:', ''))
+ nextPage = r.json()['links']['next']
+
+languages = list(languages.values())
+languages.sort(key=lambda x : x['name'].lower())
+
+csvFile = open("app/src/main/assets/translators.csv", "w")
+contributorsFile.write('\n\n# Translators\n\n')
+contributorsFile.write('| Language | Translators |\n| :-- | :-- |\n')
+for language in languages:
+ translators = sorted(language['translators'], key=str.lower)
+ langName = language['name']
+ joinedTranslators = ', '.join(translators).replace(';', '')
+ contributorsFile.write('| ' + langName + ' | ' + joinedTranslators + ' |\n')
+ csvFile.write(langName + ';' + joinedTranslators + '\n')
+csvFile.close()
+contributorsFile.close()
+
+print('Done')
+
diff --git a/scripts/getChangelog.py b/scripts/getChangelog.py
new file mode 100644
index 000000000..cd02f3383
--- /dev/null
+++ b/scripts/getChangelog.py
@@ -0,0 +1,90 @@
+#!/usr/bin/env python3
+
+import requests
+import time
+import re
+
+REPO = "AntennaPod/AntennaPod"
+
+print("Hello, welcome to the AntennaPod PR list generator!")
+print("First, please enter your GitHub API token.")
+print("If you don't have one yet, create it at https://github.com/settings/tokens")
+
+def get_token():
+ TOKEN = ""
+ while not TOKEN:
+ TOKEN = input('Token: ').strip()
+ return TOKEN
+
+TOKEN = get_token()
+print("Grand, thank you! (" + TOKEN + " is noted)")
+
+print()
+print("Now, what do you want to compare?")
+print("Please enter a release code or branch")
+print("[default: latest GitHub release]")
+BASE = input('Base: ')
+if BASE == "":
+ response = requests.get("https://api.github.com/repos/" + REPO + "/releases/latest", headers={'Authorization': 'token ' + TOKEN})
+ while response.status_code == 401:
+ print("Error: Invalid GitHub API token.")
+ TOKEN = get_token()
+ response = requests.get("https://api.github.com/repos/" + REPO + "/releases/latest", headers={'Authorization': 'token ' + TOKEN})
+ release = response.json()
+ BASE = release["tag_name"]
+ print("Okido, latest release (" + BASE + ") it is!")
+else:
+ print("Noted")
+
+print()
+print("Then, what should be our endpoint?")
+print("[default: 'master']")
+HEAD = input('Head: ')
+if HEAD == "":
+ print("Righty, master it is!")
+ HEAD="master"
+else:
+ print("Roger that.")
+
+def print_seen():
+ print(" [already seen] " + pr_details["title"] + " (#" + str(pr_details["number"]) + ")")
+
+print()
+prsSeen = set()
+filename = BASE + " - " + HEAD + " changelog.csv"
+outputFile = open(filename, 'w')
+outputFile.write("Type,Merge date,URL,Title,Author,Type,Functionality group\n")
+commits = requests.get("https://api.github.com/repos/" + REPO + "/compare/" + BASE + "..." + HEAD, headers={'Authorization': 'token ' + TOKEN}).json()
+numCommits = len(commits["commits"])
+for i in range(numCommits):
+ sha = commits["commits"][i]["sha"]
+ commit = commits["commits"][i]
+ print("Commit "+ str(i+1) + " of " + str(numCommits))
+ if "Merge pull request #" in commit["commit"]["message"] or "Merge branch" in commit["commit"]["message"]:
+ print(" [is merge commit]")
+ continue
+ pr_match = re.search(r'\(#(\d{4})\)', commit["commit"]["message"])
+ if pr_match:
+ pr_number = pr_match.group(1)
+ if pr_number in prsSeen:
+ print_seen()
+ continue
+ pr_details = requests.get("https://api.github.com/repos/" + REPO + "/pulls/" + pr_number, headers={'Authorization': 'token ' + TOKEN}).json()
+ outputFile.write("PR," + pr_details["merged_at"] + "," + pr_details["html_url"] + ",\"" + pr_details["title"] + "\"," + pr_details["user"]["login"] + "\n")
+ print(" " + pr_details["title"] + " (#" + str(pr_details["number"]) + ")")
+ prsSeen.add(pr_number)
+ continue
+ time.sleep(1.5) # Avoid rate limit
+ prs = requests.get("https://api.github.com/search/issues?q=repo:" + REPO + "+type:pr+is:merged+" + sha, headers={'Authorization': 'token ' + TOKEN}).json()
+ if len(prs["items"]) == 0:
+ outputFile.write("Commit," + commit["commit"]["committer"]["date"] + "," + commit["html_url"] + ",\"" + commit["commit"]["message"].splitlines()[0] + "\"," + commit["committer"]["login"] + "\n")
+ print(" [orphan] " + commit["commit"]["message"].splitlines()[0])
+ continue
+ pr_details = prs["items"][0]
+ if pr_details["number"] in prsSeen:
+ print_seen()
+ continue
+ outputFile.write("PR," + pr_details["pull_request"]["merged_at"] + "," + pr_details["html_url"] + ",\"" + pr_details["title"] + "\"," + pr_details["user"]["login"] + "\n")
+ print(" " + pr_details["title"] + " (#" + str(pr_details["number"]) + ")")
+ prsSeen.add(pr_details["number"])
+outputFile.close()
diff --git a/scripts/makeRelease.sh b/scripts/makeRelease.sh
new file mode 100644
index 000000000..34c79f319
--- /dev/null
+++ b/scripts/makeRelease.sh
@@ -0,0 +1,4 @@
+#!/bin/sh
+
+curl -s https://raw.githubusercontent.com/AntennaPod/antennapod.github.io/master/_config.yml | yq -r ".languages[]" > ./app/src/main/assets/website-languages.txt
+python ./createContributors.py