| 1 |
{% extends "base.html" %} |
| 2 |
{% import "repo_tabs.html" as m %} |
| 3 |
{% block title %}Reports · {{ repo.owner }}/{{ repo.name }}{% endblock %} |
| 4 |
{% block tabs %}{% call m::tabs(repo, "reports") %}{% endblock %} |
| 5 |
{% block content %} |
| 6 |
<h1>Reports</h1> |
| 7 |
<p class="mute small">What this repository's Flow jobs measure, newest run first{% if !bookmark.is_empty() %}, on <strong>{{ bookmark }}</strong> (<a href="{{ repo.url }}/reports">all bookmarks</a>){% endif %}. Each metric shows its change against the run before on the same bookmark.</p> |
| 8 |
<div class="rep-list"> |
| 9 |
{% for i in items %} |
| 10 |
<a class="panel rep-card" href="{{ repo.url }}/reports/{{ i.report.name }}?id={{ i.report.id }}"> |
| 11 |
<div class="rep-head"> |
| 12 |
<span class="tag rep-kind rep-{{ i.report.kind }}">{{ i.report.kind }}</span> |
| 13 |
<strong class="rep-title">{{ i.report.title }}</strong> |
| 14 |
</div> |
| 15 |
{% if !i.report.summary.is_empty() %}<p class="rep-summary">{{ i.report.summary }}</p>{% endif %} |
| 16 |
{% if !i.metrics.is_empty() %}<ul class="rep-metrics">{% for v in i.metrics %}<li class="{% if v.failing %}rep-failing{% endif %}"><span class="k">{{ v.key }}</span> <span class="v">{{ v.value }}{% if !v.unit.is_empty() %} <small>{{ v.unit }}</small>{% endif %}</span>{% if !v.delta.is_empty() %} <span class="rep-delta {{ v.trend }}">{{ v.delta }}</span>{% endif %}</li>{% endfor %}</ul>{% endif %} |
| 17 |
<div class="small mute">{% if !i.report.bookmark.is_empty() %}on {{ i.report.bookmark }} · {% endif %}{% if let Some(n) = i.report.run_number %}run #{{ n }} · {% endif %}job {{ i.report.job }} · <time title="{{ i.report.created_ms|when_i }}">{{ i.report.created_ms|ago_i }}</time></div> |
| 18 |
</a> |
| 19 |
{% endfor %} |
| 20 |
{% if coverage %} |
| 21 |
<a class="panel rep-card" href="{{ repo.url }}/coverage"> |
| 22 |
<div class="rep-head"><span class="tag rep-kind rep-coverage">coverage</span> <strong class="rep-title">Coverage</strong></div> |
| 23 |
<p class="rep-summary">Line coverage from the jobs' <code>coverage</code> artifacts, by file and across runs.</p> |
| 24 |
</a> |
| 25 |
{% endif %} |
| 26 |
{% if tests %} |
| 27 |
<a class="panel rep-card" href="{{ repo.url }}/tests"> |
| 28 |
<div class="rep-head"><span class="tag rep-kind rep-tests">tests</span> <strong class="rep-title">Tests</strong></div> |
| 29 |
<p class="rep-summary">Test results from the jobs' <code>junit</code> artifacts, each case and its history.</p> |
| 30 |
</a> |
| 31 |
{% endif %} |
| 32 |
</div> |
| 33 |
{% if items.is_empty() && !coverage && !tests %}<p class="empty">No reports yet. A Flow job keeps one with <code>report "NAME" { path "/src/out/report" }</code> in its output; see the OxygenFlow wiki's Reports page.</p>{% endif %} |
| 34 |
{% endblock %} |