Skip to content

Commit

Permalink
scripts/machine-summary: write per-machine reports with more details
Browse files Browse the repository at this point in the history
Rename the updates.html format to just 'report'.

This report has the existing overview as the index.html, and then
per-machine files are written with the patch breakdown.

Signed-off-by: Ross Burton <[email protected]>
Signed-off-by: Jon Mason <[email protected]>
  • Loading branch information
rossburton authored and jonmason committed Jan 19, 2022
1 parent b1b0f37 commit c4b3474
Show file tree
Hide file tree
Showing 5 changed files with 160 additions and 48 deletions.
47 changes: 0 additions & 47 deletions scripts/machine-summary-updates.html.jinja

This file was deleted.

21 changes: 20 additions & 1 deletion scripts/machine-summary.py
Original file line number Diff line number Diff line change
Expand Up @@ -167,7 +167,26 @@ class TextOverview(Format):
name = "overview.txt"

class HtmlUpdates(Format):
name = "updates.html"
name = "report"

def render(self, context, output: pathlib.Path):
if output.exists() and not output.is_dir():
print(f"{output} is not a directory", file=sys.stderr)
sys.exit(1)

if not output.exists():
output.mkdir(parents=True)

with open(output / "index.html", "wt") as f:
f.write(self.get_template(f"report-index.html.jinja").render(context))

subcontext = context.copy()
del subcontext["data"]
for machine, subdata in context["data"].items():
subcontext["machine"] = machine
subcontext["data"] = subdata
with open(output / f"{machine}.html", "wt") as f:
f.write(self.get_template(f"report-details.html.jinja").render(subcontext))

if __name__ == "__main__":
parser = argparse.ArgumentParser(description="machine-summary")
Expand Down
35 changes: 35 additions & 0 deletions scripts/report-base.html.jinja
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
<!DOCTYPE html>
<html>
<head>
<title>{% block title %}{% endblock %}</title>
<meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/[email protected]/css/bulma.min.css">
</head>
<body>
<section class="section">
{# TODO use position: sticky to glue this to the top #}
<nav class="breadcrumb is-large">
<ul>
<li class="{{ "is-active" if machine is undefined }}">
<a href="index.html">Recipe Report</a>
</li>
{% if machine is defined %}
<li class="is-active">
<a href="#">{{machine}}</a>
</li>
{% endif %}
</ul>
</nav>

<div class="content">
{% block content %}{% endblock %}
</div>
</section>

<footer class="footer">
<div class="content has-text-centered">
Generated by <code>machine-summary</code> at {{ timestamp }}.
</div>
</footer>
</body>
</html>
61 changes: 61 additions & 0 deletions scripts/report-details.html.jinja
Original file line number Diff line number Diff line change
@@ -0,0 +1,61 @@
{% extends "report-base.html.jinja" %}
{% block title %}Recipe Report for {{ machine }}{% endblock %}

{# Write a tag element using the Upstream-Status to determine the class. #}
{% macro make_patch_tag(status) -%}
{% set status = status.split()[0] %}
{% if status in ("Unknown", "Pending") %}
{% set class = "is-danger" %}
{% elif status in ("Backport", "Accepted", "Inappropriate") %}
{% set class = "is-success" %}
{% elif status in ("Submitted", "Denied") %}
{% set class = "is-info" %}
{% else %}
{% set class = "is-info" %}
{% endif %}
<span class="tag {{ class }}">{{ status }}</span>
{%- endmacro %}

{% block content %}
<!-- TODO table of contents -->

{% for name, data in data|dictsort if data.needs_update or data.patched %}
<h2 class="title is-4">
{{ data.recipe }} {{ data.fullversion }}
{% if name != data.recipe %}
(provides {{ name }})
{% endif %}
{% if data.needs_update %}<span class="tag is-danger">Upgrade Needed</span>{% endif %}
<a id="recipe-{{ data.recipe }}" class="has-text-grey-lighter">#</a>
</h2>

{% if data.needs_update %}
<p>
Recipe is version {{ data.fullversion }}, latest upstream release is <strong>{{ data.upstream }}</strong>.
</p>
{% endif%}

{% if data.patched %}
<table class="table is-striped is-bordered">
<thead>
<tr>
<th>Patch</th>
<th style="width: 20em">Layer</th>
<th style="width: 10em">Status</th>
</tr>
</thead>
<tbody>
{% for pinfo in data.patches %}
<tr>
<!-- TODO links to cgit -->
<td>{{ pinfo.name }}</td>
<td>{{ pinfo.layer }}</td>
<!-- TODO: tooltip with full status? -->
<td class="has-text-centered">{{ make_patch_tag(pinfo.status)}}</td>
</tr>
{% endfor %}
</tbody>
</table>
{% endif %}
{% endfor %}
{% endblock %}
44 changes: 44 additions & 0 deletions scripts/report-index.html.jinja
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
{% extends "report-base.html.jinja" %}
{% block title %}Recipe Report{% endblock %}

{% block content %}
<table class="table is-striped">
<thead>
<tr>
<th>Machine</th>
{% for recipe in recipes|sort %}
<th>{{ recipe }} ({{releases[recipe]|default("?")}})</th>
{% endfor %}
</tr>
</thead>
<tbody>
{% for machine, data in data|dictsort %}
<tr>
<th><a href="{{machine}}.html">{{ machine }}</a></th>
{% for recipe in recipes|sort %}
{% if recipe in data %}
{% set details = data[recipe] %}
<td style="text-align: center">
<a href="{{machine}}.html#recipe-{{details.recipe}}">
{{ details.recipe if details.recipe != recipe}}
{{ details.version }}
</a>
{% if details.patches or details.needs_update %}
<br>
{% if details.patches %}
<span class="tag is-info">Patched</span>
{% endif %}
{% if details.needs_update %}
<span class="tag is-danger">Upgrade</span>
{% endif %}
{% endif %}
</td>
{% else %}
<td>-</td>
{% endif %}
{% endfor %}
</tr>
{% endfor %}
</tbody>
</table>
{% endblock %}

0 comments on commit c4b3474

Please sign in to comment.