Skip to content

Instantly share code, notes, and snippets.

@sivel
Last active February 20, 2018 21:24
Show Gist options
  • Save sivel/534e3cf513fee1fdedc53f31edb249d0 to your computer and use it in GitHub Desktop.
Save sivel/534e3cf513fee1fdedc53f31edb249d0 to your computer and use it in GitHub Desktop.
Simple script that looks for issue/pr references in commit messages, and generates something like a changelog
#!/usr/bin/env python
import os
import re
import mistune # mistune
from github import Github # PyGithub
from argparse import ArgumentParser
MD_ITEM = '''
* **%s**
* [%s](%s)
'''
parser = ArgumentParser()
parser.add_argument('repo', help='Repository in the format of :owner/:repo')
parser.add_argument('--base', default='master',
help='Base branch to compare (default: %(default)s)')
parser.add_argument('--head', default='staging',
help='HEAD branch to compare (default: %(default)s)')
parser.add_argument('--token', default=os.getenv('GITHUB_TOKEN'),
help='Github Oauth Token (default: GITHUB_TOKEN')
parser.add_argument('--format', choices=('plain', 'markdown', 'html'),
default='plain',
help='Output format (default: %(default)s)')
args = parser.parse_args()
g = Github(base_url='https://api.github.com',
login_or_token=args.token,
per_page=100)
KEYWORD_RE = re.compile('#(\d+)', flags=re.I)
repo = g.get_repo(args.repo)
issues = set()
for c in repo.compare(args.base, args.head).commits:
message = c.commit.message
kw_matches = KEYWORD_RE.findall(message)
if kw_matches:
issues.update(kw_matches)
dups = []
out = []
for number in sorted(map(int, issues)):
number = int(number)
if number in dups:
continue
issue = repo.get_issue(number)
dups.append(issue.number)
if args.format == 'plain':
out.append('#%d %s' % (issue.number, issue.title))
else:
out.append(MD_ITEM % (issue.title, issue.html_url, issue.html_url))
dups.append(issue.number)
if args.format == 'html':
print(mistune.markdown('\n'.join(out)))
else:
print('\n'.join(out))
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment