forked from lix-project/hydra
Add a redirect to the latest view result for which the underlying evaluation has finished completely
This will be useful for the Nixpkgs channel mirror script: http://hydra.nixos.org/view/nixpkgs/unstable/latest-finished/channel is the channel containing the latest, consistent, tested set of builds.
This commit is contained in:
parent
bd93ca9316
commit
f52ca0c588
|
@ -140,7 +140,20 @@ sub latest : Chained('view') PathPart('latest') {
|
||||||
# Redirect to the latest result in the view in which every build
|
# Redirect to the latest result in the view in which every build
|
||||||
# is successful.
|
# is successful.
|
||||||
my $latest = getLatestSuccessfulViewResult(
|
my $latest = getLatestSuccessfulViewResult(
|
||||||
$c->stash->{project}, $c->stash->{primaryJob}, $c->stash->{jobs});
|
$c->stash->{project}, $c->stash->{primaryJob}, $c->stash->{jobs}, 0);
|
||||||
|
error($c, "This view set has no successful results yet.") if !defined $latest;
|
||||||
|
$c->res->redirect($c->uri_for($self->action_for("view_view"), $c->req->captures, $latest->id, @args));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
sub latest_finished : Chained('view') PathPart('latest-finished') {
|
||||||
|
my ($self, $c, @args) = @_;
|
||||||
|
|
||||||
|
# Redirect to the latest result in the view in which every build
|
||||||
|
# is successful *and* where the jobset evaluation has finished
|
||||||
|
# completely.
|
||||||
|
my $latest = getLatestSuccessfulViewResult(
|
||||||
|
$c->stash->{project}, $c->stash->{primaryJob}, $c->stash->{jobs}, 1);
|
||||||
error($c, "This view set has no successful results yet.") if !defined $latest;
|
error($c, "This view set has no successful results yet.") if !defined $latest;
|
||||||
$c->res->redirect($c->uri_for($self->action_for("view_view"), $c->req->captures, $latest->id, @args));
|
$c->res->redirect($c->uri_for($self->action_for("view_view"), $c->req->captures, $latest->id, @args));
|
||||||
}
|
}
|
||||||
|
|
|
@ -222,10 +222,16 @@ sub getViewResult {
|
||||||
|
|
||||||
|
|
||||||
sub getLatestSuccessfulViewResult {
|
sub getLatestSuccessfulViewResult {
|
||||||
my ($project, $primaryJob, $jobs) = @_;
|
my ($project, $primaryJob, $jobs, $finished) = @_;
|
||||||
my $latest;
|
my $latest;
|
||||||
foreach my $build (getPrimaryBuildsForView($project, $primaryJob)) {
|
foreach my $build (getPrimaryBuildsForView($project, $primaryJob)) {
|
||||||
return $build if getViewResult($build, $jobs)->{status} == 0;
|
my $result = getViewResult($build, $jobs);
|
||||||
|
next if $result->{status} != 0;
|
||||||
|
if ($finished) {
|
||||||
|
next unless defined $result->{eval};
|
||||||
|
next if $result->{eval}->builds->search({ finished => 0 })->count > 0;
|
||||||
|
}
|
||||||
|
return $build;
|
||||||
}
|
}
|
||||||
return undef;
|
return undef;
|
||||||
}
|
}
|
||||||
|
|
|
@ -109,7 +109,7 @@ foreach my $project ($db->resultset('Projects')->search({}, { order_by => ["name
|
||||||
my $jobs = [$view->viewjobs->all];
|
my $jobs = [$view->viewjobs->all];
|
||||||
|
|
||||||
# Keep all builds belonging to the most recent successful view result.
|
# Keep all builds belonging to the most recent successful view result.
|
||||||
my $latest = getLatestSuccessfulViewResult($project, $primaryJob, $jobs);
|
my $latest = getLatestSuccessfulViewResult($project, $primaryJob, $jobs, 0);
|
||||||
if (defined $latest) {
|
if (defined $latest) {
|
||||||
print STDERR " keeping latest successful view result ", $latest->id, " (", $latest->get_column('releasename'), ")\n";
|
print STDERR " keeping latest successful view result ", $latest->id, " (", $latest->get_column('releasename'), ")\n";
|
||||||
my $result = getViewResult($latest, $jobs);
|
my $result = getViewResult($latest, $jobs);
|
||||||
|
|
Loading…
Reference in a new issue