[% 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 %] [% project = build.project %] [% jobset = build.jobset %] [% job = build.job %] [% BLOCK renderOutputs %] [% start=1; FOREACH output IN outputs %] [% IF !start %],
[% END; start=0; output.path %] [% END %] [% END %] [% BLOCK renderBuildSteps %] [% FOREACH step IN build.buildsteps %] [% IF ( type == "All" ) || ( type == "Failed" && step.status != 0 ) || ( type == "Running" && step.busy == 1 ) %] [% has_log = log_exists(step.drvpath); 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; 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 %] [% step.machine.split('@').1 %] [% IF step.busy == 1 %] Building [% ELSIF step.status == 0 %] Succeeded [% ELSIF step.status == 4 %] Aborted [% ELSIF step.status == 7 %] Timed out [% ELSIF step.status == 8 %] Cached failure [% ELSE %] Failed: [% HTML.escape(step.errormsg) %] [% END %] [%%] [%+ IF has_log; INCLUDE renderLogLinks url=log inRow=1; END %]
[% END %]
[% IF build.nixexprinput %] [% WRAPPER makePopover title="Reproduce locally" classes="btn-info pull-right" placement="left" %] [% url = c.uri_for('/build' build.id 'reproduce') %]

You can reproduce this build on your own machine by downloading url) %]>a script that checks out all inputs of the build and then invokes Nix to perform the build. This script requires that you have Nix on your system.

To download and execute the script from the command line, run the following command:

$ bash <(curl  url) %]>[% HTML.escape(url) %])
[% END %] [% END %]
[% INCLUDE renderBuildStatusIcon size=128, build=build %] [% IF build.releasename %] [% ELSE %] [% END %] [% IF eval %] [% END %] [% IF build.iscachedbuild %] [% END %] [% IF build.finished %] [% END %] [% IF log_exists(build.drvpath) %] [% END %]
Build ID: [% build.id %]
Status: [% INCLUDE renderStatus build=build icon=0 %]
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: [% actualBuild = build.iscachedbuild ? cachedBuild : build; INCLUDE renderDuration duration = actualBuild.stoptime - actualBuild.starttime %]; finished at [% INCLUDE renderDateTime timestamp = actualBuild.stoptime %]
Logfile: pretty raw tail
[% IF c.user_exists && available %]
[% END %] [% IF build.buildproducts %]

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 build.busy %]

Running build steps

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

Failed build steps

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

Changes

[% 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 %] log diff This build [% INCLUDE renderDateTime timestamp = build.timestamp %] log diff
[% 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 %][% INCLUDE renderInputDiff inputs1=prevSuccessfulBuild.inputs inputs2=build.inputs %]
[% END %] [% IF build.errormsg && build.buildstatus != 5 %]

Nix error output

[% HTML.escape(build.errormsg) %]
[% END %] [% END %] [% IF logtext %]

Log

[% HTML.escape(logtext) %]
[% END %]
[% IF build.members_ %]

This build is an aggregate of the following builds:

[% INCLUDE renderBuildList builds=build.members_ %]
[% END %]
[% IF build.nixexprinput %] [% END %] [% IF build.finished && !build.iscachedbuild %] [% END %] [% IF !build.finished %] [% END %] [% IF build.finished && build.buildproducts %] [% END %]
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 %]
Long description: [% IF build.longdescription %][% HTML.escape(build.longdescription) %][% 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 %]
Queued: [% INCLUDE renderDateTime timestamp = build.timestamp %]
Build started: [% INCLUDE renderDateTime timestamp = build.starttime %]
Build finished: [% INCLUDE renderDateTime timestamp = build.stoptime %]
Priority: [% build.priority %]
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 %]
[% INCLUDE renderInputs inputs=build.inputs %] [% IF prevBuild %]

Changes since previous [% INCLUDE renderBuildLink build=prevBuild %]

[% INCLUDE renderInputDiff inputs2=build.inputs inputs1=prevBuild.inputs %] [% END %]
[% IF build.buildsteps %]
[% 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 prevBuilds %]

Build time history (in seconds)

Store path size history (in MB)

[% 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 %]
[% END %]