| {% from 'build_line.html' import build_table %} |
| {% import 'forms.html' as forms %} |
| |
| {% extends "layout.html" %} |
| {% block content %} |
| |
| <h1>Builder {{ name }}</h1> |
| |
| <p>(<a href="{{ path_to_root }}waterfall?show={{ name }}">view in waterfall</a>)</p> |
| |
| <div class="column"> |
| |
| {% if current %} |
| <h2>Current Builds:</h2> |
| <ul> |
| {% for b in current %} |
| <li><a href="{{ b.link }}">{{ b.num }}</a> |
| {% if b.when %} |
| ETA: {{ b.when_time }} [{{ b.when }}] |
| {% endif %} |
| |
| {{ b.current_step }} |
| |
| {% if authz.advertiseAction('stopBuild', request) %} |
| {{ forms.stop_build(b.stop_url, authz, on_all=False, short=True, label='Build') }} |
| {% endif %} |
| </li> |
| {% endfor %} |
| </ul> |
| {% else %} |
| <h2>No current builds</h2> |
| {% endif %} |
| |
| {% if pending %} |
| <h2>Pending Build Requests:</h2> |
| <ul> |
| {% for b in pending %} |
| <li><small>({{ b.when }}, waiting {{ b.delay }})</small> |
| |
| {% if authz.advertiseAction('cancelPendingBuild', request) %} |
| {{ forms.cancel_pending_build(builder_url+"/cancelbuild", authz, short=True, id=b.id) }} |
| {% endif %} |
| |
| {% if b.num_changes < 4 %} |
| {% for c in b.changes %}{{ c.revision|shortrev(c.repo) }} |
| (<a href="{{ c.url }}">{{ c.who }}</a>){% if not loop.last %},{% endif %} |
| {% endfor %} |
| {% else %} |
| ({{ b.num_changes }} changes) |
| {% endif %} |
| |
| {% if 'owner' in b.properties %} |
| <b>Forced build</b> |
| by {{b.properties['owner'][0]}} |
| <small>{{b.properties['reason'][0]}}</small> |
| {% endif %} |
| </li> |
| {% endfor %} |
| </ul> |
| |
| {% if authz.advertiseAction('cancelPendingBuild', request) %} |
| {{ forms.cancel_pending_build(builder_url+"/cancelbuild", authz, short=False, id='all') }} |
| {% endif %} |
| |
| {% else %} |
| <h2>No Pending Build Requests</h2> |
| {% endif %} |
| |
| <h2>Recent Builds:</h2> |
| |
| {{ build_table(recent) }} |
| ( Show: <a href="{{ builder_url }}">default</a> |
| {% for count in [25, 50, 100, 200] %} |
| <a href="{{ builder_url }}?numbuilds={{ count }}">{{ count }}</a> |
| {% endfor %}) |
| |
| </div> |
| <div class="column"> |
| |
| <h2>Buildslaves:</h2> |
| <table class="info"> |
| {% if slaves %} |
| <tr> |
| <th>Name</th> |
| <th>Status</th> |
| <th>Admin</th> |
| </tr> |
| {% endif %} |
| {% for s in slaves %} |
| <tr class="{{ loop.cycle('alt', '') }}"> |
| <td><b><a href="{{ s.link|e }}">{{ s.name|e }}</a></b></td> |
| {% if s.connected %} |
| <td class="idle">connected</td> |
| <td>{{ s.admin|email if s.admin else ""}}</td> |
| {% else %} |
| <td class="offline">offline</td> |
| <td/> |
| {% endif %} |
| </tr> |
| {% else %} |
| <td>no slaves attached</td> |
| {% endfor %} |
| </table> |
| |
| {% if authz.advertiseAction('pingBuilder', request) %} |
| <h2>Ping slaves</h2> |
| {{ forms.ping_builder(builder_url+"/ping", authz) }} |
| {% endif %} |
| |
| {% if authz.advertiseAction('forceBuild', request) and force_schedulers != {} %} |
| <h2>Force build</h2> |
| {{ forms.force_build(builder_url+"/force", authz, request, False, force_schedulers=force_schedulers,default_props=default_props) }} |
| {% endif %} |
| |
| </div> |
| |
| {% endblock %} |
| |