[%
USE date;
USE String;
USE HTML;
USE Math;
USE mibs=format("%.2f");
BLOCK renderDateTime;
date.format(timestamp, '%Y-%m-%d %H:%M:%S');
END;
BLOCK renderRelativeDate;
ago = date.now - timestamp;
IF ago >= 0 && ago < 60; THEN;
ago _ 's ago';
ELSIF ago >= 0 && ago < 60 * 60; THEN;
Math.int(ago / 60) _ 'm ago';
ELSIF ago >= 0 && ago < 24 * 60 * 60; THEN;
Math.int(ago / (60 * 60)) _ 'h ago';
ELSIF ago >= 0 && ago < 7 * 24 * 60 * 60; THEN;
Math.int(ago / (24 * 60 * 60)) _ 'd ago';
ELSE;
date.format(timestamp, '%Y-%m-%d');
END;
END;
BLOCK renderProjectName %]
[% project %]
[% END;
BLOCK renderJobsetName %]
[% jobset %]
[% END;
BLOCK renderJobName %]
[% job %]
[% END;
BLOCK renderFullJobsetName %]
[% INCLUDE renderProjectName inRow=0 %]:[% INCLUDE renderJobsetName %]
[% END;
BLOCK renderFullJobName %]
[% IF !hideProjectName; INCLUDE renderProjectName inRow=0 %]:[% END; IF !hideJobsetName; INCLUDE renderJobsetName inRow=0 %]:[% END; INCLUDE renderJobName %]
[% END;
BLOCK renderFullJobNameOfBuild;
INCLUDE renderFullJobName project=build.get_column("project") jobset = build.get_column("jobset") job = build.get_column("job");
END;
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;
BLOCK renderBuildListHeader %]
[% IF !hideResultInfo %]
[% END %]
[% IF showSchedulingInfo %]
[% END %]
#
[% IF !hideJobName %]
Job
[% END %]
[% IF showSchedulingInfo %]Queued at[% ELSE %]Finished at[% END %]
Package/release name
System
[% IF showDescription %]
Description
[% END %]
[% END;
BLOCK renderBuildListBody;
FOREACH build IN builds; link = c.uri_for('/build' build.id) %]
[% IF !hideResultInfo %]
[% INCLUDE renderBuildStatusIcon size=16 busy=(showSchedulingInfo ? 1 : 0) buildstatus=build.buildstatus %]
[% END %]
[% IF showSchedulingInfo %]
[% IF build.busy %]Started [% ELSE %]Queued [% END %]
[% END %]
[% build.id %]
[% IF !hideJobName %]
[% IF !hideJobsetName %][%build.get_column("project")%]:[%build.get_column("jobset")%]:[% END %][%build.get_column("job")%]
[% END %]
[% t = showSchedulingInfo ? build.timestamp : build.stoptime; IF t; INCLUDE renderRelativeDate timestamp=(showSchedulingInfo ? build.timestamp : build.stoptime); ELSE; "-"; END %]
[% !showSchedulingInfo and build.get_column('releasename') ? build.get_column('releasename') : build.nixname %]
[% build.system %]
[% IF showDescription %]
[% build.description %]
[% END %]
[% END;
IF linkToAll %]
More...
[% END;
END;
BLOCK renderBuildListFooter %]
[% END;
BLOCK renderBuildList;
INCLUDE renderBuildListHeader;
INCLUDE renderBuildListBody;
INCLUDE renderBuildListFooter;
END;
BLOCK renderLink %][% title %] [% END;
BLOCK maybeLink;
IF uri %] uri, class => class); IF confirmmsg +%] onclick="javascript:return confirm('[% confirmmsg %]')"[% END %]>[% content %] [% ELSE; content; END;
END;
BLOCK renderSelection;
IF edit;
IF radiobuttons; %]
[% FOREACH name IN options.keys.sort %]
param, name => param, value => name) %]
[% IF name == curValue; "checked='1'"; END %]>
[% options.$name %]
[% END %]
[% ELSE %]
param, name => param) %]>
[% FOREACH name IN options.keys.sort %]
name) %]>[% options.$name %]
[% END %]
[% END;
ELSE;
options.$curValue;
END;
END;
BLOCK editString; %]
param, name => param, value => value) %] />
[% END;
BLOCK renderFullBuildLink;
INCLUDE renderFullJobNameOfBuild build=build %] build [% build.id %] [%
END;
BLOCK renderBuildIdLink; %]
build [% id %]
[% END;
BLOCK renderBuildLink; INCLUDE renderBuildIdLink id=build.id; END;
BLOCK renderBuildStatusIcon;
finished = build != undef ? build.finished : 1;
busy = busy != undef ? busy : build.busy;
buildstatus = buildstatus != undef ? buildstatus : build.buildstatus;
IF finished;
IF buildstatus == 0 %]
[% ELSIF buildstatus == 1 %]
[% ELSIF buildstatus == 2 || buildstatus == 5 %]
[% ELSIF buildstatus == 3 || buildstatus == 9 %]
[% ELSIF buildstatus == 4 %]
[% ELSIF buildstatus == 6 %]
[% ELSIF buildstatus == 7 %]
[% ELSIF buildstatus == 10 %]
[% ELSE %]
[% END;
ELSIF busy %]
[% ELSE %]
[% END;
END;
BLOCK renderStatus;
IF build.finished;
buildstatus = build.buildstatus;
IF icon; INCLUDE renderBuildStatusIcon size=16; END;
IF buildstatus == 0 %]
Success
[% ELSIF buildstatus == 1 %]
Build returned a non-zero exit code
[% ELSIF buildstatus == 2 || buildstatus == 5 %]
A dependency of the build failed
[% ELSIF buildstatus == 4 %]
Cancelled by user
[% ELSIF buildstatus == 6 %]
Build failed with output
[% ELSIF buildstatus == 7 %]
Timed out
[% ELSIF buildstatus == 9 %]
Unsupported system type
[% ELSIF buildstatus == 10 %]
Log limit exceeded
[% ELSE %]
Aborted
(Hydra failure; see below )
[% END;
ELSIF build.busy %]
Build in progress
since [% INCLUDE renderDateTime timestamp = build.starttime;
ELSE %]
Scheduled to be built
[% END;
END;
BLOCK renderShortInputValue;
IF input.type == "build" || input.type == "sysbuild" %]
[% input.dependency.id %]
[% ELSIF input.type == "string" %]
"[% HTML.escape(input.value) %]"
[% ELSIF input.type == "nix" || input.type == "boolean" %]
[% HTML.escape(input.value) %]
[% ELSE %]
[% HTML.escape(input.uri) %][% IF input.revision %] (r[% HTML.escape(input.revision) %])[% END %]
[% END %]
[% END;
BLOCK renderDiffUri;
nouri = 1;
FOREACH m IN mappers;
base = m.baseuri;
url = bi1.uri;
path = url.replace(base, '');
IF url.match(base) %]
[% contents %]
[% nouri = 0;
END;
END;
IF nouri;
res = bi1.uri.split(' ');
url = res.0;
branch = res.1;
IF bi1.type == "hg" || bi1.type == "git" %]
[% contents %]
[% ELSE;
contents;
END;
END;
END;
BLOCK renderInputs; %]
Name Type Value Revision Store path
[% FOREACH input IN inputs %]
[% input.name %]
[% type = input.type; inputTypes.$type %]
[% IF input.type == "build" || input.type == "sysbuild" %]
[% INCLUDE renderFullBuildLink build=input.dependency %]
[% ELSIF input.type == "string" %]
"[% HTML.escape(input.value) %]"
[% ELSIF input.type == "nix" || input.type == "boolean" %]
[% HTML.escape(input.value) %]
[% ELSE %]
[% HTML.escape(input.uri) %]
[% END %]
[% IF input.revision %][% HTML.escape(input.revision) %][% END %]
[% input.path %]
[% END %]
[% END;
BLOCK renderInputDiff; %]
[% IF !nestedDiff %]
Input Changes
[% END;
IF !nestLevel;
nestLevel = 0;
END;
IF nestLevel <= 3;
FOREACH bi1 IN inputs1;
deletedInput = 1;
FOREACH bi2 IN inputs2;
IF bi1.name == bi2.name;
IF bi1.type == bi2.type;
IF bi1.value != bi2.value || bi1.uri != bi2.uri %]
[% bi1.name %] [% INCLUDE renderShortInputValue input=bi1 %] to [% INCLUDE renderShortInputValue input=bi2 %]
[% ELSIF bi1.uri == bi2.uri && bi1.revision != bi2.revision %]
[% IF bi1.type == "git" %]
[% bi1.name %] [% INCLUDE renderDiffUri contents=(bi1.revision.substr(0, 6) _ ' to ' _ bi2.revision.substr(0, 6)) %]
[% ELSE %]
[% bi1.name %] [% INCLUDE renderDiffUri contents=(bi1.revision _ ' to ' _ bi2.revision) %]
[% END %]
[% ELSIF bi1.dependency.id != bi2.dependency.id || bi1.path != bi2.path %]
[% bi1.name %] [% INCLUDE renderShortInputValue input=bi1 %] to [% INCLUDE renderShortInputValue input=bi2 %]
[% INCLUDE renderInputDiff inputs1=bi1.dependency.inputs inputs2=bi2.dependency.inputs nestedDiff=1 nestLevel=nestLevel+1 %]
[% END %]
[% ELSE %]
[% bi1.name %] Changed input type from '[% type = bi1.type; inputTypes.$type %]' to '[% type = bi2.type; inputTypes.$type %]'
[% END;
deletedInput = 0;
END;
END;
IF deletedInput == 1 %]
[% bi1.name %] Input not present in this build.
[% END;
END;
END %]
[% END;
BLOCK renderPager %]
[% END;
BLOCK renderShortEvalInput;
IF input.type == "svn" || input.type == "svn-checkout" || input.type == "bzr" || input.type == "bzr-checkout" %]
r[% input.revision %]
[% ELSIF input.type == "git" %]
[% input.revision.substr(0, 7) %]
[% ELSIF input.type == "hg" %]
[% input.revision.substr(0, 12) %]
[% ELSIF input.type == "build" || input.type == "sysbuild" %]
[% input.get_column('dependency') %]
[% ELSE %]
[% input.revision %]
[% END;
END;
BLOCK renderEvals %]
#
[% IF !jobset && !build %]
Jobset
[% END %]
Date
Input changes
Success
[% FOREACH e IN evals;
eval = e.eval;
link = c.uri_for(c.controller('JobsetEval').action_for('view'), [eval.id]) %]
[% eval.id %]
[% IF !jobset && !build %]
[% INCLUDE renderFullJobsetName project=eval.get_column('project') jobset=eval.get_column('jobset') %]
[% END %]
[% INCLUDE renderRelativeDate timestamp = eval.timestamp %]
[% IF e.changedInputs.size > 0;
sep='';
FOREACH input IN e.changedInputs;
sep; %] [% input.name %] → [% INCLUDE renderShortEvalInput input=input;
sep=', ';
END;
ELSE %]
-
[% END %]
[% e.nrSucceeded %]
[% IF e.nrFailed > 0 %]
[% e.nrFailed %]
[% END %]
[% IF e.nrScheduled > 0 %]
[% e.nrScheduled %]
[% END %]
[% IF e.diff > 0 %]
+[% e.diff %]
[% ELSIF e.diff < 0 && e.nrScheduled == 0 %]
[% e.diff %]
[% END %]
[% END;
IF linkToAll %]
More...
[% END %]
[% END;
BLOCK renderLogLinks %]
(log , raw , tail )
[% END;
BLOCK makeLazyTab %]
[% END;
BLOCK makePopover %]
content, 'data-placement' => placement || 'bottom') %]>
[% title %]
[% END;
BLOCK menuItem %]
uri) %] [%+ IF modal %]data-toggle="modal"[% END %]>
[% IF icon %] [%+ END %]
[% title %]
[% END;
BLOCK makeStar %]
[% IF starred; "★"; ELSE; "☆"; END %]
[% END;
BLOCK renderJobsetOverview %]
Name
Description
Last evaluated
Success
[% FOREACH j IN jobsets %]
[% successrate = 0 %]
[% IF j.get_column('nrscheduled') > 0 %]
[% ELSIF j.get_column('nrfailed') == 0 %]
[% ELSIF j.get_column('nrfailed') > 0 && j.get_column('nrsucceeded') > 0 %]
[% ELSE %]
[% END %]
[% IF showProject; INCLUDE renderFullJobsetName project=j.get_column('project') jobset=j.name inRow=1; ELSE; INCLUDE renderJobsetName project=j.get_column('project') jobset=j.name inRow=1; END %]
[% HTML.escape(j.description) %]
[% IF j.lastcheckedtime; INCLUDE renderDateTime timestamp = j.lastcheckedtime; ELSE; "-"; END %]
[% IF j.get_column('nrtotal') > 0 %]
[% successrate = ( j.get_column('nrsucceeded') / j.get_column('nrtotal') )*100 %]
[% IF j.get_column('nrscheduled') > 0 %]
[% class = 'label' %]
[% ELSIF successrate < 25 %]
[% class = 'label label-important' %]
[% ELSIF successrate < 75 %]
[% class = 'label label-warning' %]
[% ELSIF successrate <= 100 %]
[% class = 'label label-success' %]
[% END %]
[% END %]
[% successrate FILTER format('%d') %]%
[% IF j.get_column('nrsucceeded') > 0 %]
[% j.get_column('nrsucceeded') %]
[% END %]
[% IF j.get_column('nrfailed') > 0 %]
[% j.get_column('nrfailed') %]
[% END %]
[% IF j.get_column('nrscheduled') > 0 %]
[% j.get_column('nrscheduled') %]
[% END %]
[% END %]
[% END;
BLOCK includeFlot %]
[% END;
BLOCK createChart %]
[% END;
BLOCK renderMachineName;
machine ? stripSSHUser(machine).match('^(([^\.]|\.[0-9])*)').0 : "localhost";
END;
%]