Generate an initial changelog and a script to generate it
This commit is contained in:
813
docs/ChangeLog/20210228.md
Normal file
813
docs/ChangeLog/20210228.md
Normal file
File diff suppressed because it is too large
Load Diff
@ -1,5 +1,6 @@
|
||||
from . import api
|
||||
from . import config_h
|
||||
from . import develop_changelog
|
||||
from . import docs
|
||||
from . import info_json
|
||||
from . import layouts
|
||||
|
77
lib/python/qmk/cli/generate/develop_changelog.py
Executable file
77
lib/python/qmk/cli/generate/develop_changelog.py
Executable file
@ -0,0 +1,77 @@
|
||||
"""Generate the changelog for develop.
|
||||
|
||||
This requires the github module:
|
||||
pip3 install PyGithub
|
||||
"""
|
||||
from datetime import datetime
|
||||
from pathlib import Path
|
||||
|
||||
import yaml
|
||||
from milc import cli
|
||||
from github import Github
|
||||
|
||||
|
||||
def pr_body(text):
|
||||
"""Returns the description from a PR body.
|
||||
"""
|
||||
lines = []
|
||||
found = False
|
||||
|
||||
for line in text.split('\n'):
|
||||
if line.startswith('## Description'):
|
||||
found = True
|
||||
continue
|
||||
|
||||
if line.startswith('## Issues Fixed'):
|
||||
found = True
|
||||
lines.append('##### Issues Fixed or Closed by This PR')
|
||||
continue
|
||||
|
||||
if not found:
|
||||
continue
|
||||
|
||||
if line.startswith('##'):
|
||||
found = False
|
||||
continue
|
||||
|
||||
lines.append(line.rstrip())
|
||||
|
||||
new_text = '\n'.join(lines)
|
||||
|
||||
return new_text.strip()
|
||||
|
||||
|
||||
@cli.subcommand('Get a list of PRs for develop.', hidden=True)
|
||||
def generate_develop_changelog(cli):
|
||||
# Setup the github api
|
||||
hub_config = yaml.safe_load(Path('~/.config/hub').expanduser().open())
|
||||
github_token = hub_config['github.com'][0]['oauth_token']
|
||||
github = Github(github_token)
|
||||
|
||||
# Find our branchpoint
|
||||
master_revs = cli.run(['git', 'rev-list', '--first-parent', 'master'])
|
||||
develop_revs = cli.run(['git', 'rev-list', '--first-parent', 'develop'])
|
||||
master_commits = master_revs.stdout.split('\n')
|
||||
develop_commits = develop_revs.stdout.split('\n')
|
||||
|
||||
first_commit = None
|
||||
for commit in develop_commits:
|
||||
if commit in master_commits:
|
||||
branchpoint = commit
|
||||
break
|
||||
|
||||
if not branchpoint:
|
||||
cli.log.error('Could not find branchpoint!')
|
||||
exit(1)
|
||||
|
||||
# Find the time of our branchpoint
|
||||
repo = github.get_repo('qmk/qmk_firmware')
|
||||
bp = repo.get_commit(branchpoint)
|
||||
last_modified = datetime.strptime(bp.last_modified, '%a, %d %b %Y %H:%M:%S %Z')
|
||||
|
||||
# Get a list of PR's targetting develop since last_modified
|
||||
for pr in repo.get_pulls(state='closed', base='develop'):
|
||||
if pr.merged and pr.merged_at > last_modified:
|
||||
print(f'#### {pr.title} ([#{pr.number}](https://github.com/qmk/qmk_firmware/pull/{pr.number}))')
|
||||
print()
|
||||
print(pr_body(pr.body))
|
Reference in New Issue
Block a user