{% if !run.priority.is_empty() %}<pclass="small"><spanclass="tag tag-urgent"title="Runners take it before any other">{{ run.priority }}</span> {{ run.priority_note }}</p>{% endif %}
13
{% if can_expedite %}<formclass="inline"method="post"action="{{ repo.url }}/flow/{{ run.number }}/expedite"title="Runners take an urgent run's jobs before any other's"><inputtype="hidden"name="_csrf"value="{{ shell.csrf }}"><inputtype="text"name="reason"size="22"maxlength="200"placeholder="why it is urgent"required><buttontype="submit"class="small">EXPEDITE</button></form>{% endif %}
{% if can_cancel %}<formclass="inline"method="post"action="{{ repo.url }}/flow/{{ run.number }}/cancel"data-confirm="Cancel run #{{ run.number }}? Jobs still running are stopped."><inputtype="hidden"name="_csrf"value="{{ shell.csrf }}"><buttontype="submit"class="small danger-btn">CANCEL</button></form>{% endif %}
<sectionclass="panel"><divclass="strip">No jobs ran: the push asked to skip this run ({{ run.error }}). The next run of {{ run.bookmark }} covers what it brought.</div></section>
<sectionclass="panel"><divclass="strip bad">The pipeline is not valid, so nothing ran.</div><preclass="snippet">{{ run.error }}</pre><pclass="small mute">Run <code>flow check</code> locally to see the same problems.</p></section>
{% if !approvals.is_empty() %}<sectionclass="panel approvals"aria-label="Approvals">
25
<h2>Approvals</h2>
26
<ulclass="plain">{% for a in approvals %}<liclass="approval st-{{ a.state }}"><strong>{{ a.job }}</strong>
27
{% if a.state == "waiting" %}waits for approval by someone with the <em>{{ a.by }}</em> role{% if a.others_only %}, other than {{ run.actor }}{% endif %}.
{% if can_rerun && l.j.done() %}<formclass="tiny inline job-rerun"method="post"action="{{ repo.url }}/flow/{{ run.number }}/jobs/{{ l.j.name }}/rerun"><inputtype="hidden"name="_csrf"value="{{ shell.csrf }}"><buttontype="submit"class="small"title="Run {{ l.j.name }} again in this run, with the jobs that depend on it; what it depends on keeps its results">RE-RUN THIS JOB</button></form>{% endif %}
{% if !l.artifacts.is_empty() %}<ulclass="flow-artifacts small">{% for a in l.artifacts %}<li><ahref="{{ repo.url }}/flow/{{ run.number }}/artifacts/{{ l.j.name }}/{{ a.name }}">{{ a.name }}</a><spanclass="mute">{{ a.path }} · {{ a.size|bytes }} · blob <codetitle="{{ a.blob }}">{{ a.blob|short }}</code></span>{% if l.j.status != "passed" %} <spanclass="warn"title="Kept with when "always": the job did not pass, so its receipt does not name this file">· from a job that did not pass, not in its receipt</span>{% endif %}{% if !releases.is_empty() && l.j.status == "passed" %} <formclass="tiny inline"method="post"action="{{ repo.url }}/flow/{{ run.number }}/artifacts/{{ l.j.name }}/{{ a.name }}/attach"><inputtype="hidden"name="_csrf"value="{{ shell.csrf }}"><selectname="release"aria-label="Release to attach {{ a.name }} to">{% for r in releases %}<optionvalue="{{ r.id }}">{{ r.tag }}</option>{% endfor %}</select><button>Attach to release</button></form>{% endif %}</li>{% endfor %}</ul>{% endif %}
{% if !f.output.is_empty() %}<preclass="flow-log">{{ f.output }}</pre>{% endif %}
60
</details>{% endfor %}
61
{% if t.broken() > l.failures.len() as i64 %}<pclass="small mute">and {{ t.broken() - l.failures.len() as i64 }} more failures; the junit artifact has them all.</p>{% endif %}
<preclass="flow-log"data-logdata-seq="{{ l.last_seq }}">{% for seg in l.segments %}{% match seg %}{% when crate::web::flow::Segment::Line(line) %}<spanclass="ln s-{{ line.stream }}"><spanclass="t">{{ crate::web::flow::secs(line.t) }}</span>{{ line.text }}</span>
64
{% when crate::web::flow::Segment::Group(g) %}<detailsclass="log-group"data-from="{{ g.from_t }}"{% ifg.to_t.is_none() %} opendata-open-group{% endif %}><summaryclass="ln"><spanclass="t">{{ crate::web::flow::secs(g.from_t) }}</span>{{ g.title }}{% if let Some(e) = g.to_t %} <spanclass="took">{{ crate::web::flow::secs(e - g.from_t) }}</span>{% endif %}</summary>{% for line in g.lines %}<spanclass="ln s-{{ line.stream }}"><spanclass="t">{{ crate::web::flow::secs(line.t) }}</span>{{ line.text }}</span>
{% let phases = l.j.phase_list() %}{% if !phases.is_empty() %}<pclass="small mute pad">Where its time went: {% for (p, ms) in phases %}{{ p }} {{ crate::web::flow::secs(ms.clone() as i64) }}{% if !loop.last %}, {% endif %}{% endfor %}.</p>{% endif %}
{% if l.j.status == "passed" %}{% if let Some(n) = l.j.reused_from() %}<pclass="small mute pad"data-reused>Not run again: this job, with the same spec and sandbox, passed on this very state in <ahref="{{ repo.url }}/flow/{{ n }}">run #{{ n }}</a>, whose log it would repeat; that pass's receipt stands for it here.</p>{% endif %}{% endif %}