c8df33a6 Andy McCall 25 days ago ↶
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 %}