Add one-shot jobsets
There are jobsets that are evaluated only once, that is, after they've been evaluated, they're disabled automatically. This is primarily useful for doing releases: for instance, doing an evaluation with "officialRelease" set to "true" should be done only once.
This commit is contained in:
parent
0babdf3532
commit
c4e39d4769
|
@ -31,11 +31,7 @@ sub overview : Chained('job') PathPart('') Args(0) {
|
|||
$c->stash->{queuedBuilds} = [
|
||||
$job->builds->search(
|
||||
{ finished => 0 },
|
||||
{ join => ['project']
|
||||
, order_by => ["priority DESC", "id"]
|
||||
, '+select' => ['project.enabled']
|
||||
, '+as' => ['enabled']
|
||||
}
|
||||
{ order_by => ["priority DESC", "id"] }
|
||||
) ];
|
||||
|
||||
# If this is an aggregate job, then get its constituents.
|
||||
|
|
|
@ -197,14 +197,15 @@ sub updateJobset {
|
|||
|
||||
my ($nixExprPath, $nixExprInput) = nixExprPathFromParams $c;
|
||||
|
||||
my $enabled = defined $c->stash->{params}->{enabled};
|
||||
my $enabled = int($c->stash->{params}->{enabled});
|
||||
die if $enabled < 0 || $enabled > 2;
|
||||
|
||||
$jobset->update(
|
||||
{ name => $jobsetName
|
||||
, description => trim($c->stash->{params}->{"description"})
|
||||
, nixexprpath => $nixExprPath
|
||||
, nixexprinput => $nixExprInput
|
||||
, enabled => $enabled ? 1 : 0
|
||||
, enabled => $enabled
|
||||
, enableemail => defined $c->stash->{params}->{enableemail} ? 1 : 0
|
||||
, emailoverride => trim($c->stash->{params}->{emailoverride}) || ""
|
||||
, hidden => defined $c->stash->{params}->{visible} ? 0 : 1
|
||||
|
|
|
@ -74,7 +74,7 @@ sub queue_GET {
|
|||
$self->status_ok(
|
||||
$c,
|
||||
entity => [$c->model('DB::Builds')->search(
|
||||
{finished => 0}, { join => ['project'], order_by => ["priority DESC", "id"], columns => [@buildListColumns], '+select' => ['project.enabled'], '+as' => ['enabled'] })]
|
||||
{finished => 0}, { order_by => ["priority DESC", "id"], columns => [@buildListColumns] })]
|
||||
);
|
||||
}
|
||||
|
||||
|
|
|
@ -540,7 +540,7 @@ sub grab {
|
|||
sub getTotalShares {
|
||||
my ($db) = @_;
|
||||
return $db->resultset('Jobsets')->search(
|
||||
{ 'project.enabled' => 1, 'me.enabled' => 1 },
|
||||
{ 'project.enabled' => 1, 'me.enabled' => { '!=' => 0 } },
|
||||
{ join => 'project', select => { sum => 'schedulingshares' }, as => 'sum' })->single->get_column('sum');
|
||||
}
|
||||
|
||||
|
|
|
@ -49,11 +49,18 @@
|
|||
<fieldset>
|
||||
|
||||
<div class="control-group">
|
||||
<label class="control-label">State</label>
|
||||
<div class="controls">
|
||||
<label class="checkbox">
|
||||
<input type="checkbox" name="enabled" [% IF jobset.enabled; 'checked="checked"'; END %]/>Enabled
|
||||
</label>
|
||||
<div class="btn-group" data-toggle="buttons-radio">
|
||||
<input type="hidden" name="enabled" value="[% jobset.enabled %]" />
|
||||
<button type="button" class="btn" value="1">Enabled</button>
|
||||
<button type="button" class="btn" value="2">One-shot</button>
|
||||
<button type="button" class="btn" value="0">Disabled</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="control-group">
|
||||
<div class="controls">
|
||||
<label class="checkbox">
|
||||
<input type="checkbox" name="visible" [% IF !jobset.hidden; 'checked="checked"'; END %]/>Visible
|
||||
|
|
|
@ -116,6 +116,10 @@
|
|||
<div id="tabs-configuration" class="tab-pane">
|
||||
|
||||
<table class="info-table">
|
||||
<tr>
|
||||
<th>State:</th>
|
||||
<td>[% IF jobset.enabled == 0; "Disabled"; ELSIF jobset.enabled == 1; "Enabled"; ELSIF jobset.enabled == 2; "One-shot"; END %]</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th>Description:</th>
|
||||
<td>[% HTML.escape(jobset.description) %]</td>
|
||||
|
@ -127,10 +131,6 @@
|
|||
<tt>[% HTML.escape(jobset.nixexprinput) %]</tt>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th>Enabled:</th>
|
||||
<td>[% jobset.enabled ? "Yes" : "No" %]</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th>Check interval:</th>
|
||||
<td>[% jobset.checkinterval || "<em>disabled</em>" %]</td>
|
||||
|
|
|
@ -69,7 +69,17 @@ $(document).ready(function() {
|
|||
var id = e.target.toString().match(pattern)[0];
|
||||
history.replaceState(null, "", id);
|
||||
});
|
||||
})
|
||||
});
|
||||
|
||||
/* Automatically set Bootstrap radio buttons from hidden form controls. */
|
||||
$('div[data-toggle="buttons-radio"] input[type="hidden"]').map(function(){
|
||||
$('button[value="' + $(this).val() + '"]', $(this).parent()).addClass('active');
|
||||
});
|
||||
|
||||
/* Automatically update hidden form controls from Bootstrap radio buttons. */
|
||||
$('div[data-toggle="buttons-radio"] .btn').click(function(){
|
||||
$('input', $(this).parent()).val($(this).val());
|
||||
});
|
||||
});
|
||||
|
||||
var tabsLoaded = {};
|
||||
|
|
|
@ -246,6 +246,9 @@ sub checkJobsetWrapped {
|
|||
print STDERR " created cached eval ", $ev->id, "\n";
|
||||
$prevEval->builds->update({iscurrent => 1}) if defined $prevEval;
|
||||
}
|
||||
|
||||
# If this is a one-shot jobset, disable it now.
|
||||
$jobset->update({ enabled => 0 }) if $jobset->enabled == 2;
|
||||
});
|
||||
|
||||
# Store the error messages for jobs that failed to evaluate.
|
||||
|
@ -305,7 +308,7 @@ sub checkSomeJobset {
|
|||
# longest time (but don't check more often than the jobset's
|
||||
# minimal check interval).
|
||||
($jobset) = $db->resultset('Jobsets')->search(
|
||||
{ 'project.enabled' => 1, 'me.enabled' => 1,
|
||||
{ 'project.enabled' => 1, 'me.enabled' => { '!=' => 0 },
|
||||
, 'checkinterval' => { '!=', 0 }
|
||||
, -or => [ 'lastcheckedtime' => undef, 'lastcheckedtime' => { '<', \ (time() . " - me.checkinterval") } ] },
|
||||
{ join => 'project', order_by => [ 'lastcheckedtime nulls first' ], rows => 1 })
|
||||
|
|
|
@ -55,7 +55,7 @@ create table Jobsets (
|
|||
errorTime integer, -- timestamp associated with errorMsg
|
||||
lastCheckedTime integer, -- last time the evaluator looked at this jobset
|
||||
triggerTime integer, -- set if we were triggered by a push event
|
||||
enabled integer not null default 1,
|
||||
enabled integer not null default 1, -- 0 = disabled, 1 = enabled, 2 = one-shot
|
||||
enableEmail integer not null default 1,
|
||||
hidden integer not null default 0,
|
||||
emailOverride text not null,
|
||||
|
|
Loading…
Reference in a new issue