summaryrefslogtreecommitdiff
path: root/docs/_ext/releasenotes.py
diff options
context:
space:
mode:
authorrebortg <github@ghlr.de>2021-02-10 20:45:48 +0100
committerrebortg <github@ghlr.de>2021-02-10 21:33:18 +0100
commit58860fe519604bbabf4665e836486f4d06806a3f (patch)
tree5dfbe6ddfb5c2ce6e19cc86964cf1803f81ce80c /docs/_ext/releasenotes.py
parentfd387540352fb47eec7479a6747e764a558ba1ba (diff)
downloadvyos-documentation-58860fe519604bbabf4665e836486f4d06806a3f.tar.gz
vyos-documentation-58860fe519604bbabf4665e836486f4d06806a3f.zip
Releasenotes: add weekly releasenote create script
Diffstat (limited to 'docs/_ext/releasenotes.py')
-rw-r--r--docs/_ext/releasenotes.py102
1 files changed, 102 insertions, 0 deletions
diff --git a/docs/_ext/releasenotes.py b/docs/_ext/releasenotes.py
new file mode 100644
index 00000000..4bc05e1b
--- /dev/null
+++ b/docs/_ext/releasenotes.py
@@ -0,0 +1,102 @@
+from datetime import datetime
+from phabricator import Phabricator
+import argparse
+
+parser = argparse.ArgumentParser()
+parser.add_argument("-t", "--token", type=str, help="API token", required=True)
+parser.add_argument("-b", "--branch", nargs="+", help="List of github branches", required=True)
+
+args = parser.parse_args()
+
+
+phab = Phabricator(host='https://phabricator.vyos.net/api/', token=args.token)
+
+'''
+# code to find new PHIDs
+# show project ids
+projects = phab.project.query(limit=200)
+for project in projects.response['data']:
+ print(projects.response['data'][project]['phid'], projects.response['data'][project]['name'])
+'''
+
+projects = {
+ 'equuleus': {
+ 'phid': 'PHID-PROJ-zu26ui4vbmvykpjtepij',
+ 'name': 'VyOS 1.3 Equuleus',
+ 'filename': 'docs/changelog/1.3.rst',
+ 'tasks': [],
+ 'releasenotes': []
+ },
+ 'current': {
+ 'phid': 'PHID-PROJ-m4utvy456e2shcprpq3b',
+ 'name': 'VyOS 1.4 Sagitta',
+ 'filename': 'docs/changelog/1.4.rst',
+ 'tasks': [],
+ 'releasenotes': []
+ }
+}
+
+for b in args.branch:
+ if b not in projects.keys():
+ raise Exception('given branch not defined')
+
+# get project tasks
+
+for project in projects:
+ if project not in args.branch:
+ continue
+
+ _after = None
+
+ # get tasks from API
+ while True:
+ #print(f'get {_after}')
+ _tasks = phab.maniphest.search(
+ constraints={
+ 'projects': [projects[project]['phid']],
+ #'statuses': ['closed'],
+ },
+ after=_after)
+
+ projects[project]['tasks'].extend(_tasks.response['data'])
+ _after = _tasks.response['cursor']['after']
+ if _after is None:
+ break
+
+ # prepare tasks for release notes
+ for task in projects[project]['tasks']:
+ if task['fields']['status']['value'] in ['resolved']:
+ #_info = phab.maniphest.info(task_id=task['id'])
+ #_info = _info.response
+ releasenote = {}
+ releasenote['type'] = task['fields']['subtype']
+ date = datetime.fromtimestamp(task['fields']['dateClosed'])
+ releasenote['closedate'] = date.strftime('%Y%m%d')
+ releasenote['name'] = task['fields']['name']
+ releasenote['id'] = task['id']
+ #print(f"{project}: {task['fields']['status']} {task['id']}")
+ projects[project]['releasenotes'].append(releasenote)
+
+ projects[project]['releasenotes'] = sorted(
+ projects[project]['releasenotes'], key = lambda x: x['closedate'],
+ reverse=True
+ )
+
+ rst_text = "#" * len(projects[project]['name'])
+ rst_text += f"\n{projects[project]['name']}\n"
+ rst_text += "#" * len(projects[project]['name'])
+ rst_text += "\n"
+
+ date = None
+ for rn in projects[project]['releasenotes']:
+ if date != rn['closedate']:
+ rst_text += "\n\n"
+ rst_text += f"{rn['closedate']}\n"
+ underline = '=' * len(rn['closedate'])
+ rst_text += f"{underline}\n\n"
+ date = rn['closedate']
+ rst_text += f"* :vytask:`T{rn['id']}` ({rn['type']}): {rn['name']}\n"
+
+ f = open(projects[project]['filename'], "w")
+ f.write(rst_text)
+ f.close()