From 26008105519a62fd1daecf352215a783529c2aa8 Mon Sep 17 00:00:00 2001 From: Cole Helbling Date: Tue, 27 Apr 2021 15:51:17 -0700 Subject: [PATCH] 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 --- hydra-api.yaml | 98 ++++++++++++++++++------------ src/lib/Hydra/Controller/Jobset.pm | 6 +- src/lib/Hydra/Schema/Jobsets.pm | 26 ++++++-- src/root/edit-jobset.tt | 20 +++--- 4 files changed, 95 insertions(+), 55 deletions(-) diff --git a/hydra-api.yaml b/hydra-api.yaml index 2443b679..d01387ec 100644 --- a/hydra-api.yaml +++ b/hydra-api.yaml @@ -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 diff --git a/src/lib/Hydra/Controller/Jobset.pm b/src/lib/Hydra/Controller/Jobset.pm index 8178c6b7..b391e231 100644 --- a/src/lib/Hydra/Controller/Jobset.pm +++ b/src/lib/Hydra/Controller/Jobset.pm @@ -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; diff --git a/src/lib/Hydra/Schema/Jobsets.pm b/src/lib/Hydra/Schema/Jobsets.pm index b2dc0131..ee93f349 100644 --- a/src/lib/Hydra/Schema/Jobsets.pm +++ b/src/lib/Hydra/Schema/Jobsets.pm @@ -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" diff --git a/src/root/edit-jobset.tt b/src/root/edit-jobset.tt index 324c7a87..4243f1fa 100644 --- a/src/root/edit-jobset.tt +++ b/src/root/edit-jobset.tt @@ -46,8 +46,8 @@ Input nameTypeValueNotify committers - - [% 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" %] [% END %] @@ -111,9 +111,9 @@
- +
- jobset.flake) %]/> + jobset.flake) %]/>
@@ -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({