2008-11-26 17:43:45 +00:00
|
|
|
[% USE date %]
|
2009-04-02 16:15:57 +00:00
|
|
|
[% USE HTML %]
|
2008-11-26 17:43:45 +00:00
|
|
|
|
|
|
|
|
2008-11-17 23:59:20 +00:00
|
|
|
[% inputTypes =
|
|
|
|
{ "svn" = "Subversion checkout"
|
|
|
|
, "cvs" = "CVS checkout"
|
2009-11-17 15:16:41 +00:00
|
|
|
, "git" = "Git checkout"
|
2008-11-17 23:59:20 +00:00
|
|
|
, "tarball" = "Download of a tarball"
|
|
|
|
, "string" = "String value"
|
2008-11-25 18:34:24 +00:00
|
|
|
, "boolean" = "Boolean"
|
2008-11-17 23:59:20 +00:00
|
|
|
, "path" = "Local path"
|
|
|
|
, "build" = "Build output"
|
2010-01-19 14:15:31 +00:00
|
|
|
, "sysbuild" = "Build output (same system)"
|
2008-11-17 23:59:20 +00:00
|
|
|
}
|
|
|
|
%]
|
2008-11-25 13:27:57 +00:00
|
|
|
|
|
|
|
|
|
|
|
[% BLOCK renderDateTime %]
|
|
|
|
[% date.format(timestamp, '%Y-%m-%d %H:%M:%S') -%]
|
2008-11-26 17:43:45 +00:00
|
|
|
[% END %]
|
|
|
|
|
|
|
|
|
2009-03-12 23:46:17 +00:00
|
|
|
[% BLOCK renderProjectName -%]
|
|
|
|
<a href="[% c.uri_for('/project' project) %]"><tt>[% project %]</tt></a>[% END -%]
|
|
|
|
|
|
|
|
|
|
|
|
[% BLOCK renderJobsetName -%]
|
|
|
|
<a href="[% c.uri_for('/jobset' project jobset) %]"><tt>[% jobset %]</tt></a>[% END -%]
|
|
|
|
|
|
|
|
|
|
|
|
[% BLOCK renderJobName -%]
|
|
|
|
<a href="[% c.uri_for('/job' project jobset job) %]"><tt>[% job %]</tt></a>[% END -%]
|
|
|
|
|
|
|
|
|
2009-04-08 22:08:00 +00:00
|
|
|
[% BLOCK renderFullJobsetName %]
|
|
|
|
<tt>
|
|
|
|
[% INCLUDE renderProjectName %]:[% INCLUDE renderJobsetName %]
|
|
|
|
</tt>
|
|
|
|
[% END %]
|
|
|
|
|
|
|
|
|
2009-03-12 23:46:17 +00:00
|
|
|
[% BLOCK renderFullJobName %]
|
|
|
|
<tt>
|
2009-03-13 15:57:43 +00:00
|
|
|
[% INCLUDE renderProjectName %]:[% INCLUDE renderJobsetName %]:[% INCLUDE renderJobName %]
|
2009-03-14 23:27:08 +00:00
|
|
|
</tt>
|
2009-03-12 23:46:17 +00:00
|
|
|
[% END %]
|
|
|
|
|
|
|
|
|
2009-03-13 14:49:25 +00:00
|
|
|
[% BLOCK renderFullJobNameOfBuild %]
|
2009-03-13 15:57:43 +00:00
|
|
|
[% INCLUDE renderFullJobName project=build.get_column("project") jobset = build.get_column("jobset") job = build.get_column("job") %]
|
2009-03-13 14:49:25 +00:00
|
|
|
[% END %]
|
|
|
|
|
|
|
|
|
2009-03-13 16:04:49 +00:00
|
|
|
[% BLOCK renderDuration -%]
|
|
|
|
[% IF duration >= 24 * 60 * 60 %][% duration div (24 * 60 * 60) %]d[% END %]
|
|
|
|
[% IF duration >= 60 * 60 %][% duration div (60 * 60) % 24 %]h[% END %]
|
|
|
|
[% IF duration >= 60 %][% duration div 60 % 60 %]m[% END %]
|
|
|
|
[% duration % 60 %]s
|
|
|
|
[% END %]
|
|
|
|
|
|
|
|
|
2008-11-26 17:43:45 +00:00
|
|
|
[% BLOCK renderBuildList %]
|
2010-02-24 15:06:20 +00:00
|
|
|
<table class="buildList tablesorter[% IF !showSchedulingInfo %] queue[% END %]">
|
2008-11-26 17:43:45 +00:00
|
|
|
<thead>
|
|
|
|
<tr>
|
|
|
|
[% IF !hideResultInfo %]
|
|
|
|
<th></th>
|
|
|
|
[% END %]
|
|
|
|
<th>#</th>
|
|
|
|
[% IF showSchedulingInfo %]
|
2010-02-24 15:06:20 +00:00
|
|
|
<th></th>
|
2010-01-07 14:25:12 +00:00
|
|
|
<th>P</th>
|
2008-11-26 17:43:45 +00:00
|
|
|
[% END %]
|
|
|
|
<th>Job</th>
|
2009-03-12 23:46:17 +00:00
|
|
|
<th>Release Name</th>
|
2008-11-26 17:43:45 +00:00
|
|
|
<th>System</th>
|
|
|
|
<th>Timestamp</th>
|
2009-07-09 14:48:15 +00:00
|
|
|
[% IF showStatusChange %]
|
|
|
|
<th class="headerSortUp">Last status change</th>
|
|
|
|
[% END %]
|
2010-01-07 14:25:12 +00:00
|
|
|
[% IF showDescription %]
|
|
|
|
<th>Description</th>
|
|
|
|
[% END %]
|
2008-11-26 17:43:45 +00:00
|
|
|
</tr>
|
|
|
|
</thead>
|
|
|
|
<tbody>
|
2009-03-04 15:41:37 +00:00
|
|
|
[% odd = 0 %]
|
2008-11-26 17:43:45 +00:00
|
|
|
[% FOREACH build IN builds -%]
|
2009-03-04 15:41:37 +00:00
|
|
|
<tr class="clickable
|
|
|
|
[% IF showSchedulingInfo -%]
|
2010-01-22 10:31:08 +00:00
|
|
|
[% IF build.get_column('busy') %]runningBuild[% ELSIF build.get_column('disabled') == 1 || build.get_column('enabled') == 0 %]disabledBuild[% END %]
|
2009-03-04 15:41:37 +00:00
|
|
|
[% ELSE -%]
|
|
|
|
[% IF odd %] odd [% END; odd = !odd -%]
|
2008-11-30 18:55:03 +00:00
|
|
|
[% END %]"
|
2008-11-27 09:59:29 +00:00
|
|
|
onclick="window.location = '[% c.uri_for('/build' build.id) %]'">
|
2008-11-26 17:43:45 +00:00
|
|
|
[% IF !hideResultInfo %]
|
|
|
|
<td>
|
2009-03-23 13:52:24 +00:00
|
|
|
[% IF build.get_column('buildstatus') == 0 %]
|
2009-03-04 15:25:35 +00:00
|
|
|
<img src="/static/images/success.gif" alt="Succeeded" />
|
2008-11-26 17:43:45 +00:00
|
|
|
[% ELSE %]
|
2009-03-04 15:25:35 +00:00
|
|
|
<img src="/static/images/failure.gif" alt="Failed" />
|
2008-11-26 17:43:45 +00:00
|
|
|
[% END %]
|
|
|
|
</td>
|
|
|
|
[% END %]
|
|
|
|
<td><a href="[% c.uri_for('/build' build.id) %]">[% build.id %]</a></td>
|
|
|
|
[% IF showSchedulingInfo %]
|
2010-02-24 15:06:20 +00:00
|
|
|
<td>[% IF build.get_column('busy') %]<img src="/static/images/running.gif" alt="Running" />[% ELSIF build.get_column('disabled') == 1 || build.get_column('enabled') == 0 %]Disabled[% END %]</td>
|
2010-01-22 10:31:08 +00:00
|
|
|
<td>[% build.get_column('priority') %]</td>
|
2008-11-26 17:43:45 +00:00
|
|
|
[% END %]
|
2009-03-12 23:46:17 +00:00
|
|
|
<td>
|
2009-03-13 15:57:43 +00:00
|
|
|
[% INCLUDE renderFullJobNameOfBuild %]
|
2009-03-12 23:46:17 +00:00
|
|
|
</td>
|
2009-03-23 15:19:34 +00:00
|
|
|
<td>[% !showSchedulingInfo and build.get_column('releasename') ? build.get_column('releasename') : build.nixname %]</td>
|
2008-11-26 17:43:45 +00:00
|
|
|
<td><tt>[% build.system %]</tt></td>
|
|
|
|
<td>[% date.format(build.timestamp, '%Y-%m-%d %H:%M:%S') %]</td>
|
2009-07-09 14:48:15 +00:00
|
|
|
[% IF showStatusChange %]
|
|
|
|
<td>
|
|
|
|
[% IF build.get_column('statusChangeTime') %]
|
|
|
|
<a href="[% c.uri_for('/build' build.get_column('statusChangeId')) %]">
|
|
|
|
[% date.format(build.get_column('statusChangeTime'), '%Y-%m-%d %H:%M:%S') %]
|
|
|
|
</a>
|
|
|
|
[% ELSE %]
|
|
|
|
<em>never</em>
|
|
|
|
[% END %]
|
|
|
|
</td>
|
|
|
|
[% END %]
|
2010-01-07 14:25:12 +00:00
|
|
|
[% IF showDescription %]
|
2008-11-26 17:43:45 +00:00
|
|
|
<td>[% build.description %]</td>
|
2010-01-07 14:25:12 +00:00
|
|
|
[% END -%]
|
2008-11-26 17:43:45 +00:00
|
|
|
</tr>
|
|
|
|
[% END -%]
|
|
|
|
</tbody>
|
|
|
|
</table>
|
2008-11-26 23:49:51 +00:00
|
|
|
[% END %]
|
|
|
|
|
2010-01-07 14:25:12 +00:00
|
|
|
[% BLOCK renderLink %]<a href="[% uri %]">[% title %]</a>[% END %]
|
2008-11-26 23:49:51 +00:00
|
|
|
|
|
|
|
[% BLOCK showBuildStats %]
|
|
|
|
|
|
|
|
<table class="layoutTable">
|
|
|
|
<tr>
|
|
|
|
<th>Finished builds:</th>
|
|
|
|
<td>[% finishedBuilds %]</td>
|
|
|
|
</tr>
|
|
|
|
<tr>
|
2009-03-04 15:25:35 +00:00
|
|
|
<th><img src="/static/images/success.gif" alt="Succeeded" /> Succeeded builds:</th>
|
2008-11-26 23:49:51 +00:00
|
|
|
<td>[% succeededBuilds %]</td>
|
|
|
|
</tr>
|
|
|
|
<tr>
|
2009-03-04 15:25:35 +00:00
|
|
|
<th><img src="/static/images/failure.gif" alt="Failed" /> Failed builds:</th>
|
2008-11-26 23:49:51 +00:00
|
|
|
<td>[% finishedBuilds - succeededBuilds %]</td>
|
|
|
|
</tr>
|
|
|
|
<tr>
|
|
|
|
<th>Total build time:</th>
|
2009-03-13 16:04:49 +00:00
|
|
|
<td>[% INCLUDE renderDuration duration = totalBuildTime %]</td>
|
2008-11-26 23:49:51 +00:00
|
|
|
</tr>
|
|
|
|
<tr>
|
|
|
|
<th>Scheduled builds:</th>
|
|
|
|
<td>[% scheduledBuilds %]</td>
|
|
|
|
</tr>
|
|
|
|
<tr>
|
|
|
|
<th>Currently executing builds:</th>
|
|
|
|
<td>[% busyBuilds %]</td>
|
|
|
|
</tr>
|
|
|
|
</table>
|
|
|
|
|
2008-11-27 18:27:19 +00:00
|
|
|
[% END %]
|
|
|
|
|
|
|
|
|
2009-10-20 12:26:39 +00:00
|
|
|
[% BLOCK renderViewJobName -%]
|
2008-11-27 18:27:19 +00:00
|
|
|
[% IF job.description; HTML.escape(job.description); ELSE %]<tt>[% job.job %]</tt> ([% job.attrs %])[% END -%]
|
|
|
|
[% END -%]
|
2009-04-02 16:15:57 +00:00
|
|
|
|
|
|
|
|
|
|
|
[% BLOCK maybeLink -%]
|
|
|
|
[% IF uri %]<a [% HTML.attributes(href => uri) %]>[% content %]</a>[% ELSE; content; END -%]
|
|
|
|
[% END -%]
|
|
|
|
|
|
|
|
|
|
|
|
[% BLOCK renderSelection %]
|
|
|
|
[% IF edit %]
|
|
|
|
<select [% HTML.attributes(id => param, name => param) %]>
|
|
|
|
[% FOREACH name IN options.keys.sort %]
|
|
|
|
<option [% HTML.attributes(value => name) %] [% IF name == curValue; "selected='selected'"; END %]>[% options.$name %]</option>
|
|
|
|
[% END %]
|
|
|
|
</select>
|
|
|
|
[% ELSE %]
|
|
|
|
[% options.$curValue %]
|
|
|
|
[% END %]
|
|
|
|
[% END %]
|
|
|
|
|
|
|
|
|
|
|
|
[% BLOCK maybeEditString;
|
|
|
|
IF edit -%]
|
|
|
|
<input type="text" class="string [% extraClass %]" [% HTML.attributes(id => param, name => param, value => value) %] />
|
|
|
|
[% ELSE;
|
|
|
|
HTML.escape(value);
|
|
|
|
END -%]
|
|
|
|
[% END -%]
|
2010-02-05 14:48:22 +00:00
|
|
|
|
|
|
|
[% BLOCK renderFullBuildLink; %]
|
2010-02-23 13:08:58 +00:00
|
|
|
[% INCLUDE renderFullJobNameOfBuild build=build %] <a href="[% c.uri_for('/build' build.id) %]">build [% build.id %]</a>
|
2010-02-05 14:48:22 +00:00
|
|
|
[% END %]
|
|
|
|
|
|
|
|
[% BLOCK renderBuildStatusIcon; %]
|
|
|
|
[% IF build.finished %]
|
|
|
|
[% IF build.resultInfo.buildstatus == 0 %]
|
|
|
|
<img src="/static/images/checkmark_[% size %].png" alt="Succeeded" />
|
|
|
|
[% ELSIF build.resultInfo.buildstatus == 1 %]
|
|
|
|
<img src="/static/images/error_[% size %].png" alt="Failed" />
|
|
|
|
[% ELSIF build.resultInfo.buildstatus == 2 %]
|
|
|
|
<img src="/static/images/error_[% size %].png" alt="Failed" />
|
|
|
|
[% ELSIF build.resultInfo.buildstatus == 4 %]
|
|
|
|
<img src="/static/images/error_[% size %].png" alt="Failed" />
|
|
|
|
[% ELSIF build.resultInfo.buildstatus == 5 %]
|
|
|
|
<img src="/static/images/error_[% size %].png" alt="Failed" />
|
|
|
|
[% ELSE %]
|
|
|
|
<img src="/static/images/error_[% size %].png" alt="Failed" />
|
|
|
|
[% END %]
|
|
|
|
[% ELSIF build.schedulingInfo.busy %]
|
|
|
|
<img src="/static/images/help_[% size %].png" alt="Budy" />
|
|
|
|
[% ELSE %]
|
|
|
|
<img src="/static/images/help_[% size %].png" alt="Scheduled" />
|
|
|
|
[% END %]
|
|
|
|
[% END %]
|
|
|
|
|
|
|
|
[% BLOCK renderStatus; %]
|
|
|
|
[% IF build.finished %]
|
|
|
|
[% IF build.resultInfo.buildstatus == 0 %]
|
|
|
|
<img src="/static/images/success.gif" alt="Succeeded" />
|
|
|
|
<strong>Success</strong>
|
|
|
|
[% ELSIF build.resultInfo.buildstatus == 1 %]
|
|
|
|
<img src="/static/images/failure.gif" alt="Failed" />
|
|
|
|
<span class="error">Build returned a non-zero exit code</span>
|
|
|
|
[% ELSIF build.resultInfo.buildstatus == 2 %]
|
|
|
|
<img src="/static/images/failure.gif" alt="Failed" />
|
|
|
|
<span class="error">A dependency of the build failed</span>
|
|
|
|
[% ELSIF build.resultInfo.buildstatus == 4 %]
|
|
|
|
<img src="/static/images/failure.gif" alt="Failed" />
|
|
|
|
<span class="error">Cancelled by user</span>
|
|
|
|
[% ELSIF build.resultInfo.buildstatus == 5 %]
|
|
|
|
<img src="/static/images/failure.gif" alt="Failed" />
|
|
|
|
<span class="error">Build inhibited because a dependency previously failed to build</span>
|
|
|
|
[% failedDep = build.resultInfo.failedDep %]
|
|
|
|
(namely, <a href="[% c.uri_for('/build' failedDep.build.id 'nixlog' failedDep.stepnr) %]"><tt>[% failedDep.outpath %]</tt></a>)
|
|
|
|
[% ELSE %]
|
|
|
|
<img src="/static/images/failure.gif" alt="Failed" />
|
|
|
|
<span class="error">Build failed</span>
|
|
|
|
(see <a href="#nix-error">below</a>)
|
|
|
|
[% END %]
|
|
|
|
[% IF c.user_exists && (build.resultInfo.buildstatus == 3 || build.resultInfo.buildstatus == 4) %]
|
|
|
|
<form action="[% c.uri_for('/build' build.id 'restart') %]" method="post" class="inline">
|
|
|
|
<button id="restart" type="submit">Restart</button>
|
|
|
|
</form>
|
|
|
|
[% END %]
|
|
|
|
[% ELSIF build.schedulingInfo.busy %]
|
|
|
|
<strong>Build in progress</strong>
|
|
|
|
since [% INCLUDE renderDateTime timestamp = build.schedulingInfo.starttime %]
|
|
|
|
[% ELSE %]
|
|
|
|
<strong>Scheduled to be built</strong>
|
|
|
|
[% IF c.user_exists %]
|
|
|
|
<form action="[% c.uri_for('/build' build.id 'cancel') %]" method="post" class="inline">
|
|
|
|
<button id="cancel" type="submit">Cancel</button>
|
|
|
|
</form>
|
|
|
|
[% END %]
|
|
|
|
[% END %]
|
|
|
|
[% END -%]
|
|
|
|
|
2010-02-22 13:21:34 +00:00
|
|
|
[% BLOCK renderInputValue %]
|
|
|
|
[% IF input.type == "build" || input.type == "sysbuild" %]
|
|
|
|
[% INCLUDE renderFullBuildLink build=input.dependency %]</a>
|
|
|
|
[% ELSIF input.type == "string" || input.type == "boolean" %]
|
|
|
|
<tt>"[% input.value %]"</tt>
|
|
|
|
[% ELSE %]
|
|
|
|
<tt>[% input.uri %][% IF input.revision %] (r. [% input.revision %])[% END %]</tt>
|
|
|
|
[% END %]
|
|
|
|
[% END %]
|
|
|
|
|
|
|
|
[% BLOCK renderInputDiff; %]
|
|
|
|
|
|
|
|
<table class="tablesorter">
|
|
|
|
<thead>
|
|
|
|
<tr><th>Name</th><th>Change</th></tr>
|
|
|
|
</thead>
|
|
|
|
<tbody>
|
|
|
|
[% FOREACH bi1 IN build1.inputs %]
|
|
|
|
[% deletedInput = 1 %]
|
|
|
|
[% FOREACH bi2 IN build2.inputs %]
|
|
|
|
[% IF bi1.name == bi2.name %]
|
|
|
|
<tr>
|
|
|
|
[% IF bi1.type == bi2.type %]
|
|
|
|
[% IF bi1.value != bi2.value || bi1.uri != bi2.uri || bi1.revision != bi2.revision || bi1.path != bi2.path || bi1.dependency != bi2.dependency %]
|
|
|
|
<td>[% bi1.name %]</td>
|
|
|
|
<td>
|
|
|
|
[% INCLUDE renderInputValue input=bi1 %] to [% INCLUDE renderInputValue input=bi2 %]
|
|
|
|
</td>
|
|
|
|
[% END %]
|
|
|
|
[% ELSE %]
|
|
|
|
<td>[% bi1.name %]</td>
|
|
|
|
<td>Changed input type from '[% type = bi1.type; inputTypes.$type %]' to '[% type = bi2.type; inputTypes.$type %]'</td>
|
|
|
|
[% END %]
|
|
|
|
</tr>
|
|
|
|
[% deletedInput = 0 %]
|
|
|
|
[% END %]
|
|
|
|
[% END %]
|
|
|
|
[% IF deletedInput == 1 %]
|
|
|
|
<tr><td>[% bi1.name %]</td><td>Input not present in this build.</td></tr>
|
|
|
|
[% END %]
|
|
|
|
[% END %]
|
|
|
|
</tbody>
|
|
|
|
</table>
|
|
|
|
[% END %]
|
|
|
|
|