hydra-api: flesh out Jobset schema
* made all columns available via the API (except for forceeval) * renamed flakeref to flake to unify the API with the database schema * renamed inputs to jobsetinputs to unify the API with the database schema
This commit is contained in:
parent
0c8d016a38
commit
2600810551
|
@ -306,35 +306,7 @@ paths:
|
||||||
content:
|
content:
|
||||||
application/json:
|
application/json:
|
||||||
schema:
|
schema:
|
||||||
type: object
|
$ref: '#/components/schemas/Jobset'
|
||||||
properties:
|
|
||||||
'description':
|
|
||||||
description: a description of the jobset
|
|
||||||
type: string
|
|
||||||
checkinterval:
|
|
||||||
description: interval (in seconds) in which to check for evaluation
|
|
||||||
type: integer
|
|
||||||
enabled:
|
|
||||||
description: when true the jobset gets scheduled for evaluation
|
|
||||||
type: boolean
|
|
||||||
visible:
|
|
||||||
description: when true the jobset is visible in the web frontend
|
|
||||||
type: boolean
|
|
||||||
keepnr:
|
|
||||||
description: number or evaluations to keep
|
|
||||||
type: integer
|
|
||||||
nixexprinput:
|
|
||||||
description: the name of the jobset input which contains the nixexprpath
|
|
||||||
type: string
|
|
||||||
nixexprpath:
|
|
||||||
nullable: true
|
|
||||||
description: the path to the file to evaluate
|
|
||||||
type: string
|
|
||||||
inputs:
|
|
||||||
description: inputs for this jobset
|
|
||||||
type: object
|
|
||||||
additionalProperties:
|
|
||||||
$ref: '#/components/schemas/JobsetInput'
|
|
||||||
responses:
|
responses:
|
||||||
'201':
|
'201':
|
||||||
description: jobset creation response
|
description: jobset creation response
|
||||||
|
@ -590,26 +562,76 @@ components:
|
||||||
Jobset:
|
Jobset:
|
||||||
type: object
|
type: object
|
||||||
properties:
|
properties:
|
||||||
fetcherrormsg:
|
name:
|
||||||
|
description: the name of the jobset
|
||||||
|
type: string
|
||||||
|
project:
|
||||||
|
description: the project this jobset belongs to
|
||||||
|
type: string
|
||||||
|
description:
|
||||||
nullable: true
|
nullable: true
|
||||||
description: contains the error message when there was a problem fetching sources for a jobset
|
description: a description of the jobset
|
||||||
type: string
|
type: string
|
||||||
nixexprinput:
|
nixexprinput:
|
||||||
|
nullable: true
|
||||||
description: the name of the jobset input which contains the nixexprpath
|
description: the name of the jobset input which contains the nixexprpath
|
||||||
type: string
|
type: string
|
||||||
errormsg:
|
|
||||||
description: contains the stderr output of the nix-instantiate command
|
|
||||||
type: string
|
|
||||||
emailoverride:
|
|
||||||
description: email address to send notices to instead of the package maintainer (can be a comma separated list)
|
|
||||||
type: string
|
|
||||||
nixexprpath:
|
nixexprpath:
|
||||||
nullable: true
|
nullable: true
|
||||||
description: the path to the file to evaluate
|
description: the path to the file to evaluate
|
||||||
type: string
|
type: string
|
||||||
|
errormsg:
|
||||||
|
nullable: true
|
||||||
|
description: contains the stderr output of the nix-instantiate command
|
||||||
|
type: string
|
||||||
|
errortime:
|
||||||
|
nullable: true
|
||||||
|
description: timestamp associated with errormsg
|
||||||
|
type: integer
|
||||||
|
lastcheckedtime:
|
||||||
|
nullable: true
|
||||||
|
description: the last time the evaluator looked at this jobset
|
||||||
|
type: integer
|
||||||
|
triggertime:
|
||||||
|
nullable: true
|
||||||
|
description: set to the time we were triggered by a push event
|
||||||
|
type: integer
|
||||||
enabled:
|
enabled:
|
||||||
description: when set to true the jobset gets scheduled for evaluation
|
description: 0 is disabled, 1 is enabled, 2 is one-shot, and 3 is one-at-a-time
|
||||||
|
type: integer
|
||||||
|
enableemail:
|
||||||
|
description: when true the jobset sends emails when previously-successful builds fail
|
||||||
type: boolean
|
type: boolean
|
||||||
|
hidden:
|
||||||
|
description: when false the jobset is visible in the web frontend
|
||||||
|
type: boolean
|
||||||
|
emailoverride:
|
||||||
|
description: email address to send notices to instead of the package maintainer (can be a comma separated list)
|
||||||
|
type: string
|
||||||
|
keepnr:
|
||||||
|
description: number or evaluations to keep
|
||||||
|
type: integer
|
||||||
|
checkinterval:
|
||||||
|
description: interval (in seconds) in which to check for evaluation
|
||||||
|
type: integer
|
||||||
|
schedulingshares:
|
||||||
|
description: how many shares to be allocated to the jobset
|
||||||
|
type: integer
|
||||||
|
fetcherrormsg:
|
||||||
|
nullable: true
|
||||||
|
description: contains the error message when there was a problem fetching sources for a jobset
|
||||||
|
type: string
|
||||||
|
startime:
|
||||||
|
nullable: true
|
||||||
|
description: set to the time the latest evaluation started (if one is currently running)
|
||||||
|
type: integer
|
||||||
|
type:
|
||||||
|
description: the type of the jobset
|
||||||
|
type: string
|
||||||
|
flake:
|
||||||
|
nullable: true
|
||||||
|
description: the flake uri to evaluate
|
||||||
|
type: string
|
||||||
jobsetinputs:
|
jobsetinputs:
|
||||||
description: inputs configured for this jobset
|
description: inputs configured for this jobset
|
||||||
type: object
|
type: object
|
||||||
|
|
|
@ -231,7 +231,7 @@ sub updateJobset {
|
||||||
if ($type == 0) {
|
if ($type == 0) {
|
||||||
($nixExprPath, $nixExprInput) = nixExprPathFromParams $c;
|
($nixExprPath, $nixExprInput) = nixExprPathFromParams $c;
|
||||||
} elsif ($type == 1) {
|
} elsif ($type == 1) {
|
||||||
$flake = trim($c->stash->{params}->{"flakeref"});
|
$flake = trim($c->stash->{params}->{"flake"});
|
||||||
error($c, "Invalid flake URI ‘$flake’.") if $flake !~ /^[a-zA-Z]/;
|
error($c, "Invalid flake URI ‘$flake’.") if $flake !~ /^[a-zA-Z]/;
|
||||||
} else {
|
} else {
|
||||||
error($c, "Invalid jobset type.");
|
error($c, "Invalid jobset type.");
|
||||||
|
@ -270,8 +270,8 @@ sub updateJobset {
|
||||||
$jobset->jobsetinputs->delete;
|
$jobset->jobsetinputs->delete;
|
||||||
|
|
||||||
if ($type == 0) {
|
if ($type == 0) {
|
||||||
foreach my $name (keys %{$c->stash->{params}->{inputs}}) {
|
foreach my $name (keys %{$c->stash->{params}->{jobsetinputs}}) {
|
||||||
my $inputData = $c->stash->{params}->{inputs}->{$name};
|
my $inputData = $c->stash->{params}->{jobsetinputs}->{$name};
|
||||||
my $type = $inputData->{type};
|
my $type = $inputData->{type};
|
||||||
my $value = $inputData->{value};
|
my $value = $inputData->{value};
|
||||||
my $emailresponsible = defined $inputData->{emailresponsible} ? 1 : 0;
|
my $emailresponsible = defined $inputData->{emailresponsible} ? 1 : 0;
|
||||||
|
|
|
@ -412,12 +412,30 @@ __PACKAGE__->add_column(
|
||||||
|
|
||||||
my %hint = (
|
my %hint = (
|
||||||
columns => [
|
columns => [
|
||||||
|
"errortime",
|
||||||
|
"lastcheckedtime",
|
||||||
|
"triggertime",
|
||||||
"enabled",
|
"enabled",
|
||||||
"errormsg",
|
"keepnr",
|
||||||
"fetcherrormsg",
|
"checkinterval",
|
||||||
"emailoverride",
|
"schedulingshares",
|
||||||
|
"starttime"
|
||||||
|
],
|
||||||
|
string_columns => [
|
||||||
|
"name",
|
||||||
|
"project",
|
||||||
|
"description",
|
||||||
|
"nixexprinput",
|
||||||
"nixexprpath",
|
"nixexprpath",
|
||||||
"nixexprinput"
|
"errormsg",
|
||||||
|
"emailoverride",
|
||||||
|
"fetcherrormsg",
|
||||||
|
"type",
|
||||||
|
"flake"
|
||||||
|
],
|
||||||
|
boolean_columns => [
|
||||||
|
"enableemail",
|
||||||
|
"hidden"
|
||||||
],
|
],
|
||||||
eager_relations => {
|
eager_relations => {
|
||||||
jobsetinputs => "name"
|
jobsetinputs => "name"
|
||||||
|
|
|
@ -46,8 +46,8 @@
|
||||||
<thead>
|
<thead>
|
||||||
<tr><th></th><th>Input name</th><th>Type</th><th style="width: 50%">Value</th><th>Notify committers</th></tr>
|
<tr><th></th><th>Input name</th><th>Type</th><th style="width: 50%">Value</th><th>Notify committers</th></tr>
|
||||||
</thead>
|
</thead>
|
||||||
<tbody class="inputs">
|
<tbody class="jobsetinputs">
|
||||||
[% inputs = createFromEval ? eval.jobsetevalinputs : jobset.jobsetinputs; FOREACH input IN inputs %]
|
[% jobsetinputs = createFromEval ? eval.jobsetevalinputs : jobset.jobsetinputs; FOREACH input IN jobsetinputs %]
|
||||||
[% INCLUDE renderJobsetInput input=input baseName="input-$input.name" %]
|
[% INCLUDE renderJobsetInput input=input baseName="input-$input.name" %]
|
||||||
[% END %]
|
[% END %]
|
||||||
<tr>
|
<tr>
|
||||||
|
@ -111,9 +111,9 @@
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="form-group row show-on-flake">
|
<div class="form-group row show-on-flake">
|
||||||
<label class="col-form-label col-sm-3" for="editjobsetflakeref">Flake URI</label>
|
<label class="col-form-label col-sm-3" for="editjobsetflake">Flake URI</label>
|
||||||
<div class="col-sm-9">
|
<div class="col-sm-9">
|
||||||
<input type="text" class="form-control" id="editjobsetflakeref" name="flakeref" [% HTML.attributes(value => jobset.flake) %]/>
|
<input type="text" class="form-control" id="editjobsetflake" name="flake" [% HTML.attributes(value => jobset.flake) %]/>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
@ -220,8 +220,8 @@
|
||||||
|
|
||||||
$("#submit-jobset").click(function() {
|
$("#submit-jobset").click(function() {
|
||||||
var formElements = $(this).parents("form").serializeArray();
|
var formElements = $(this).parents("form").serializeArray();
|
||||||
var data = { 'inputs': {} };
|
var data = { 'jobsetinputs': {} };
|
||||||
var inputs = {};
|
var jobsetinputs = {};
|
||||||
for (var i = 0; formElements.length > i; i++) {
|
for (var i = 0; formElements.length > i; i++) {
|
||||||
var elem = formElements[i];
|
var elem = formElements[i];
|
||||||
var match = elem.name.match(/^input-([\w-]+)-(\w+)$/);
|
var match = elem.name.match(/^input-([\w-]+)-(\w+)$/);
|
||||||
|
@ -233,13 +233,13 @@
|
||||||
|
|
||||||
if (baseName === "template") continue;
|
if (baseName === "template") continue;
|
||||||
|
|
||||||
if (!(baseName in inputs))
|
if (!(baseName in jobsetinputs))
|
||||||
inputs[baseName] = {};
|
jobsetinputs[baseName] = {};
|
||||||
|
|
||||||
if (param === "name")
|
if (param === "name")
|
||||||
data.inputs[elem.value] = inputs[baseName];
|
data.jobsetinputs[elem.value] = jobsetinputs[baseName];
|
||||||
else
|
else
|
||||||
inputs[baseName][param] = elem.value;
|
jobsetinputs[baseName][param] = elem.value;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
redirectJSON({
|
redirectJSON({
|
||||||
|
|
Loading…
Reference in a new issue