[% WRAPPER layout.tt title="Build $id of job $project.name:$jobset.name:$job.name" %] [% PROCESS common.tt %] [% PROCESS "product-list.tt" %] [% USE HTML %] [% USE Date %] [% isAggregate = constituents.size > 0; busy = 0; building = 0; FOR step IN steps; IF step.busy; busy = 1; IF step.drvpath == build.drvpath; building = 1; END; END; END; %] [% BLOCK renderOutputs %] [% start=1; FOREACH output IN outputs %] [% IF !start %],
[% END; start=0; output.path %] [% END %] [% END %] [% BLOCK renderBuildSteps %] [% FOREACH step IN steps %] [% IF ( type == "All" ) || ( type == "Failed" && step.busy == 0 && step.status != 0 ) || ( type == "Running" && step.busy != 0 ) %] [% has_log = seen.${step.drvpath} ? 0 : buildStepLogExists(step); seen.${step.drvpath} = 1; log = c.uri_for('/build' build.id 'nixlog' step.stepnr); %] [% END %] [% END %]
NrWhatDurationMachineStatus
[% step.stepnr %] [% IF step.type == 0 %] Build of [% INCLUDE renderOutputs outputs=step.buildstepoutputs %] [% ELSE %] Substitution of [% INCLUDE renderOutputs outputs=step.buildstepoutputs %] [% END %] [% IF step.busy == 0; IF step.stoptime; INCLUDE renderDuration duration = step.stoptime - step.starttime; ELSE; %]n/a[% END; ELSIF build.finished; INCLUDE renderDuration duration = build.stoptime - step.starttime; ELSE; INCLUDE renderDuration duration = curTime - step.starttime; END %] [% IF step.busy != 0 || ((step.machine || step.starttime) && (step.status == 0 || step.status == 1 || step.status == 3 || step.status == 4 || step.status == 7)); INCLUDE renderMachineName machine=step.machine; ELSE; "n/a"; END %] [% IF step.busy != 0 %] [% IF step.busy == 1 %] Preparing [% ELSIF step.busy == 10 %] Connecting [% ELSIF step.busy == 20 %] Sending inputs [% ELSIF step.busy == 30 %] Building [% ELSIF step.busy == 40 %] Receiving outputs [% ELSIF step.busy == 50 %] Post-processing [% ELSE %] Unknown state [% END %] [% ELSIF step.status == 0 %] [% IF step.isnondeterministic %] Succeeded with non-determistic result [% ELSE %] Succeeded [% END %] [% IF step.timesbuilt && step.timesbuilt > 1 %] ([% step.timesbuilt %] times) [% END %] [% ELSIF step.status == 3 %] Aborted[% IF step.errormsg %]: [% HTML.escape(step.errormsg) %][% END %] [% ELSIF step.status == 4 %] Cancelled [% ELSIF step.status == 7 %] Timed out [% ELSIF step.status == 8 %] Cached failure [% ELSIF step.status == 9 %] Unsupported system type [% ELSIF step.status == 10 %] Log limit exceeded [% ELSIF step.status == 11 %] Output limit exceeded [% ELSIF step.status == 12 %] Non-determinism detected [% IF step.timesbuilt %] after [% step.timesbuilt %] times[% END %] [% ELSIF step.errormsg %] Failed: [% HTML.escape(step.errormsg) %] [% ELSE %] Failed [% END %] [%%] [%+ IF has_log; INCLUDE renderLogLinks url=log inRow=1; END %] [%+ IF step.propagatedfrom; %](propagated from [% INCLUDE renderBuildIdLink id=step.propagatedfrom.get_column('id') %])[% END %]
[% END %]
[% INCLUDE renderBuildStatusIcon size=128 build=build %] [% IF build.releasename %] [% ELSE %] [% END %] [% IF eval %] [% END %] [% IF build.iscachedbuild %] [% END %] [% actualBuild = build.iscachedbuild ? cachedBuild : build %] [% IF (!isAggregate || !build.ischannel) && build.finished; %] [% IF actualBuild %] [% END %] [% END %] [% IF (!build.finished && building) || (build.finished && (!isAggregate || !build.ischannel) && buildLogExists(build)) %] [% END %]
Build ID: [% build.id %]
Status: [% INCLUDE renderStatus build=build icon=0 busy=busy %] [% IF isAggregate; nrConstituents = 0; nrFinished = 0; nrFailedConstituents = 0; FOREACH b IN constituents; nrConstituents = nrConstituents + 1; IF b.finished; nrFinished = nrFinished + 1; END; IF b.finished && b.buildstatus != 0; nrFailedConstituents = nrFailedConstituents + 1; END; END; %]; [%+ IF nrFinished == nrMembers && nrFailedConstituents == 0 %] all [% nrConstituents %] constituent builds succeeded [% ELSE %] [% nrFailedConstituents %] out of [% nrConstituents %] constituent builds failed [% IF nrFinished < nrConstituents %] ([% nrConstituents - nrFinished %] still pending) [% END %] [% END %] [% END %]
System: [% build.system %]
Release name: [% HTML.escape(build.releasename) %]
Nix name: [% build.nixname %]
Part of: evaluation [% eval.id %] [% IF nrEvals > 1 +%] (and [% nrEvals - 1 %] others)[% END %]
Cached from: [% IF cachedBuild; INCLUDE renderFullBuildLink build=cachedBuild; ELSE %]unknown[% END %]
Duration: [% INCLUDE renderDuration duration = actualBuild.stoptime - actualBuild.starttime %]
Finished at: [% INCLUDE renderDateTime timestamp = build.stoptime; %]
Logfile: [% actualLog = cachedBuildStep ? c.uri_for('/build' cachedBuild.id 'nixlog' cachedBuildStep.stepnr) : c.uri_for('/build' build.id 'log') %] pretty raw tail
[% IF build.ischannel || (build.buildproducts && !isAggregate) %]

