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:
Cole Helbling 2021-04-27 15:51:17 -07:00
parent 0c8d016a38
commit 2600810551
No known key found for this signature in database
GPG key ID: B37E0F2371016A4C
4 changed files with 95 additions and 55 deletions

View file

@ -306,35 +306,7 @@ paths:
content:
application/json:
schema:
type: object
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'
$ref: '#/components/schemas/Jobset'
responses:
'201':
description: jobset creation response
@ -590,26 +562,76 @@ components:
Jobset:
type: object
properties:
fetcherrormsg:
name:
description: the name of the jobset
type: string
project:
description: the project this jobset belongs to
type: string
description:
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
nixexprinput:
nullable: true
description: the name of the jobset input which contains the nixexprpath
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:
nullable: true
description: the path to the file to evaluate
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:
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
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:
description: inputs configured for this jobset
type: object

View file

@ -231,7 +231,7 @@ sub updateJobset {
if ($type == 0) {
($nixExprPath, $nixExprInput) = nixExprPathFromParams $c;
} 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]/;
} else {
error($c, "Invalid jobset type.");
@ -270,8 +270,8 @@ sub updateJobset {
$jobset->jobsetinputs->delete;
if ($type == 0) {
foreach my $name (keys %{$c->stash->{params}->{inputs}}) {
my $inputData = $c->stash->{params}->{inputs}->{$name};
foreach my $name (keys %{$c->stash->{params}->{jobsetinputs}}) {
my $inputData = $c->stash->{params}->{jobsetinputs}->{$name};
my $type = $inputData->{type};
my $value = $inputData->{value};
my $emailresponsible = defined $inputData->{emailresponsible} ? 1 : 0;

View file

@ -412,12 +412,30 @@ __PACKAGE__->add_column(
my %hint = (
columns => [
"errortime",
"lastcheckedtime",
"triggertime",
"enabled",
"errormsg",
"fetcherrormsg",
"emailoverride",
"keepnr",
"checkinterval",
"schedulingshares",
"starttime"
],
string_columns => [
"name",
"project",
"description",
"nixexprinput",
"nixexprpath",
"nixexprinput"
"errormsg",
"emailoverride",
"fetcherrormsg",
"type",
"flake"
],
boolean_columns => [
"enableemail",
"hidden"
],
eager_relations => {
jobsetinputs => "name"

View file

@ -46,8 +46,8 @@
<thead>
<tr><th></th><th>Input name</th><th>Type</th><th style="width: 50%">Value</th><th>Notify committers</th></tr>
</thead>
<tbody class="inputs">
[% inputs = createFromEval ? eval.jobsetevalinputs : jobset.jobsetinputs; FOREACH input IN inputs %]
<tbody class="jobsetinputs">
[% jobsetinputs = createFromEval ? eval.jobsetevalinputs : jobset.jobsetinputs; FOREACH input IN jobsetinputs %]
[% INCLUDE renderJobsetInput input=input baseName="input-$input.name" %]
[% END %]
<tr>
@ -111,9 +111,9 @@
</div>
<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">
<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>
@ -220,8 +220,8 @@
$("#submit-jobset").click(function() {
var formElements = $(this).parents("form").serializeArray();
var data = { 'inputs': {} };
var inputs = {};
var data = { 'jobsetinputs': {} };
var jobsetinputs = {};
for (var i = 0; formElements.length > i; i++) {
var elem = formElements[i];
var match = elem.name.match(/^input-([\w-]+)-(\w+)$/);
@ -233,13 +233,13 @@
if (baseName === "template") continue;
if (!(baseName in inputs))
inputs[baseName] = {};
if (!(baseName in jobsetinputs))
jobsetinputs[baseName] = {};
if (param === "name")
data.inputs[elem.value] = inputs[baseName];
data.jobsetinputs[elem.value] = jobsetinputs[baseName];
else
inputs[baseName][param] = elem.value;
jobsetinputs[baseName][param] = elem.value;
}
}
redirectJSON({