mirror of
https://github.com/xemu-project/xemu-website.git
synced 2024-11-26 21:00:33 +00:00
List top blocking issues
This commit is contained in:
parent
cf6cd08789
commit
5b3741b16a
47
generate.py
47
generate.py
@ -62,7 +62,7 @@ class Issue:
|
|||||||
return self.title
|
return self.title
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def load_issues(cls, title_alias_map):
|
def load_issues(cls, title_alias_map, title_lookup):
|
||||||
"""
|
"""
|
||||||
Search through all GitHub issues for any title tags to construct a
|
Search through all GitHub issues for any title tags to construct a
|
||||||
list of titles and their associated issues
|
list of titles and their associated issues
|
||||||
@ -75,8 +75,14 @@ class Issue:
|
|||||||
# Look for a titles sequence and pull out anything that looks like
|
# Look for a titles sequence and pull out anything that looks like
|
||||||
# an id
|
# an id
|
||||||
references = ' '.join(titles_re.findall(issue.body or ''))
|
references = ' '.join(titles_re.findall(issue.body or ''))
|
||||||
affected_titles = title_id_re.findall(references)
|
affected_titles = set()
|
||||||
cls.all_issues.append(cls(
|
for title_id in title_id_re.findall(references):
|
||||||
|
if title_id not in title_alias_map:
|
||||||
|
print('Warning: Issue %s references unknown title id "%s"' % (issue.url, title_id))
|
||||||
|
continue
|
||||||
|
affected_titles.add(title_lookup[title_alias_map[title_id]])
|
||||||
|
|
||||||
|
issue = cls(
|
||||||
issue.number,
|
issue.number,
|
||||||
issue.html_url,
|
issue.html_url,
|
||||||
issue.title,
|
issue.title,
|
||||||
@ -84,16 +90,17 @@ class Issue:
|
|||||||
issue.created_at.replace(tzinfo=timezone.utc),
|
issue.created_at.replace(tzinfo=timezone.utc),
|
||||||
issue.updated_at.replace(tzinfo=timezone.utc),
|
issue.updated_at.replace(tzinfo=timezone.utc),
|
||||||
issue.closed_at.replace(tzinfo=timezone.utc) if issue.state == 'closed' else None,
|
issue.closed_at.replace(tzinfo=timezone.utc) if issue.state == 'closed' else None,
|
||||||
issue.state))
|
issue.state)
|
||||||
|
|
||||||
# Organize issues by title
|
cls.all_issues.append(issue)
|
||||||
for issue in cls.all_issues:
|
|
||||||
for title_id in issue.affected_titles:
|
for title in issue.affected_titles:
|
||||||
if title_id not in title_alias_map:
|
if issue not in cls.issues_by_title[title.info['title_id']]:
|
||||||
print('Warning: Issue %s references unknown title id "%s"' % (issue.url, title_id))
|
cls.issues_by_title[title.info['title_id']].append(issue)
|
||||||
continue
|
|
||||||
if issue not in cls.issues_by_title[title_alias_map[title_id]]:
|
@property
|
||||||
cls.issues_by_title[title_alias_map[title_id]].append(issue)
|
def blocked_titles(self):
|
||||||
|
return {t for t in self.affected_titles if t.status in {'Broken', 'Intro', 'Starts'}}
|
||||||
|
|
||||||
|
|
||||||
class CompatibilityReport:
|
class CompatibilityReport:
|
||||||
@ -248,7 +255,7 @@ def main():
|
|||||||
print(' - Found %d' % (len(titles)))
|
print(' - Found %d' % (len(titles)))
|
||||||
|
|
||||||
print('Getting GitHub Issues List...')
|
print('Getting GitHub Issues List...')
|
||||||
Issue.load_issues(title_alias_map)
|
Issue.load_issues(title_alias_map, title_lookup)
|
||||||
print(' - Ok. %d issues total' % len(Issue.all_issues))
|
print(' - Ok. %d issues total' % len(Issue.all_issues))
|
||||||
|
|
||||||
print('Getting compatibility report list...')
|
print('Getting compatibility report list...')
|
||||||
@ -344,6 +351,20 @@ def main():
|
|||||||
minify_js=True, minify_css=True))
|
minify_js=True, minify_css=True))
|
||||||
print(' - Ok')
|
print(' - Ok')
|
||||||
|
|
||||||
|
print('Building top issues table')
|
||||||
|
issues_by_num_affected = [i for i in Issue.all_issues if i.state != 'closed' and i.affected_titles]
|
||||||
|
issues_by_num_affected.sort(key=lambda i: len(i.affected_titles), reverse=True)
|
||||||
|
issues_by_num_blocking = [i for i in issues_by_num_affected if len(i.blocked_titles)]
|
||||||
|
issues_by_num_blocking.sort(key=lambda i: len(i.blocked_titles), reverse=True)
|
||||||
|
|
||||||
|
template = env.get_template('top_issues.html')
|
||||||
|
with open(os.path.join(output_dir, 'top_issues.html'), 'w') as f:
|
||||||
|
f.write(
|
||||||
|
minify_html(
|
||||||
|
template.render(issues_by_num_affected=issues_by_num_affected, issues_by_num_blocking=issues_by_num_blocking),
|
||||||
|
minify_js=True, minify_css=True))
|
||||||
|
print(' - Ok')
|
||||||
|
|
||||||
print('Updating download.md with latest build version')
|
print('Updating download.md with latest build version')
|
||||||
with open('docs/docs/download.md', 'r', encoding='utf-8') as f:
|
with open('docs/docs/download.md', 'r', encoding='utf-8') as f:
|
||||||
t = f.read()
|
t = f.read()
|
||||||
|
63
templates/top_issues.html
Normal file
63
templates/top_issues.html
Normal file
@ -0,0 +1,63 @@
|
|||||||
|
{% extends "template_base.html" %}
|
||||||
|
{% block title %}Top Issues{% endblock %}
|
||||||
|
|
||||||
|
{% block append_head %}
|
||||||
|
<style type="text/css">
|
||||||
|
.table td {
|
||||||
|
vertical-align: middle !important;
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
|
||||||
|
{% endblock %}
|
||||||
|
|
||||||
|
{% block content %}
|
||||||
|
<div class="pt-5">
|
||||||
|
<h1>Top Blocking Issues</h1>
|
||||||
|
<p>
|
||||||
|
The following lists top issues by blocked titles.
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<table class="table">
|
||||||
|
<thead>
|
||||||
|
<tr>
|
||||||
|
<th scope="col">Title</th>
|
||||||
|
<th scope="col">Blocked Titles</th>
|
||||||
|
<th scope="col">Affected Titles</th>
|
||||||
|
</tr>
|
||||||
|
</thead>
|
||||||
|
<tbody>
|
||||||
|
{% for issue in issues_by_num_blocking %}
|
||||||
|
<tr>
|
||||||
|
<td><a href="{{ issue.url }}" title="{{ issue.title|e }}">#{{ issue.number }}: {{ issue.title|e }}</a></td>
|
||||||
|
<td>{{ issue.blocked_titles|length }}</td>
|
||||||
|
<td>{{ issue.affected_titles|length }}</td>
|
||||||
|
</tr>
|
||||||
|
{% endfor %}
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
|
||||||
|
<div class="pt-5">
|
||||||
|
<h1>Top Issues</h1>
|
||||||
|
<p>
|
||||||
|
The following lists top issues by affected titles.
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<table class="table">
|
||||||
|
<thead>
|
||||||
|
<tr>
|
||||||
|
<th scope="col">Title</th>
|
||||||
|
<th scope="col">Affected Titles</th>
|
||||||
|
</tr>
|
||||||
|
</thead>
|
||||||
|
<tbody>
|
||||||
|
{% for issue in issues_by_num_affected %}
|
||||||
|
<tr>
|
||||||
|
<td><a href="{{ issue.url }}" title="{{ issue.title|e }}">#{{ issue.number }}: {{ issue.title|e }}</a></td>
|
||||||
|
<td>{{ issue.affected_titles|length }}</td>
|
||||||
|
</tr>
|
||||||
|
{% endfor %}
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
{% endblock %}
|
Loading…
Reference in New Issue
Block a user