Build products

[% IF !available %]

Note: this build is no longer available.

[% END %] [% INCLUDE renderProductList latestRoot=['/job' build.project.name build.jobset.name build.job.name 'latest'] %] [% END %] [% IF busy %]

Running build steps

[% INCLUDE renderBuildSteps type="Running" %] [% END %] [% IF build.finished %] [% IF steps && build.buildstatus != 0 && build.buildstatus != 4 && build.buildstatus != 6 %]

Failed build steps

[% INCLUDE renderBuildSteps type="Failed" %] [% END %] [% IF otherEval %]

Changes

[% INCLUDE renderInputDiff inputs2=eval.jobsetevalinputs inputs1=otherEval.jobsetevalinputs %] [% END %] [% IF prevSuccessfulBuild %]

Previous builds

[% IF prevSuccessfulBuild && firstBrokenBuild && firstBrokenBuild.id != build.id %] [% END %] [% IF prevSuccessfulBuild && firstBrokenBuild && firstBrokenBuild.id != build.id %] [% END %] [% IF prevSuccessfulBuild && firstBrokenBuild && firstBrokenBuild.id != build.id %] [% END %]
Last successful build [% INCLUDE renderDateTime timestamp = prevSuccessfulBuild.timestamp %]First broken build [% INCLUDE renderDateTime timestamp = firstBrokenBuild.timestamp %] This build [% INCLUDE renderDateTime timestamp = build.timestamp %]
[% INCLUDE renderBuildStatusIcon build=prevSuccessfulBuild size=32 %] [% INCLUDE renderBuildLink build=prevSuccessfulBuild %][% INCLUDE renderBuildStatusIcon build=firstBrokenBuild size=32 %] [% INCLUDE renderBuildLink build=firstBrokenBuild %][% INCLUDE renderBuildStatusIcon build=build size=32 %] [% INCLUDE renderBuildLink build=build %]
[% INCLUDE renderInputDiff inputs1=prevSuccessfulBuild.inputs inputs2=firstBrokenBuild.inputs %]
[% END %] [% END %]
[% IF isAggregate %]

This build is an aggregate of the following builds:

[% INCLUDE renderBuildList builds=constituents hideProjectName=1 hideJobsetName=1 %]
[% END %]
[% IF build.finished && !build.iscachedbuild %] [% END %] [% IF !build.finished %] [% END %] [% IF build.nixexprinput %] [% END %] [% chartsURL = c.uri_for('/job' build.project.name build.jobset.name build.job.name) _ "#tabs-charts" %] [% IF build.finished && build.closuresize %] [% END %] [% IF build.finished && build.closuresize %] [% END %] [% IF build.finished && build.buildproducts %] [% END %]
Queued at: [% INCLUDE renderDateTime timestamp = build.timestamp %]
Build started: [% INCLUDE renderDateTime timestamp = build.starttime %]
Build finished: [% INCLUDE renderDateTime timestamp = build.stoptime %]
Priority: [% build.priority %]
Nix expression: file [% HTML.escape(build.nixexprpath) %] in input [% HTML.escape(build.nixexprinput) %]
Nix name: [% build.nixname %]
Short description: [% IF build.description %][% HTML.escape(build.description) %][% ELSE %]not given[% END %]
License: [% IF build.license %][% HTML.escape(build.license) %][% ELSE %]not given[% END %]
Homepage: [% IF build.homepage %] build.homepage) %]>[% HTML.escape(build.homepage) %][% ELSE %]not given[% END %]
Maintainer(s): [% IF build.maintainers %][% HTML.escape(build.maintainers) %][% ELSE %]not given[% END %]
System: [% build.system %]
Derivation store path: [% build.drvpath %]
Output store paths: [% INCLUDE renderOutputs outputs=build.buildoutputs %]
Closure size: [% mibs(build.closuresize / (1024 * 1024)) %] MiB (history)
Output size: [% mibs(build.size / (1024 * 1024)) %] MiB (history)
Availability: [% IF !available %] Build output is no longer available [% ELSIF build.keep %] Build output will be kept permanently [% ELSE %] Build output is available, but may be garbage-collected [% END %]
[% IF build.finished && build.buildmetrics %]

Metrics

[% FOREACH metric IN build.buildmetrics %] [% END %]
NameValue
c.uri_for('/job' project.name jobset.name job.name 'metric' metric.name)) %]">[%HTML.escape(metric.name)%] [%metric.value%] [%metric.unit%]
[% END %]
[% IF build.inputs && build.inputs.size > 0 %] [% INCLUDE renderInputs inputs=build.inputs %] [% ELSIF eval %] [% INCLUDE renderInputs inputs=eval.jobsetevalinputs %] [% END %]
[% IF steps %]
[% INCLUDE renderBuildSteps type="All" %]
[% END %] [% IF build.dependents %]

The following builds have used this build as an input:

[% FOREACH input IN build.dependents %] [% END %]
BuildInput nameSystemTimestamp
[% INCLUDE renderFullBuildLink build=input.build %] [% input.name %] [% input.build.system %] [% INCLUDE renderDateTime timestamp = input.build.timestamp %]
[% END %] [% IF drvAvailable %] [% INCLUDE makeLazyTab tabName="tabs-build-deps" uri=c.uri_for('/build' build.id 'build-deps') %] [% END %] [% IF available %] [% INCLUDE makeLazyTab tabName="tabs-runtime-deps" uri=c.uri_for('/build' build.id 'runtime-deps') %] [% END %]
[% IF c.user_exists && available && project.releases %] [% END %] [% END %]