mirror of
https://github.com/vyos/vyos-documentation.git
synced 2025-10-26 01:31:44 +02:00
117 lines
3.6 KiB
Python
117 lines
3.6 KiB
Python
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://vyos.dev/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'])
|
|
'''
|
|
|
|
# find phid here https://vyos.dev/conduit/method/project.query/
|
|
projects = {
|
|
'equuleus': {
|
|
'phid': 'PHID-PROJ-zu26ui4vbmvykpjtepij',
|
|
'name': '1.3 Equuleus',
|
|
'filename': 'docs/changelog/1.3.rst',
|
|
'tasks': [],
|
|
'releasenotes': []
|
|
},
|
|
'sagitta': {
|
|
'phid': 'PHID-PROJ-m4utvy456e2shcprpq3b',
|
|
'name': '1.4 Sagitta',
|
|
'filename': 'docs/changelog/1.4.rst',
|
|
'tasks': [],
|
|
'releasenotes': []
|
|
},
|
|
'circinus': {
|
|
'phid': 'PHID-PROJ-cfi33xi3uijxyjsxoqzv',
|
|
'name': '1.5 Circinus',
|
|
'filename': 'docs/changelog/1.5.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"
|
|
|
|
rst_text += "\n"
|
|
rst_text += "..\n"
|
|
rst_text += " Please don't add anything by hand.\n"
|
|
rst_text += " This file is managed by the script:\n"
|
|
rst_text += " _ext/releasenotes.py\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'].strip()}``\n"
|
|
|
|
f = open(projects[project]['filename'], "w")
|
|
f.write(rst_text)
|
|
f.close()
|