From 9dba2127cbe8deec8523e0d1cac39b3a7a9cf01e Mon Sep 17 00:00:00 2001
From: Rob Vermaas Note: this build is no longer available. Note: this build is no longer available. The following builds have used this build as an input: The following builds have used this build as an input: This job provides the following Nix channels: This job provides the following Nix channels: This jobset provides the following Nix channels: This jobset currently contains the following [% activeJobs.size %] jobs:
-
- Build steps
+
+
+
+
+[% END %]
+
+
+
+
+ [% FOREACH step IN build.buildsteps -%]
+ [% IF (onlyFailed != 1) || (step.status != 0) -%]
+ [% log = c.uri_for('/build' build.id 'nixlog' step.stepnr) %]
+ Nr What Duration Status
+
+ [% END %]
+ [% END %]
+
+ [% step.stepnr %]
+
+ [% IF step.type == 0 %]
+ Build of [% step.outpath %]
+ [% ELSE %]
+ Substitution of [% step.outpath %]
+ [% END %]
+
+
+ [% IF step.busy == 0 %]
+ [% INCLUDE renderDuration duration = step.stoptime - step.starttime %]
+ [% ELSE %]
+ [% IF build.finished %]
+ [% INCLUDE renderDuration duration = build.resultInfo.stoptime - step.starttime %]
+ [% ELSE %]
+ [% INCLUDE renderDuration duration = curTime - step.starttime %]
+ [% END %]
+ [% END %]
+
+
+ [% IF step.busy == 1 %]
+ [% IF build.finished %]
+ Aborted
+ [% ELSE %]
+ Building
+ [% END %]
+ [% ELSIF step.status == 0 %]
+ Succeeded
+ [% ELSE %]
+ Failed: [% HTML.escape(step.errormsg) %]
+ [% END %]
+ [% IF step.logfile %]
+ (log, raw, tail)
+ [% END %]
+
+
Job [% project.name %]:[% jobset.name %]:[% job.name %] build [% id %]
[% IF !build.finished %]
@@ -24,360 +82,349 @@
[% END %]
-
Information
-
-
+
-
- Build ID:
- [% build.id %]
-
-
- Status:
-
- [% IF build.finished %]
- [% IF build.resultInfo.buildstatus == 0 %]
-
- Success
- [% ELSIF build.resultInfo.buildstatus == 1 %]
-
- Build returned a non-zero exit code
- [% ELSIF build.resultInfo.buildstatus == 2 %]
-
- A dependency of the build failed
- [% ELSIF build.resultInfo.buildstatus == 4 %]
-
- Cancelled by user
- [% ELSIF build.resultInfo.buildstatus == 5 %]
-
- Build inhibited because a dependency previously failed to build
- [% failedDep = build.resultInfo.failedDep %]
- (namely, [% failedDep.outpath %])
- [% ELSE %]
-
- Build failed
- (see below)
- [% END %]
- [% IF c.user_exists && (build.resultInfo.buildstatus == 3 || build.resultInfo.buildstatus == 4) %]
-
- [% END %]
- [% ELSIF build.schedulingInfo.busy %]
- Build in progress
- since [% INCLUDE renderDateTime timestamp = build.schedulingInfo.starttime %]
- [% ELSE %]
- Scheduled to be built
- [% IF c.user_exists %]
-
- [% END %]
- [% END %]
-
-
-
- Project:
- [% INCLUDE renderProjectName project=project.name %]
-
-
- Jobset:
- [% INCLUDE renderJobsetName project=project.name jobset=jobset.name %]
-
-
- [% IF build.nixexprinput %]
- Job name:
- [% INCLUDE renderJobName project=project.name jobset=jobset.name job=job.name %]
-
-
- [% END %]
- Nix expression:
- file [% HTML.escape(build.nixexprpath) %] in input [% HTML.escape(build.nixexprinput) %]
-
-
- [% IF build.resultInfo.releasename %]
- Nix name:
- [% build.nixname %]
-
-
- [% END %]
- Release name:
- [% HTML.escape(build.resultInfo.releasename) %]
-
-
- 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 %]
- [% IF drvAvailable %]
- (build-time dependencies: graph | list)
- [% END %]
-
-
-
- Output store path:
-
- [% build.outpath %]
- [% IF available %]
- (runtime dependencies: graph | list)
- [% END %]
-
-
-
- [% IF build.finished && build.resultInfo.buildstatus != 4 %]
- [% IF build.resultInfo.iscachedbuild && cachedBuild %]
- Time added:
- [% INCLUDE renderDateTime timestamp = build.timestamp %]
-
-
- [% END %]
-
- Cached build:
- [% cachedBuild.id %]
-
-
- Build started:
- [% IF build.resultInfo.starttime %][% INCLUDE renderDateTime timestamp = build.resultInfo.starttime %][% ELSE %](cached build)[% END %]
-
-
- Build finished:
- [% IF build.resultInfo.stoptime %][% INCLUDE renderDateTime timestamp = build.resultInfo.stoptime %][% ELSE %](cached build)[% END %]
-
-
- [% IF build.resultInfo.logfile %]
- Duration:
-
- [% IF build.resultInfo.iscachedbuild %]
- (cached build)
- [% ELSE %]
- [% INCLUDE renderDuration duration = build.resultInfo.stoptime - build.resultInfo.starttime %]
- [% END %]
-
-
-
- [% END %]
- [% END %]
- [% IF !build.finished %]
- Logfile:
-
- Available
- (raw,
- tail)
-
-
-
- [% END %]
- [% IF build.finished && build.buildproducts %]
- Priority:
- [% build.schedulingInfo.priority %]
-
-
- [% END %]
-Availability:
-
- [% IF !available %]
- Build output is no longer available
- [% ELSIF build.resultInfo.keep %]
- Build output will be kept permanently
- [% IF c.user_exists %]
-
- [% END %]
- [% ELSE %]
- Build output is available, but may be garbage-collected
- [% IF c.user_exists %]
-
- [% END %]
- [% END %]
-
-
+
+
+
+
+ [% IF c.user_exists && available %]
+
+ [% END %]
+
+ [% IF c.user_exists %]
+
+ [% END %]
-[% IF c.user_exists && available %]
-
-[% END %]
+ [% IF build.buildproducts %]
-[% IF c.user_exists %]
-
-[% END %]
+
+
+
+ [% INCLUDE renderBuildStatusIcon size=128, build=build %]
+
+
+
+
+
+
+
+ [% IF build.resultInfo.releasename %]
+ Build ID:
+ [% build.id %]
+
+
+ [% ELSE %]
+ Release name:
+ [% HTML.escape(build.resultInfo.releasename) %]
+
+
+ [% END %]
+ Nix name:
+ [% build.nixname %]
+
+
+ Status:
+
+ [% INCLUDE renderStatus build=build %]
+
+
+
+ [% IF !build.schedulingInfo %]
+ System:
+ [% build.system %]
+
+
+ [% END %]
+ [% IF build.resultInfo.logfile %]
+ Duration:
+
+ [% IF build.resultInfo.iscachedbuild %]
+ (cached from [% INCLUDE renderFullBuildLink build=cachedBuild %])
+ [% ELSE %]
+ [% INCLUDE renderDuration duration = build.resultInfo.stoptime - build.resultInfo.starttime %]
+ [% END %]
+
+
+
+ [% END %]
+ Logfile:
+
+ Available
+ (raw,
+ tail)
+
+ Build products
+
+ [% IF !available %]
+ Build products
+ [% IF build.finished %]
+ [% IF build.buildsteps && (build.resultInfo.buildstatus == 2 || build.resultInfo.buildstatus == 5)%]
+ [% INCLUDE renderBuildSteps onlyFailed=1 %]
+ [% END %]
-[% IF !available %]
- Nix error output
+
+
+ [% HTML.escape(build.resultInfo.errormsg) -%]
+
+ [% END %]
+ [% ELSIF build.schedulingInfo.busy %]
+ Log
+
+
+ [% HTML.escape(logtext) -%]
+
+ [% END %]
+ Build inputs
-
-
-
-
+
-
-
- [% FOREACH input IN build.inputs -%]
- Name Type Value Revision Store path
-
- [% END -%]
-
-[% input.name %]
- [% type = input.type; inputTypes.$type %]
-
- [% IF input.type == "build" || input.type == "sysbuild" %]
- Job [% INCLUDE renderFullJobNameOfBuild build=input.dependency %] build [% input.dependency.id %]
- [% ELSIF input.type == "string" || input.type == "boolean" %]
- "[% input.value %]"
- [% ELSE %]
- [% input.uri %]
- [% END %]
-
- [% IF input.revision %][% input.revision %][% END %]
- [% input.path %]
- Information
+
+
+
+
+
+ Build ID:
+ [% build.id %]
+
+
+ Status:
+
+ [% INCLUDE renderStatus build=build %]
+
+
+
+ Project:
+ [% INCLUDE renderProjectName project=project.name %]
+
+
+ Jobset:
+ [% INCLUDE renderJobsetName project=project.name jobset=jobset.name %]
+
+
+ [% IF build.nixexprinput %]
+ Job name:
+ [% INCLUDE renderJobName project=project.name jobset=jobset.name job=job.name %]
+
+
+ [% END %]
+ Nix expression:
+ file [% HTML.escape(build.nixexprpath) %] in input [% HTML.escape(build.nixexprinput) %]
+
+
+ [% IF build.resultInfo.releasename %]
+ Nix name:
+ [% build.nixname %]
+
+
+ [% END %]
+ Release name:
+ [% HTML.escape(build.resultInfo.releasename) %]
+
+
+ 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 %]
+ [% IF drvAvailable %]
+ (build-time dependencies: graph | list)
+ [% END %]
+
+
+
+ Output store path:
+
+ [% build.outpath %]
+ [% IF available %]
+ (runtime dependencies: graph | list)
+ [% END %]
+
+
+
+ [% IF build.finished && build.resultInfo.buildstatus != 4 %]
+ [% IF build.resultInfo.iscachedbuild && cachedBuild %]
+ Time added:
+ [% INCLUDE renderDateTime timestamp = build.timestamp %]
+
+
+ [% END %]
+
+ Cached build:
+ [% INCLUDE renderFullBuildLink build=cachedBuild %]
+
+
+ Build started:
+ [% IF build.resultInfo.starttime %][% INCLUDE renderDateTime timestamp = build.resultInfo.starttime %][% ELSE %](cached build)[% END %]
+
+
+ Build finished:
+ [% IF build.resultInfo.stoptime %][% INCLUDE renderDateTime timestamp = build.resultInfo.stoptime %][% ELSE %](cached build)[% END %]
+
+
+ [% IF build.resultInfo.logfile %]
+ Duration:
+
+ [% IF build.resultInfo.iscachedbuild %]
+ (cached build)
+ [% ELSE %]
+ [% INCLUDE renderDuration duration = build.resultInfo.stoptime - build.resultInfo.starttime %]
+ [% END %]
+
+
+
+ [% END %]
+ [% END %]
+ [% IF !build.finished %]
+ Logfile:
+
+ Available
+ (raw,
+ tail)
+
+
+
+ [% END %]
+ [% IF build.finished && build.buildproducts %]
+ Priority:
+ [% build.schedulingInfo.priority %]
+
+
+ [% END %]
+ Availability:
+
+ [% IF !available %]
+ Build output is no longer available
+ [% ELSIF build.resultInfo.keep %]
+ Build output will be kept permanently
+ [% IF c.user_exists %]
+
+ [% END %]
+ [% ELSE %]
+ Build output is available, but may be garbage-collected
+ [% IF c.user_exists %]
+
+ [% END %]
+ [% END %]
+
+ Build inputs
+
+
+
+
+
+
+
+ [% FOREACH input IN build.inputs -%]
+ Name Type Value Revision Store path
+
+ [% END -%]
+
+ [% input.name %]
+ [% type = input.type; inputTypes.$type %]
+
+ [% IF input.type == "build" || input.type == "sysbuild" %]
+ [% INCLUDE renderFullBuildLink build=input.dependency %]
+ [% ELSIF input.type == "string" || input.type == "boolean" %]
+ "[% input.value %]"
+ [% ELSE %]
+ [% input.uri %]
+ [% END %]
+
+ [% IF input.revision %][% input.revision %][% END %]
+ [% input.path %]
+ Build steps
-
-
-
-
-
+
-
-
- [% FOREACH step IN build.buildsteps -%]
- [% log = c.uri_for('/build' build.id 'nixlog' step.stepnr) %]
- Nr What Duration Status
-
- [% END %]
-
-[% step.stepnr %]
-
- [% IF step.type == 0 %]
- Build of [% step.outpath %]
- [% ELSE %]
- Substitution of [% step.outpath %]
- [% END %]
-
-
- [% IF step.busy == 0 %]
- [% INCLUDE renderDuration duration = step.stoptime - step.starttime %]
- [% ELSE %]
- [% IF build.finished %]
- [% INCLUDE renderDuration duration = build.resultInfo.stoptime - step.starttime %]
- [% ELSE %]
- [% INCLUDE renderDuration duration = curTime - step.starttime %]
- [% END %]
- [% END %]
-
-
- [% IF step.busy == 1 %]
- [% IF build.finished %]
- Aborted
- [% ELSE %]
- Building
- [% END %]
- [% ELSIF step.status == 0 %]
- Succeeded
- [% ELSE %]
- Failed: [% HTML.escape(step.errormsg) %]
- [% END %]
- [% IF step.logfile %]
- (log, raw, tail)
- [% END %]
-
- Nix error output
-
-
-[% HTML.escape(build.resultInfo.errormsg) -%]
-
-
-[% END %]
-
+
[% IF build.dependents %]
+ Used by
-
-
-
-
-
+
-
-
- [% FOREACH input IN build.dependents -%]
- Build Input name System Timestamp
-
- [% END -%]
-
-Job [% INCLUDE renderFullJobNameOfBuild build=input.build %] build [% input.build.id %]
- [% input.name %]
- [% input.build.system %]
- [% INCLUDE renderDateTime timestamp = input.build.timestamp %]
- Used by
+
+
+
+
+
+
+
+ [% FOREACH input IN build.dependents -%]
+ Build Input name System Timestamp
+
+ [% END -%]
+
+ [% INCLUDE renderFullBuildLink build=input.build %]
+ [% input.name %]
+ [% input.build.system %]
+ [% INCLUDE renderDateTime timestamp = input.build.timestamp %]
+ Log
-
-
-[% HTML.escape(logtext) -%]
-
-
-
-[% END %]
-
[% END %]
diff --git a/src/root/common.tt b/src/root/common.tt
index 1be6c0fd..a1dc377e 100644
--- a/src/root/common.tt
+++ b/src/root/common.tt
@@ -196,3 +196,72 @@
HTML.escape(value);
END -%]
[% END -%]
+
+[% BLOCK renderFullBuildLink; %]
+ Job [% INCLUDE renderFullJobNameOfBuild build=build %] build [% build.id %]
+[% END %]
+
+[% BLOCK renderBuildStatusIcon; %]
+ [% IF build.finished %]
+ [% IF build.resultInfo.buildstatus == 0 %]
+
+ [% ELSIF build.resultInfo.buildstatus == 1 %]
+
+ [% ELSIF build.resultInfo.buildstatus == 2 %]
+
+ [% ELSIF build.resultInfo.buildstatus == 4 %]
+
+ [% ELSIF build.resultInfo.buildstatus == 5 %]
+
+ [% ELSE %]
+
+ [% END %]
+ [% ELSIF build.schedulingInfo.busy %]
+
+ [% ELSE %]
+
+ [% END %]
+[% END %]
+
+[% BLOCK renderStatus; %]
+ [% IF build.finished %]
+ [% IF build.resultInfo.buildstatus == 0 %]
+
+ Success
+ [% ELSIF build.resultInfo.buildstatus == 1 %]
+
+ Build returned a non-zero exit code
+ [% ELSIF build.resultInfo.buildstatus == 2 %]
+
+ A dependency of the build failed
+ [% ELSIF build.resultInfo.buildstatus == 4 %]
+
+ Cancelled by user
+ [% ELSIF build.resultInfo.buildstatus == 5 %]
+
+ Build inhibited because a dependency previously failed to build
+ [% failedDep = build.resultInfo.failedDep %]
+ (namely, [% failedDep.outpath %])
+ [% ELSE %]
+
+ Build failed
+ (see below)
+ [% END %]
+ [% IF c.user_exists && (build.resultInfo.buildstatus == 3 || build.resultInfo.buildstatus == 4) %]
+
+ [% END %]
+ [% ELSIF build.schedulingInfo.busy %]
+ Build in progress
+ since [% INCLUDE renderDateTime timestamp = build.schedulingInfo.starttime %]
+ [% ELSE %]
+ Scheduled to be built
+ [% IF c.user_exists %]
+
+ [% END %]
+ [% END %]
+[% END -%]
+
diff --git a/src/root/job.tt b/src/root/job.tt
index a34179d7..4e2b237e 100644
--- a/src/root/job.tt
+++ b/src/root/job.tt
@@ -9,44 +9,55 @@
title = jobset.name %]:[% job.name %]
-Status
-
-[% INCLUDE renderBuildList builds=currentBuilds showStatusChange=0 %]
-
-Channels
-
-
-
-
-
-Latest builds
-
-
-
-
-
-Statistics
-
-[% INCLUDE showBuildStats %]
+
+
+ Finished builds
+ [% INCLUDE renderBuildList builds=currentBuilds showStatusChange=0 %]
+ [% IF runningBuilds %]
+ Running builds
+ [% INCLUDE renderBuildList builds=runningBuilds showStatusChange=0 %]
+ [% END %]
+
+
+ Information[% IF !edit %] [Edit][% END %]
-
-
- [% IF edit %]
-
-
-
-
-
- [% END %]
- Identifier:
- [% INCLUDE maybeEditString param="name" value=jobset.name %]
-
-
- Description:
- [% INCLUDE maybeEditString param="description" value=jobset.description %]
-
-
- Nix expression:
-
- [% INCLUDE maybeEditString param="nixexprpath" value=jobset.nixexprpath extraClass="shortString" %] in input
- [% INCLUDE maybeEditString param="nixexprinput" value=jobset.nixexprinput extraClass="shortString" %]
-
-
-
- Enabled:
-
- [% INCLUDE renderSelection param="enabled" curValue=jobset.enabled options={"1" = "Yes", "0" = "No"} %]
-
-
-
- Enable email notification:
-
- [% INCLUDE renderSelection param="enableemail" curValue=jobset.enableemail options={"1" = "Yes", "0" = "No"} %]
-
-
-
- [% IF !edit %]
- Email override:
-
- [% INCLUDE maybeEditString param="emailoverride" value=jobset.emailoverride %]
-
-
-
- [% END %]
-Last checked:
-
- [% IF jobset.lastcheckedtime %]
- [% INCLUDE renderDateTime timestamp = jobset.lastcheckedtime -%][% IF jobset.errormsg -%], evaluation error:
-
- [% HTML.escape(jobset.errormsg) %]
- [% ELSE %], no errors
- [% END %]
- [% ELSE %]
- never
- [% END %]
- Inputs
-
-
-
-
-
-
-
-
-
- [% FOREACH input IN jobset.jobsetinputs -%]
- [% INCLUDE renderInput input=input baseName="input-$input.name" %]
- [% END %]
- [% IF edit %]
- Input name Type Values
-
- [% END %]
-
-
- Channels
-
-
-
-
-
-[% IF !edit %]
-
-
-Jobs
-
-
- [% IF activeJobs.size == 0 %](none)[% END %]
- [% FOREACH j IN activeJobs %] [% INCLUDE renderJobName project=project.name jobset=jobset.name job=j.get_column('job') %] [% END %]
-
-
This jobset used to contain the following [% inactiveJobs.size %] jobs: - -
- [% IF inactiveJobs.size == 0 %](none)[% END %] - [% FOREACH j IN inactiveJobs %] [% INCLUDE renderJobName project=project.name jobset=jobset.name job=j.get_column('job') %] [% END %] -- - - - -
Input name | Type | Values |
---|---|---|
+ |
Job | [% FOREACH s IN systems %][% s.system %] | [% END %]
---|---|
[% INCLUDE renderJobName project=project.name jobset = jobset.name job = j.get_column('job') %] | + [% FOREACH s IN systems %] + [% system = s.system %] + [% systemStatus = j.get_column(system) %] ++ [% IF systemStatus != undef %] + + [% IF systemStatus == 0 %] + + [% ELSE %] + + [% END %] + + [% END %] + | + [% END %] +
[% HTML.escape(jobset.errormsg) %]+
Identifier: | +[% INCLUDE maybeEditString param="name" value=jobset.name %] | +
---|---|
Description: | +[% INCLUDE maybeEditString param="description" value=jobset.description %] | +
Nix expression: | ++ [% INCLUDE maybeEditString param="nixexprpath" value=jobset.nixexprpath extraClass="shortString" %] in input + [% INCLUDE maybeEditString param="nixexprinput" value=jobset.nixexprinput extraClass="shortString" %] + | +
Enabled: | ++ [% INCLUDE renderSelection param="enabled" curValue=jobset.enabled options={"1" = "Yes", "0" = "No"} %] + | +
Enable email notification: | ++ [% INCLUDE renderSelection param="enableemail" curValue=jobset.enableemail options={"1" = "Yes", "0" = "No"} %] + | +
Email override: | ++ [% INCLUDE maybeEditString param="emailoverride" value=jobset.emailoverride %] + | +
Last checked: | ++ [% IF jobset.lastcheckedtime %] + [% INCLUDE renderDateTime timestamp = jobset.lastcheckedtime -%][% IF jobset.errormsg -%], with errors! + [% ELSE %], no errors + [% END %] + [% ELSE %] + never + [% END %] + | +
This jobset provides the following Nix channels:
+ + + +This jobset currently contains the following [% activeJobs.size %] jobs: + +
+ [% IF activeJobs.size == 0 %](none)[% END %] + [% FOREACH j IN activeJobs %] [% INCLUDE renderJobName project=project.name jobset=jobset.name job=j.get_column('job') %] [% END %] ++ + +
This jobset used to contain the following [% inactiveJobs.size %] jobs: + +
+ [% IF inactiveJobs.size == 0 %](none)[% END %] + [% FOREACH j IN inactiveJobs %] [% INCLUDE renderJobName project=project.name jobset=jobset.name job=j.get_column('job') %] [% END %] ++ + + +