| 1 |
{% extends "base.html" %} |
| 2 |
{% import "repo_tabs.html" as m %} |
| 3 |
{% block title %}Flow · {{ repo.owner }}/{{ repo.name }}{% endblock %} |
| 4 |
{% block bodyattrs %} data-repo="{{ repo.url }}"{% endblock %} |
| 5 |
{% block tabs %}{% call m::tabs(repo, "flow") %}{% endblock %} |
| 6 |
{% block content %} |
| 7 |
<div class="head"><h1>Flow <small>pipeline runs</small></h1></div> |
| 8 |
{% if runs.is_empty() %} |
| 9 |
<section class="panel"> |
| 10 |
{% if enabled %} |
| 11 |
<p>No runs yet. Add <code>.flow/pipeline.kdl</code> to a bookmark and push: every push that moves a bookmark runs it in OxygenFlow microVMs.</p> |
| 12 |
{% else %} |
| 13 |
<p>OxygenFlow is not enabled for this repository. A site administrator turns it on under <a href="{{ repo.url }}/settings#flow">Settings → OxygenFlow</a>.</p> |
| 14 |
{% endif %} |
| 15 |
<pre class="snippet">schema-version 1 |
| 16 |
|
| 17 |
sandbox "alpine" { |
| 18 |
runtime "microvm" |
| 19 |
rootfs "cas://blob/…" // flow rootfs import prints this |
| 20 |
memory-limit "512MiB" |
| 21 |
} |
| 22 |
|
| 23 |
job "test" { |
| 24 |
sandbox "alpine" |
| 25 |
exec "sh" "-eu" "test.sh" |
| 26 |
}</pre> |
| 27 |
</section> |
| 28 |
{% else %} |
| 29 |
<table class="list flow-runs"> |
| 30 |
<thead><tr><th></th><th>Run</th><th>Jobs</th><th>Bookmark</th><th>State</th><th>By</th><th>When</th><th>Took</th></tr></thead> |
| 31 |
<tbody> |
| 32 |
{% for row in runs %} |
| 33 |
<tr class="st-{{ row.r.status }}"> |
| 34 |
<td class="st"><span class="flow-glyph st-{{ row.r.status }}" title="{{ row.r.status }}">{{ crate::web::flow::glyph(row.r.status) }}</span></td> |
| 35 |
<td><a href="{{ repo.url }}/flow/{{ row.r.id }}"><strong>#{{ row.r.id }}</strong></a> <span class="small mute">{{ row.r.status }}</span></td> |
| 36 |
<td class="flow-dots">{% for (n, s) in row.jobs %}<span class="flow-glyph st-{{ s }}" title="{{ n }}: {{ s }}">{{ crate::web::flow::glyph(s) }}</span>{% endfor %}{% if row.r.status == "error" %}<span class="small bad">pipeline invalid</span>{% endif %}</td> |
| 37 |
<td><span class="lbl lbl-bm">{{ row.r.bookmark }}</span></td> |
| 38 |
<td><a class="px" href="{{ repo.url }}/tree/{{ row.r.heads }}" title="{{ row.r.state }}">{{ row.r.state|short }}</a></td> |
| 39 |
<td>{{ row.r.actor }}</td> |
| 40 |
<td><time title="{{ row.r.created_ms|when_i }}">{{ row.r.created_ms|ago_i }}</time></td> |
| 41 |
<td class="small mute">{{ row.duration }}</td> |
| 42 |
</tr> |
| 43 |
{% endfor %} |
| 44 |
</tbody> |
| 45 |
</table> |
| 46 |
{% if let Some(b) = older %}<p class="center"><a class="go small" href="{{ repo.url }}/flow?before={{ b }}">older runs</a></p>{% endif %} |
| 47 |
{% endif %} |
| 48 |
{% endblock %} |