{% extends 'layout.html' %}
{% import 'forms.html' as forms %}

{% block content %}

<h1>Welcome to the Buildbot
{%- if title -%}
  &nbsp;for the&nbsp;
  {%- if title_url -%}
    <a href="{{ title_url }}">{{ title }}</a>
  {%- else -%}
    {{ title }}
  {%- endif -%}
&nbsp;project
{%- endif -%}
!
</h1>

<p>Our goal is to provide extensive build and test coverage for all supported platforms.</p>
<p>
  If you are willing to donate some CPU cycles and some room on a hard drive, you are welcome.
  The instructions of how to add a build slave to the LLVM Buildbot infrastructure can be found
  in the
  <a href="http://llvm.org/docs/HowToAddABuilder.html">
    How to Add Your Build Configuration to the LLVM Buildbot Infrastructure</a>
  document.
</p>

<div class="column">
<h2>Navigate:</h2>
<ul>
  {% set item_class=cycler('alt', '') %}
  
  <li class="{{ item_class.next() }}">The <a href="waterfall">Waterfall Display</a> will give you a
  time-oriented summary of recent buildbot activity. <a href="waterfall/help">Waterfall Help.</a></li>

  <li class="{{ item_class.next() }}">The <a href="grid">Grid Display</a> will give you a
  developer-oriented summary of recent buildbot activity.</li>

  <li class="{{ item_class.next() }}">The <a href="tgrid">Transposed Grid Display</a> presents
  the same information as the grid, but lists the revisions down the side.</li>

  <li class="{{ item_class.next() }}">The <a href="console">Console</a> presents 
  a user-oriented status page.</li>

  <li class="{{ item_class.next() }}">The <a href="builders">Builders</a> and their most recent builds are
  here.</li>

  <li class="{{ item_class.next() }}"><a href="one_line_per_build">Recent Builds</a> are summarized here, one
  per line.</li>

  <li class="{{ item_class.next() }}"><a href="buildslaves">Buildslave</a> information</li>
  <li class="{{ item_class.next() }}"><a href="changes">Changesource</a> information.</li>

  <li class="{{ item_class.next() }}"><a href="about">About</a> this Buildbot</li>
</ul>

{%- if authz.advertiseAction('cleanShutdown') -%}
{%- if shutting_down -%}
Master is shutting down<br/>
{{ forms.cancel_clean_shutdown(cancel_shutdown_url, authz) }}
{%- else -%}
{{ forms.clean_shutdown(shutdown_url, authz) }}
{%- endif -%}
{%- endif -%}

<p><i>Admin:&nbsp;Galina Kistanova gkistanova@gmail.com</i></p>

</div>

{% endblock %}
