"""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))