2GUAKGTBTNFFER343SQWSLFYIXXHJLDSGH5JHF7QMC3AVZB7Q3TQC 2VBQRQ2QUNM3ZC7I7WAXYSUVPP52IY2KLE4CVS3E4MAHL2T42KKQC PZL3SZM3U3BYJX2RGYXC6NMBG7WQHFWHSYDYXZ7Q5VZA3EDYVPIQC PMNWRTGJ4GVSMSSAWSUD57B26PCRAHMZIQ5SIWJIK7A74ENKEQLAC J5UVLXOK6EDIL5I7VKWH4V2QDS4DPD7FHRK6XBWSXFRQS4JKXFZQC YPDYBK5GXGNHZMJWC2EHO3T4BIMYK5LMP2G3ABGHOKGIWV4ONIYAC A52HEFHQNVNF2OUSWDSUYVVXLYR2UFCGOORPCN27CJJYA4UDJA3AC 6UESWI2QYHEMGWAXNDKLIL34TK46KDE6IE74DNKXLOF2HND5LZZQC LKPVSUCI2AE5OMB7R3KIHWZNBAWNAPMN7VRPQ6ZYDGMF2W54SZIAC 3PNG7NIBQQURUUPRVQXYL342OT7JUUYOMY2JJNP6YDX7SYJDZMYAC 4C7LKWH4K6KDGGJAFILOK6B5NSUND7TXEU53STGR4FNRX4QHKNIAC OEPUOUNBNTHTFZVDXREGBQCKFRCWMVP2MDVK4OA47VK2DBKEWVYAC ZI535LI6PJMKSOBJE33B3RRZ5S2JVTR3XPUDTSXJW6BZNTAHS3GQC IVEDB2LGMMWSMGGHNP7S2ANDKMJKRU66NN7SEOGY7YOMASX472MQC Y6AHH4THYQA43V77L43YM42DYRPCMDSWLUV4NKWAQYMPL4NTUIPQC 2R7GHSA4NUXPRWRPVXYDYWFIVVJGSUWUI2IPJGFN6ILZIAZGXGCAC JARRBLZDQ2JZWY7IUVPTOT7WJMBPMLFLF2MGLVGOYROAAISYGLSAC Z6MDQIGODVE7RXX5U5D64EEC2ZDEZ36Z4ZMPFYIHWBG42IXUDYFQC EX4FXA5TRG4UK4NASBDNYKW242ROLB42KE6S4I5AKV56LW6CBLHAC YFYRNNQUYHG6RUQDV3RY26ZV2HL5MRDAQO2M5QJPBZY5KIKGDUAQC ZLQL62FKDCESCE4WPLOMECUQ4GLIJTOAR2DALW2ON6AZEGIIN4KQC XHK7IGYISKWLHOOM3ZQAVLSRUNS2SV43TTKRX4XLPZZJ4DP3RWYAC KAZWI5G4DN2WUW7L2KWZR3D3QQJON4ISQYP7CRLC5HAOPIDYQGRQC TW5ZQX5ZT5EZP4ZQYB5Y53YC6VDOXC56ZDX5IFQIMO47OEGHR5ZAC HPEG2RHVNHOPB5T4ZRXANIRBMVOVY3B5GFETJRYOTDJFVAYH2TQAC WWZWUPFIQ7UFRTKUYB23S2L3QX6JNZP3UK7EP6QP65USA7EC6D3AC ADP54EI4ATQO5JCOS4D52TMCAOKXIINCFV5OOA3GYSJ4JQXQEXIAC BIZEPF2TVVOBPLUDU7BOUYRUXVQDGWI3IBAQKXRLNXPSCSK47BUQC 22JB5HNESA5OX5ABFISGCJCO6R7GF3AUTXDHGAT3PM7IDVIBKWWAC ZEEZRG2ELCFZRPLUGSFZEMT43MEMWIM7TTC7PMMGTMKQ4F2OGSFAC TH674WKJECNZ4K22DZ2N4SF53UGKG2BQRGBSNESRPDRSRND6TZHAC E3X3C5LKNTHXD4BZ4LISB6LR7UNBEZOHFITCGWBTZCGEDYSKORVAC KJOGCBGZI3H44YHCEQUVJWBMOZUQUFHHJYGPE4BD74KQPZ5VBXNQC 6KIJX24R5RRDR2UQMUAWHF3N6V6DKKL5URYSLB7IT4J5C3RO4G2AC MOX7XJ2E3XISXA7V7T4W6GEAGECGWBZ4PYSLTYBVVR4VAKOI33CQC 3SQCOHZNX4XUQU3KW6DXP65EQ2KHYZN6LTKVSKBXPTY4J3FKU2JQC L2E6EVE2RVFVDCUNRJ4CZYSQNS2DZUA5DTBETHBDUQUV2KQQRAOQC CLJQCY2XHIDNNMFBJ5PK3GQEN6RFALEFKXBJRWZPEIKR4PR5ZQ5AC LQNBKF3DKVYK3NPDGK7OLOTIWIF4HR3EKLRYNLZJB4G3NMIVBCEAC 67P45PY4GTWQXZRCMR734D5YYN2OERZM57NBB2CZXEULQT2GRFNAC VCOSLZRPLRS3ITD2JIPKZPMTCEPHN4WEFKTE5TKH3RAZ7WJKMQ4AC JLICHVE674VIYYLAKDWYO7RZ7YREVPDYR3DRRJ57DXR2OVHP34CQC TCXFZZFNJAO6UBBRHJLBXHDPCCKTXIPVFJ3YCDIBS4W7ZJTAI4NAC WHAFVCEIHCWHKY2UVRGRQORERUAK6SZJI7ZENA367ZX4EXDIQMDQC NW3ZYPCMDAFPCVDJ5HQ4EHGFDMI3U2Z4GCM6A6ER7NVRJVV4TCVAC log = c.uri_for('/build' build.id 'nixlog' step.stepnr); %]<tr [% IF has_log %] class="clickable" onclick="window.location = '[% log %]'" [% END %]><td>[% step.stepnr %]</td><td>[% IF step.type == 0 %]Build of <tt>[% INCLUDE renderOutputs outputs=step.buildstepoutputs %]</tt>[% ELSE %]Substitution of <tt>[% INCLUDE renderOutputs outputs=step.buildstepoutputs %]</tt>[% END %]</td><td>[% IF step.busy == 0;INCLUDE renderDuration duration = step.stoptime - step.starttime;ELSIF build.finished;INCLUDE renderDuration duration = build.stoptime - step.starttime;ELSE;INCLUDE renderDuration duration = curTime - step.starttime;END %]</td><td>[% step.machine.split('@').1 %]</td><td>[% IF step.busy == 1 %]<strong>Building</strong>[% ELSIF step.status == 0 %]Succeeded[% ELSIF step.status == 4 %]<span class="error">Aborted</span>[% ELSE %]<span class="error">Failed: [% HTML.escape(step.errormsg) %]</span>[% END %][%%] [%+ IF has_log; INCLUDE renderLogLinks url=log; END %]</td></tr>[% END %]
log = c.uri_for('/build' build.id 'nixlog' step.stepnr); %]<tr [% IF has_log %] class="clickable" onclick="window.location = '[% log %]'" [% END %]><td>[% step.stepnr %]</td><td>[% IF step.type == 0 %]Build of <tt>[% INCLUDE renderOutputs outputs=step.buildstepoutputs %]</tt>[% ELSE %]Substitution of <tt>[% INCLUDE renderOutputs outputs=step.buildstepoutputs %]</tt>[% END %]</td><td>[% IF step.busy == 0;INCLUDE renderDuration duration = step.stoptime - step.starttime;ELSIF build.finished;INCLUDE renderDuration duration = build.stoptime - step.starttime;ELSE;INCLUDE renderDuration duration = curTime - step.starttime;END %]</td><td>[% step.machine.split('@').1 %]</td><td>[% IF step.busy == 1 %]<strong>Building</strong>[% ELSIF step.status == 0 %]Succeeded[% ELSIF step.status == 4 %]<span class="error">Aborted</span>[% ELSE %]<span class="error">Failed: [% HTML.escape(step.errormsg) %]</span>[% END %][%%] [%+ IF has_log; INCLUDE renderLogLinks url=log; END %]</td></tr>
<ul class="nav nav-tabs"><li class="active"><a href="#tabs-summary" data-toggle="tab">Summary</a></li><li><a href="#tabs-information" data-toggle="tab">Details</a></li><li><a href="#tabs-buildinputs" data-toggle="tab">Build inputs</a></li>[% IF relatedbuilds %]<li><a href="#tabs-relatedbuilds" data-toggle="tab">Related builds</a></li>[% END %][% IF build.buildsteps %]<li><a href="#tabs-buildsteps" data-toggle="tab">Build steps</a></li>[% END %][% IF build.dependents %]<li><a href="#tabs-usedby" data-toggle="tab">Used by</a></li>[% END%][% IF prevBuilds %]<li><a href="#tabs-history" data-toggle="tab">History chart</a></li>[% END %]</ul>
<ul class="nav nav-tabs"><li class="active"><a href="#tabs-summary" data-toggle="tab">Summary</a></li><li><a href="#tabs-information" data-toggle="tab">Details</a></li><li><a href="#tabs-buildinputs" data-toggle="tab">Build inputs</a></li>[% IF relatedbuilds %]<li><a href="#tabs-relatedbuilds" data-toggle="tab">Related builds</a></li>[% END %][% IF build.buildsteps %]<li><a href="#tabs-buildsteps" data-toggle="tab">Build steps</a></li>[% END %][% IF build.dependents %]<li><a href="#tabs-usedby" data-toggle="tab">Used by</a></li>[% END%][% IF prevBuilds %]<li><a href="#tabs-history" data-toggle="tab">History chart</a></li>[% END %]</ul><div id="generic-tabs" class="tab-content"><div id="tabs-summary" class="tab-pane active">
<div id="generic-tabs" class="tab-content"><div id="tabs-summary" class="tab-pane active">
<table class="layoutTable">
<table class="layoutTable"><tr><td>[% INCLUDE renderBuildStatusIcon size=128, build=build %]</td><td><table class="layoutTable"><tr><th>Build ID:</th><td>[% build.id %]</td></tr><tr><th>Status:</th><td>[% INCLUDE renderStatus build=build icon=0 %]</td></tr><tr><th>System:</th><td><tt>[% build.system %]</tt></td></tr>[% IF build.releasename %]<tr><th>Release name:</th><td><tt>[% HTML.escape(build.releasename) %]</tt></td></tr>[% ELSE %]<tr><th>Nix name:</th><td><tt>[% build.nixname %]</tt></td></tr>[% END %][% IF build.iscachedbuild %]<tr><th>Cached from:</th><td>[% INCLUDE renderFullBuildLink build=cachedBuild %]</td></tr>[% ELSE %]<tr><th>Duration:</th><td>[% INCLUDE renderDuration duration = build.stoptime - build.starttime %]; finished at [% INCLUDE renderDateTime timestamp = build.stoptime %]</td></tr>[% END %][% IF log_exists(build.drvpath) %]
[% INCLUDE renderBuildStatusIcon size=128, build=build %]
<a class="btn btn-mini" href="[% c.uri_for('/build' build.id 'log') %]">pretty</a><a class="btn btn-mini" href="[% c.uri_for('/build' build.id 'log' 'raw') %]">raw</a><a class="btn btn-mini" href="[% c.uri_for('/build' build.id 'log' 'tail-reload') %]">tail</a>
<td><table class="layoutTable"><tr><th>Build ID:</th><td>[% build.id %]</td></tr><tr><th>Status:</th><td>[% INCLUDE renderStatus build=build icon=0 %]</td></tr><tr><th>System:</th><td><tt>[% build.system %]</tt></td></tr>[% IF build.releasename %]<tr><th>Release name:</th><td><tt>[% HTML.escape(build.releasename) %]</tt></td></tr>[% ELSE %]<tr><th>Nix name:</th><td><tt>[% build.nixname %]</tt></td></tr>[% END %][% IF build.iscachedbuild %]<tr><th>Cached from:</th><td>[% INCLUDE renderFullBuildLink build=cachedBuild %]</td></tr>[% ELSE %]<tr><th>Duration:</th><td>[% INCLUDE renderDuration duration = build.stoptime - build.starttime %]; finished at [% INCLUDE renderDateTime timestamp = build.stoptime %]</td></tr>[% END %][% IF log_exists(build.drvpath) %]<tr><th>Logfile:</th><td><a class="btn btn-mini" href="[% c.uri_for('/build' build.id 'log') %]">pretty</a><a class="btn btn-mini" href="[% c.uri_for('/build' build.id 'log' 'raw') %]">raw</a><a class="btn btn-mini" href="[% c.uri_for('/build' build.id 'log' 'tail-reload') %]">tail</a></td></tr>[% END %]</table></td>
[% IF c.user_exists && available %]<br/><form class="form-horizontal" action="[% c.uri_for('/build' build.id 'add-to-release') %]" method="post"><div class="control-group"><label class="control-label">Add to release</label><div class="controls"><input type="text" class="input" name="name"></input><button type="submit" class="btn btn-success">Apply</button></div></div></form>[% END %]
[% IF c.user_exists && available %]<br/><form class="form-horizontal" action="[% c.uri_for('/build' build.id 'add-to-release') %]" method="post"><div class="control-group"><label class="control-label">Add to release</label><div class="controls"><input type="text" class="input" name="name"></input><button type="submit" class="btn btn-success">Apply</button></div></div></form>[% END %]
[% IF build.busy %]<h3>Running build steps</h3>[% INCLUDE renderBuildSteps type="Running" %][% END %]
[% IF build.busy %]<h3>Running build steps</h3>[% INCLUDE renderBuildSteps type="Running" %][% END %]
[% IF build.finished %][% IF build.buildsteps && build.buildstatus != 0 && build.buildstatus != 6 %]<h3>Failed build steps</h3>[% INCLUDE renderBuildSteps type="Failed" %][% END %]
[% IF build.finished %][% IF build.buildsteps && build.buildstatus != 0 && build.buildstatus != 6 %]<h3>Failed build steps</h3>[% INCLUDE renderBuildSteps type="Failed" %][% END %]
[% IF prevSuccessfulBuild %]<h3>Changes</h3><table class="table table-striped table-condensed"><thead><th>Last successful build <tt>[% INCLUDE renderDateTime timestamp = prevSuccessfulBuild.timestamp %]</tt></th>[% IF prevSuccessfulBuild && firstBrokenBuild && firstBrokenBuild.id != build.id %]<th>First broken build <tt>[% INCLUDE renderDateTime timestamp = firstBrokenBuild.timestamp %]</tt><a class="btn btn-mini" href="[% c.uri_for(c.controller('API').action_for('logdiff') prevSuccessfulBuild.id firstBrokenBuild.id ) %]">log diff</a></th>[% END %]<th>This build <tt>[% INCLUDE renderDateTime timestamp = build.timestamp %]</tt><a class="btn btn-mini" href="[% c.uri_for(c.controller('API').action_for('logdiff') prevSuccessfulBuild.id build.id) %]">log diff</a></th></thead><tr><td valign="center">[% INCLUDE renderBuildStatusIcon build=prevSuccessfulBuild size=32 %] [% INCLUDE renderFullBuildLink build=prevSuccessfulBuild, hideProjectName=1, hideJobsetName=1 %]</td>[% IF prevSuccessfulBuild && firstBrokenBuild && firstBrokenBuild.id != build.id %]<td valign="center">[% INCLUDE renderBuildStatusIcon build=firstBrokenBuild size=32 %] [% INCLUDE renderFullBuildLink build=firstBrokenBuild, hideProjectName=1, hideJobsetName=1 %]</td>[% END %]<td>[% INCLUDE renderBuildStatusIcon build=build size=32 %] [% INCLUDE renderFullBuildLink build=build, hideProjectName=1, hideJobsetName=1 %]</td></tr><tr><td></td>[% IF prevSuccessfulBuild && firstBrokenBuild && firstBrokenBuild.id != build.id %]<td>[% INCLUDE renderInputDiff build1=prevSuccessfulBuild , build2=firstBrokenBuild %]</td>[% END %]<td>[% INCLUDE renderInputDiff build1=prevSuccessfulBuild , build2=build %]</td></tr></table>
[% IF prevSuccessfulBuild %]<h3>Changes</h3><table class="table table-striped table-condensed"><thead><th>Last successful build <tt>[% INCLUDE renderDateTime timestamp = prevSuccessfulBuild.timestamp %]</tt></th>[% IF prevSuccessfulBuild && firstBrokenBuild && firstBrokenBuild.id != build.id %]<th>First broken build <tt>[% INCLUDE renderDateTime timestamp = firstBrokenBuild.timestamp %]</tt><a class="btn btn-mini" href="[% c.uri_for(c.controller('API').action_for('logdiff') prevSuccessfulBuild.id firstBrokenBuild.id ) %]">log diff</a></th>
<th>This build <tt>[% INCLUDE renderDateTime timestamp = build.timestamp %]</tt><a class="btn btn-mini" href="[% c.uri_for(c.controller('API').action_for('logdiff') prevSuccessfulBuild.id build.id) %]">log diff</a></th></thead><tr><td valign="center">[% INCLUDE renderBuildStatusIcon build=prevSuccessfulBuild size=32 %] [% INCLUDE renderFullBuildLink build=prevSuccessfulBuild, hideProjectName=1, hideJobsetName=1 %]</td>[% IF prevSuccessfulBuild && firstBrokenBuild && firstBrokenBuild.id != build.id %]<td valign="center">[% INCLUDE renderBuildStatusIcon build=firstBrokenBuild size=32 %] [% INCLUDE renderFullBuildLink build=firstBrokenBuild, hideProjectName=1, hideJobsetName=1 %]</td>[% END %]<td>[% INCLUDE renderBuildStatusIcon build=build size=32 %] [% INCLUDE renderFullBuildLink build=build, hideProjectName=1, hideJobsetName=1 %]</td></tr><tr><td></td>[% IF prevSuccessfulBuild && firstBrokenBuild && firstBrokenBuild.id != build.id %]<td>[% INCLUDE renderInputDiff build1=prevSuccessfulBuild , build2=firstBrokenBuild %]</td>[% END %]<td>[% INCLUDE renderInputDiff build1=prevSuccessfulBuild , build2=build %]</td></tr></table>[% END %]
[% IF logtext %]<h2>Log</h2><pre class="buildlog">[% HTML.escape(logtext) %]</pre>[% END %]</div><div id="tabs-information" class="tab-pane">
</div>
<table class="layoutTable">[% IF build.nixexprinput %]<tr><th>Nix expression:</th><td>file <tt>[% HTML.escape(build.nixexprpath) %]</tt> in input <tt>[% HTML.escape(build.nixexprinput) %]</tt></td></tr>[% END %]<tr><th>Nix name:</th><td><tt>[% build.nixname %]</tt></td></tr><tr><th>Short description:</th><td>[% IF build.description %][% HTML.escape(build.description) %][% ELSE %]<em>(not given)</em>[% END %]</td></tr><tr><th>Long description:</th><td>[% IF build.longdescription %][% HTML.escape(build.longdescription) %][% ELSE %]<em>(not given)</em>[% END %]</td></tr><tr><th>License:</th><td>[% IF build.license %][% HTML.escape(build.license) %][% ELSE %]<em>(not given)</em>[% END %]</td></tr><tr><th>Homepage:</th><td>[% IF build.homepage %]<a [% HTML.attributes(href => build.homepage) %]>[% HTML.escape(build.homepage) %]</a>[% ELSE %]<em>(not given)</em>[% END %]</td></tr><tr><th>Maintainer(s):</th><td>[% IF build.maintainers %][% HTML.escape(build.maintainers) %][% ELSE %]<em>(not given)</em>[% END %]</td></tr><tr><th>System:</th><td><tt>[% build.system %]</tt></td></tr><tr><th>Derivation store path:</th><td><tt>[% build.drvpath %]</tt>[% IF drvAvailable %](<a href="[% c.uri_for('/build' build.id 'deps') %]#buildtime">build-time dependencies</a>)[% END %]</td></tr><tr><th>Output store paths:</th><td><tt>[% INCLUDE renderOutputs outputs=build.buildoutputs %]</tt>[% IF available %](<a href="[% c.uri_for('/build' build.id 'deps') %]#runtime">runtime dependencies</a>)[% END %]</td></tr><tr><th>Time added:</th><td>[% INCLUDE renderDateTime timestamp = build.timestamp %]</td></tr>[% IF build.finished && build.buildstatus != 4 %]<tr><th>Build started:</th><td>[% IF build.starttime %][% INCLUDE renderDateTime timestamp = build.starttime %][% ELSE %]<em>(cached build)</em>[% END %]</td></tr><tr><th>Build finished:</th><td>[% IF build.stoptime %][% INCLUDE renderDateTime timestamp = build.stoptime %][% ELSE %]<em>(cached build)</em>[% END %]</td></tr>[% END %][% IF !build.finished %]<tr><th>Priority:</th><td>[% build.priority %]</td></tr>[% END %][% IF build.finished && build.buildproducts %]<tr><th>Availability:</th><td>[% IF !available %]<em>Build output is no longer available</em>[% ELSIF build.keep %]<em>Build output will be kept permanently</em>[% ELSE %]<em>Build output is available, but may be garbage-collected</em>[% END %]</td></tr>[% END %]</table></div><div id="tabs-buildinputs" class="tab-pane">
<div id="tabs-information" class="tab-pane">
<table class="tablesorter table table-striped table-condensed"><thead><tr><th>Name</th><th>Type</th><th>Value</th><th>Revision</th><th>Store path</th></tr></thead><tbody>[% FOREACH input IN build.inputs %]<tr><td><tt>[% input.name %]</tt></td><td><tt>[% type = input.type; inputTypes.$type %]</tt></td><td>[% IF input.type == "build" || input.type == "sysbuild" %][% INCLUDE renderFullBuildLink build=input.dependency %][% ELSIF input.type == "string" || input.type == "boolean" %]<tt>"[% input.value %]"</tt>[% ELSE %]<tt>[% input.uri %]</tt>[% END %]</td><td>[% IF input.revision %][% input.revision %][% END %]</td><td><tt>[% input.path %]</tt></td></tr>[% END %]</tbody></table>
<table class="layoutTable">[% IF build.nixexprinput %]<tr><th>Nix expression:</th><td>file <tt>[% HTML.escape(build.nixexprpath) %]</tt> in input <tt>[% HTML.escape(build.nixexprinput) %]</tt></td></tr>[% END %]<tr><th>Nix name:</th><td><tt>[% build.nixname %]</tt></td></tr><tr><th>Short description:</th><td>[% IF build.description %][% HTML.escape(build.description) %][% ELSE %]<em>(not given)</em>[% END %]</td></tr><tr><th>Long description:</th><td>[% IF build.longdescription %][% HTML.escape(build.longdescription) %][% ELSE %]<em>(not given)</em>[% END %]</td></tr><tr><th>License:</th><td>[% IF build.license %][% HTML.escape(build.license) %][% ELSE %]<em>(not given)</em>[% END %]</td></tr><tr><th>Homepage:</th><td>[% IF build.homepage %]<a [% HTML.attributes(href => build.homepage) %]>[% HTML.escape(build.homepage) %]</a>[% ELSE %]<em>(not given)</em>[% END %]</td></tr><tr><th>Maintainer(s):</th><td>[% IF build.maintainers %][% HTML.escape(build.maintainers) %][% ELSE %]<em>(not given)</em>[% END %]</td></tr><tr><th>System:</th><td><tt>[% build.system %]</tt></td></tr><tr><th>Derivation store path:</th><td><tt>[% build.drvpath %]</tt>[% IF drvAvailable %] (<a href="[% c.uri_for('/build' build.id 'deps') %]#buildtime">build-time dependencies</a>)[% END %]</td></tr><tr><th>Output store paths:</th><td><tt>[% INCLUDE renderOutputs outputs=build.buildoutputs %]</tt> [% IF available %](<a href="[% c.uri_for('/build' build.id 'deps') %]#runtime">runtime dependencies</a>)[% END %]</td></tr><tr><th>Time added:</th><td>[% INCLUDE renderDateTime timestamp = build.timestamp %]</td></tr>[% IF build.finished && build.buildstatus != 4 %]<tr><th>Build started:</th><td>[% IF build.starttime %][% INCLUDE renderDateTime timestamp = build.starttime %][% ELSE %]<em>(cached build)</em>[% END %]</td></tr><tr><th>Build finished:</th><td>[% IF build.stoptime %][% INCLUDE renderDateTime timestamp = build.stoptime %][% ELSE %]<em>(cached build)</em>[% END %]</td></tr>[% END %][% IF !build.finished %]<tr><th>Priority:</th><td>[% build.priority %]</td></tr>[% END %][% IF build.finished && build.buildproducts %]<tr><th>Availability:</th><td>[% IF !available %]<em>Build output is no longer available</em>[% ELSIF build.keep %]<em>Build output will be kept permanently</em>[% ELSE %]<em>Build output is available, but may be garbage-collected</em>[% END %]</td></tr>[% END %]</table></div>
[% IF prevBuild %]<h3>Changes since previous build: [% INCLUDE renderFullBuildLink build=prevBuild, hideProjectName=1, hideJobsetName=1 %]</h3>[% INCLUDE renderInputDiff build2=build , build1=prevBuild %]
<table class="tablesorter table table-striped table-condensed"><thead><tr><th>Name</th><th>Type</th><th>Value</th><th>Revision</th><th>Store path</th></tr></thead><tbody>[% FOREACH input IN build.inputs %]<tr><td><tt>[% input.name %]</tt></td><td><tt>[% type = input.type; inputTypes.$type %]</tt></td><td>[% IF input.type == "build" || input.type == "sysbuild" %][% INCLUDE renderFullBuildLink build=input.dependency %][% ELSIF input.type == "string" || input.type == "boolean" %]<tt>"[% input.value %]"</tt>[% ELSE %]<tt>[% input.uri %]</tt>[% END %]</td><td>[% IF input.revision %][% input.revision %][% END %]</td><td><tt>[% input.path %]</tt></td></tr>
[% IF relatedbuilds %]<div id="tabs-relatedbuilds" class="tab-pane"><p>The following builds are part of the same jobset evaluation that produced this build.</p>[% INCLUDE renderBuildList builds=relatedbuilds hideProjectName=1 hideJobsetName=1 %]</div>[% END %]
[% IF prevBuild %]<h3>Changes since previous build: [% INCLUDE renderFullBuildLink build=prevBuild, hideProjectName=1, hideJobsetName=1 %]</h3>[% INCLUDE renderInputDiff build2=build , build1=prevBuild %][% END %]
<table class="tablesorter table table-condensed table-striped"><thead><tr><th>Build</th><th>Input name</th><th>System</th><th>Timestamp</th></tr></thead><tbody>[% FOREACH input IN build.dependents %]<tr><td>[% INCLUDE renderFullBuildLink build=input.build %]</td><td><tt>[% input.name %]</tt></td><td><tt>[% input.build.system %]</tt></td><td>[% INCLUDE renderDateTime timestamp = input.build.timestamp %]</td></tr>[% END %]</tbody></table>
<table class="tablesorter table table-condensed table-striped"><thead><tr><th>Build</th><th>Input name</th><th>System</th><th>Timestamp</th></tr></thead><tbody>[% FOREACH input IN build.dependents %]<tr><td>[% INCLUDE renderFullBuildLink build=input.build %]</td><td><tt>[% input.name %]</tt></td><td><tt>[% input.build.system %]</tt></td><td>[% INCLUDE renderDateTime timestamp = input.build.timestamp %]</td></tr>[% END %]</tbody></table>
[% END %][% IF prevBuilds %]<div id="tabs-history" class="tab-pane"><h2>Build time history (in seconds)</h2><div id="placeholder" style="width:800px;height:400px;"></div><div id="overview" style="margin-left:50px;margin-top:20px;width:600px;height:50px"></div><script src="/static/js/flot/jquery.flot.js" type="text/javascript"></script><script src="/static/js/flot/jquery.flot.selection.js" type="text/javascript"></script><script type="text/javascript">$(function() {var d = [];var ids = [];[% FOREACH prevbuild IN prevBuilds %][% IF prevbuild.build.starttime != 0 %]d.push([[% prevbuild.starttime * 1000 %],[% prevbuild.get_column('actualBuildTime') %]]);ids[[% prevbuild.starttime * 1000 %]] = [% prevbuild.id %] ;[% END %][% END %]var options = {xaxis: { mode: "time" },selection: { mode: "x" },points: { show: true },lines: { show: true },grid: {clickable: true,hoverable: true,hoverFill: '#444',hoverRadius: 4,},};
[% END %]
var plot = $.plot($("#placeholder"), [d], options);
<script src="/static/js/flot/jquery.flot.js" type="text/javascript"></script><script src="/static/js/flot/jquery.flot.selection.js" type="text/javascript"></script><script type="text/javascript">$(function() {var d = [];var ids = [];[% FOREACH prevbuild IN prevBuilds; IF prevbuild.build.starttime != 0 %]d.push([[% prevbuild.starttime * 1000 %],[% prevbuild.get_column('actualBuildTime') %]]);ids[[% prevbuild.starttime * 1000 %]] = [% prevbuild.id %] ;[% END; END %]
var overview = $.plot($("#overview"), [d], {series: {lines: { show: true, lineWidth: 1 },shadowSize: 0},xaxis: { ticks: [], mode: "time" },yaxis: { ticks: [], min: 0, autoscaleMargin: 0.1 },selection: { mode: "x" }});// now connect the two
var options = {xaxis: { mode: "time" },selection: { mode: "x" },points: { show: true },lines: { show: true },grid: {clickable: true,hoverable: true,hoverFill: '#444',hoverRadius: 4,},};
$("#overview").bind("plotselected", function (event, ranges) {plot.setSelection(ranges);});
var overview = $.plot($("#overview"), [d], {series: {lines: { show: true, lineWidth: 1 },shadowSize: 0},xaxis: { ticks: [], mode: "time" },yaxis: { ticks: [], min: 0, autoscaleMargin: 0.1 },selection: { mode: "x" }});
$("#placeholder").bind("plotclick", function (e, pos, item) {if (item) {plot.highlight(item.series, item.datapoint);buildid = ids[item.datapoint[0]];window.location = "/build/"+buildid;}});});
// now connect the two
<h2>Store path size history (in MB)</h2><div id="placeholder-size" style="width:800px;height:400px;"></div><div id="overview-size" style="margin-left:50px;margin-top:20px;width:600px;height:50px"></div><script type="text/javascript">$(function() {var d = [];var ids = [];[% FOREACH prevbuild IN prevBuilds %][% IF prevbuild.size != 0 %]d.push([[% prevbuild.starttime * 1000 %],[% prevbuild.size / (1024*1024.0) %]]);ids[[% prevbuild.starttime * 1000 %]] = [% prevbuild.id %] ;[% END %][% END %]
// don't fire event on the overview to prevent eternal loopoverview.setSelection(ranges, true);});
var options = {xaxis: { mode: "time" },selection: { mode: "x" },points: { show: true },lines: { show: true },grid: {clickable: true,hoverable: true,hoverFill: '#444',hoverRadius: 4,},};
$("#overview").bind("plotselected", function (event, ranges) {plot.setSelection(ranges);});
var plot = $.plot($("#placeholder-size"), [d], options);
<h2>Store path size history (in MB)</h2><div id="placeholder-size" style="width:800px;height:400px;"></div><div id="overview-size" style="margin-left:50px;margin-top:20px;width:600px;height:50px"></div><script type="text/javascript">$(function() {var d = [];var ids = [];[% FOREACH prevbuild IN prevBuilds; IF prevbuild.size != 0 %]d.push([[% prevbuild.starttime * 1000 %],[% prevbuild.size / (1024*1024.0) %]]);ids[[% prevbuild.starttime * 1000 %]] = [% prevbuild.id %] ;[% END; END %]
var overview = $.plot($("#overview-size"), [d], {series: {lines: { show: true, lineWidth: 1 },shadowSize: 0},xaxis: { ticks: [], mode: "time" },yaxis: { ticks: [], min: 0, autoscaleMargin: 0.1 },selection: { mode: "x" }});
var options = {xaxis: { mode: "time" },selection: { mode: "x" },points: { show: true },lines: { show: true },grid: {clickable: true,hoverable: true,hoverFill: '#444',hoverRadius: 4,},};
$("#placeholder-size").bind("plotselected", function (event, ranges) {// do the zoomingplot = $.plot($("#placeholder-size"), [d],$.extend(true, {}, options, {xaxis: { min: ranges.xaxis.from, max: ranges.xaxis.to }}));
var overview = $.plot($("#overview-size"), [d], {series: {lines: { show: true, lineWidth: 1 },shadowSize: 0},xaxis: { ticks: [], mode: "time" },yaxis: { ticks: [], min: 0, autoscaleMargin: 0.1 },selection: { mode: "x" }});
$("#overview-size").bind("plotselected", function (event, ranges) {plot.setSelection(ranges);});
$("#placeholder-size").bind("plotselected", function (event, ranges) {// do the zoomingplot = $.plot($("#placeholder-size"), [d],$.extend(true, {}, options, {xaxis: { min: ranges.xaxis.from, max: ranges.xaxis.to }}));
$("#placeholder-size").bind("plotclick", function (e, pos, item) {if (item) {plot.highlight(item.series, item.datapoint);buildid = ids[item.datapoint[0]];window.location = "/build/"+buildid;}});});
// don't fire event on the overview to prevent eternal loopoverview.setSelection(ranges, true);});