.line-through {
text-decoration: line-through;
}
+
+.jobs-boxes .well {
+ background: #fff;
+}
+
+.jobs-boxes h4 p {
+ font-weight: bold;
+}
+
+.jobs-boxes .warning {
+ background-color: #fcf8e3;
+}
+
+.jobs-boxes .error {
+ background-color: #f2dede;
+}
+
+.jobs-boxes .success {
+ background-color: #dff0d8;
+}
+
+.jobs-boxes .info {
+ background-color: #d9edf7;
+}
+
+.jobs-boxes .well table td {
+ width: 50%;
+}
</div>
{% end %}
- <div class="row">
- <div class="span12">
- <hr />
- </div>
- </div>
+ <hr>
{% if build.type == "release" %}
<div class="row">
</div>
</div>
- <div class="row">
- <div class="span12">
- <hr>
- </div>
- </div>
+ <hr>
{% end %}
<div class="row">
</div>
<div class="row">
- <div class="span12">
+ <div class="span8">
{% module Log(log) %}
</div>
+
+ <div class="span4">
+ {% module JobsBoxes(build) %}
+
+ <p class="ac">
+ <a href="/package/{{ build.pkg.uuid }}">{{ _("Source package") }}</a>
+ </p>
+ </div>
</div>
+ <hr>
+
<div class="row">
<div class="span12">
- <hr>
-
- <ul class="nav nav-pills">
- <li class="active">
- <a href="#buildjobs" data-toggle="tab">
- {{ _("Build jobs") }}
- </a>
- </li>
- {% if build.test_jobs %}
- <li>
- <a href="#testjobs" data-toggle="tab">
- {{ _("Test jobs") }} ({{ len(build.test_jobs) }})
- </a>
- </li>
+ <table class="table table-striped table-hover">
+ <tr>
+ <td>{{ _("Created") }}</td>
+ <td>{{ format_date(build.created, full_format=True) }}</td>
+ </tr>
+
+ {% if build.owner %}
+ <tr>
+ <td>{{ _("Owner") }}</td>
+ <td>{{ build.owner.realname }}</td>
+ </tr>
{% end %}
- <li>
- <a href="#properties" data-toggle="tab">
- {{ _("Properties") }}
- </a>
- </li>
- </ul>
-
- <div class="tab-content">
- <div class="tab-pane active" id="buildjobs">
- <div class="row">
- <div class="span12">
- {% module JobsTable(build) %}
- </div>
- </div>
- </div>
- {% if build.test_jobs %}
- <div class="tab-pane" id="testjobs">
- <div class="row">
- <div class="span12">
- {% module JobsTable(build, build.test_jobs, type="test") %}
- </div>
- </div>
- </div>
+ {% if current_user and current_user.is_admin() %}
+ <tr>
+ <td>{{ _("Public?") }}</td>
+ <td>
+ {% if build.public %}
+ {{ _("Yes") }}
+ {% else %}
+ {{ _("No") }}
+ {% end %}
+ </td>
+ </tr>
{% end %}
- <div class="tab-pane" id="properties">
- <div class="row">
- <div class="span4">
- <table class="table table-striped table-hover">
- <tr>
- <td>{{ _("Created") }}</td>
- <td>{{ format_date(build.created, full_format=True) }}</td>
- </tr>
-
- {% if build.owner %}
- <tr>
- <td>{{ _("Owner") }}</td>
- <td>{{ build.owner.realname }}</td>
- </tr>
- {% end %}
-
- {% if current_user and current_user.is_admin() %}
- <tr>
- <td>{{ _("Public?") }}</td>
- <td>
- {% if build.public %}
- {{ _("Yes") }}
- {% else %}
- {{ _("No") }}
- {% end %}
- </td>
- </tr>
- {% end %}
-
- <tr>
- <td>{{ _("Priority") }}</td>
- <td>
- <a href="/build/{{ build.uuid }}/priority">
- {% if build.priority >= 2 %}
- {{ _("Very high") }}
- {% elif build.priority == 1 %}
- {{ _("High") }}
- {% elif build.priority == 0 %}
- {{ _("Medium") }}
- {% elif build.priority == -1 %}
- {{ _("Low") }}
- {% elif build.priority <= -2 %}
- {{ _("Very low") }}
- {% end %}
- </a>
- </td>
- </tr>
- </table>
- </div>
-
- <div class="span8">
- <table class="table">
- <tbody>
- <tr>
- <td>{{ _("Source package") }}</td>
- <td>
- <a href="/package/{{ build.pkg.uuid }}">{{ build.pkg.friendly_name }}</a>
- </td>
- </tr>
-
- {% if build.pkg.requires %}
- <tr>
- <td>{{ _("Build dependencies") }}</td>
- <td>
- {{ locale.list(["<a href=\"/search?q=%(r)s\">%(r)s</a>" % { "r" : r } for r in build.pkg.requires]) }}
- </td>
- </tr>
- {% end %}
- </tbody>
- </table>
- </div>
- </div>
- </div>
- </div>
+ <tr>
+ <td>{{ _("Priority") }}</td>
+ <td>
+ <a href="/build/{{ build.uuid }}/priority">
+ {% if build.priority >= 2 %}
+ {{ _("Very high") }}
+ {% elif build.priority == 1 %}
+ {{ _("High") }}
+ {% elif build.priority == 0 %}
+ {{ _("Medium") }}
+ {% elif build.priority == -1 %}
+ {{ _("Low") }}
+ {% elif build.priority <= -2 %}
+ {{ _("Very low") }}
+ {% end %}
+ </a>
+ </td>
+ </tr>
+ </table>
</div>
</div>
{% end block %}
--- /dev/null
+<div class="jobs-boxes">
+ {% for j in jobs %}
+ <div class="well well-small">
+ <h4>
+ <small>{% module JobState(j, cls="pull-right") %}</small>
+ <a href="/job/{{ j.uuid }}">{{ j.arch.name }}</a>
+ </h4>
+
+ <table class="table table-condensed table-hover">
+ <tbody>
+ <tr>
+ <td>
+ {{ _("Duration") }}
+ </td>
+ <td>
+ {{ friendly_time(j.duration) }}
+ </td>
+ </tr>
+ {% if j.builder %}
+ <tr>
+ <td>
+ {{ _("Builder") }}
+ </td>
+ <td>
+ <a href="/builder/{{ j.builder.name }}">{{ j.builder.name }}</a>
+ </td>
+ </tr>
+ {% end %}
+ </tbody>
+ </table>
+ </div>
+ {% end %}
+</div>
"ChangelogEntry" : ChangelogEntryModule,
"CommitsTable" : CommitsTableModule,
+ "JobsBoxes" : JobsBoxesModule,
+ "JobState" : JobStateModule,
"JobsTable" : JobsTableModule,
"JobsList" : JobsListModule,
"CommentsTable" : CommentsTableModule,
return self.render_string("modules/build-state-warnings.html", build=build)
+class JobsBoxesModule(UIModule):
+ def render(self, build, jobs=None):
+ if jobs is None:
+ jobs = build.jobs
+
+ return self.render_string("modules/jobs/boxes.html",
+ build=build, jobs=jobs)
+
+
+class JobStateModule(UIModule):
+ def render(self, job, cls=None):
+ state = job.state
+
+ _ = self.locale.translate
+ classes = []
+
+ if state == "aborted":
+ text = _("Aborted")
+ classes.append("muted")
+
+ elif state == "dependency_error":
+ text = _("Dependency problem")
+ classes.append("text-warning")
+
+ elif state == "dispatching":
+ text = _("Dispatching")
+ classes.append("text-info")
+
+ elif state == "failed":
+ text = _("Failed")
+ classes.append("text-error")
+
+ elif state == "finished":
+ text = _("Finished")
+ classes.append("text-success")
+
+ elif state == "new":
+ text = _("New")
+ classes.append("muted")
+
+ elif state == "pending":
+ text = _("Pending")
+ classes.append("muted")
+
+ elif state == "running":
+ text = _("Running")
+ classes.append("text-info")
+
+ # Return just the string, is state is unknown.
+ else:
+ text = _("Unknown: %s") % state
+ classes.append("muted")
+
+ if cls:
+ classes.append(cls)
+
+ return """<p class="%s">%s</p>""" % (" ".join(classes), text)
+
+
class JobsTableModule(UIModule):
def render(self, build, jobs=None, type="release"):
if jobs is None: