mirror of
				https://github.com/vyos/vyos-documentation.git
				synced 2025-10-26 08:41:46 +01:00 
			
		
		
		
	
		
			
				
	
	
		
			109 lines
		
	
	
		
			3.4 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			109 lines
		
	
	
		
			3.4 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://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': '1.3 Equuleus',
 | |
|         'filename': 'docs/changelog/1.3.rst',
 | |
|         'tasks': [],
 | |
|         'releasenotes': []
 | |
|     },
 | |
|     'current': {
 | |
|         'phid': 'PHID-PROJ-m4utvy456e2shcprpq3b',
 | |
|         'name': '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"
 | |
| 
 | |
|     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']}\n"
 | |
|     
 | |
|     f = open(projects[project]['filename'], "w")
 | |
|     f.write(rst_text)
 | |
|     f.close()
 |