forked from lix-project/hydra
* hydra: buildpage, show changes since last build/successful build
This commit is contained in:
parent
fb8ab7a574
commit
529a6cf6eb
|
@ -15,6 +15,8 @@ sub build : Chained('/') PathPart CaptureArgs(1) {
|
||||||
$c->stash->{id} = $id;
|
$c->stash->{id} = $id;
|
||||||
|
|
||||||
$c->stash->{build} = getBuild($c, $id);
|
$c->stash->{build} = getBuild($c, $id);
|
||||||
|
$c->stash->{prevBuild} = getPreviousBuild($c, $c->stash->{build});
|
||||||
|
$c->stash->{prevSuccessfulBuild} = getPreviousSuccessfulBuild($c, $c->stash->{build});
|
||||||
|
|
||||||
notFound($c, "Build with ID $id doesn't exist.")
|
notFound($c, "Build with ID $id doesn't exist.")
|
||||||
if !defined $c->stash->{build};
|
if !defined $c->stash->{build};
|
||||||
|
@ -22,7 +24,6 @@ sub build : Chained('/') PathPart CaptureArgs(1) {
|
||||||
$c->stash->{project} = $c->stash->{build}->project;
|
$c->stash->{project} = $c->stash->{build}->project;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
sub view_build : Chained('build') PathPart('') Args(0) {
|
sub view_build : Chained('build') PathPart('') Args(0) {
|
||||||
my ($self, $c) = @_;
|
my ($self, $c) = @_;
|
||||||
|
|
||||||
|
|
|
@ -7,7 +7,7 @@ use Hydra::Helper::Nix;
|
||||||
|
|
||||||
our @ISA = qw(Exporter);
|
our @ISA = qw(Exporter);
|
||||||
our @EXPORT = qw(
|
our @EXPORT = qw(
|
||||||
getBuild getBuildStats joinWithResultInfo getChannelData
|
getBuild getPreviousBuild getPreviousSuccessfulBuild getBuildStats joinWithResultInfo getChannelData
|
||||||
error notFound
|
error notFound
|
||||||
requireLogin requireProjectOwner requireAdmin requirePost
|
requireLogin requireProjectOwner requireAdmin requirePost
|
||||||
trim
|
trim
|
||||||
|
@ -21,6 +21,34 @@ sub getBuild {
|
||||||
return $build;
|
return $build;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
sub getPreviousBuild {
|
||||||
|
my ($c, $build) = @_;
|
||||||
|
(my $prevBuild) = $c->model('DB::Builds')->search(
|
||||||
|
{ finished => 1
|
||||||
|
, system => $build->system
|
||||||
|
, project => $build->project->name
|
||||||
|
, jobset => $build->jobset->name
|
||||||
|
, job => $build->job->name
|
||||||
|
, 'me.id' => { '<' => $build->id }
|
||||||
|
}, {rows => 1, order_by => "id DESC"});
|
||||||
|
|
||||||
|
return $prevBuild;
|
||||||
|
}
|
||||||
|
|
||||||
|
sub getPreviousSuccessfulBuild {
|
||||||
|
my ($c, $build) = @_;
|
||||||
|
(my $prevBuild) = joinWithResultInfo($c, $c->model('DB::Builds'))->search(
|
||||||
|
{ finished => 1
|
||||||
|
, system => $build->system
|
||||||
|
, project => $build->project->name
|
||||||
|
, jobset => $build->jobset->name
|
||||||
|
, job => $build->job->name
|
||||||
|
, buildstatus => 0
|
||||||
|
, 'me.id' => { '<' => $build->id }
|
||||||
|
}, {rows => 1, order_by => "id DESC"});
|
||||||
|
|
||||||
|
return $prevBuild;
|
||||||
|
}
|
||||||
|
|
||||||
sub getBuildStats {
|
sub getBuildStats {
|
||||||
my ($c, $builds) = @_;
|
my ($c, $builds) = @_;
|
||||||
|
|
|
@ -383,6 +383,17 @@
|
||||||
[% END -%]
|
[% END -%]
|
||||||
</tbody>
|
</tbody>
|
||||||
</table>
|
</table>
|
||||||
|
|
||||||
|
[% IF prevBuild %]
|
||||||
|
<h2>Changes since previous build : [% INCLUDE renderFullBuildLink build=prevBuild %]</h2>
|
||||||
|
[% INCLUDE renderInputDiff build2=build , build1=prevBuild %]
|
||||||
|
[% END %]
|
||||||
|
|
||||||
|
[% IF prevBuild && prevSuccessfulBuild.id != prevBuild.id %]
|
||||||
|
<h2>Changes since previous successful build : [% INCLUDE renderFullBuildLink build=prevSuccessfulBuild %]</h2>
|
||||||
|
[% INCLUDE renderInputDiff build2=build , build1=prevSuccessfulBuild %]
|
||||||
|
[% END %]
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -265,3 +265,48 @@
|
||||||
[% END %]
|
[% END %]
|
||||||
[% END -%]
|
[% END -%]
|
||||||
|
|
||||||
|
[% BLOCK renderInputValue %]
|
||||||
|
[% IF input.type == "build" || input.type == "sysbuild" %]
|
||||||
|
[% INCLUDE renderFullBuildLink build=input.dependency %]</a>
|
||||||
|
[% ELSIF input.type == "string" || input.type == "boolean" %]
|
||||||
|
<tt>"[% input.value %]"</tt>
|
||||||
|
[% ELSE %]
|
||||||
|
<tt>[% input.uri %][% IF input.revision %] (r. [% input.revision %])[% END %]</tt>
|
||||||
|
[% END %]
|
||||||
|
[% END %]
|
||||||
|
|
||||||
|
[% BLOCK renderInputDiff; %]
|
||||||
|
|
||||||
|
<table class="tablesorter">
|
||||||
|
<thead>
|
||||||
|
<tr><th>Name</th><th>Change</th></tr>
|
||||||
|
</thead>
|
||||||
|
<tbody>
|
||||||
|
[% FOREACH bi1 IN build1.inputs %]
|
||||||
|
[% deletedInput = 1 %]
|
||||||
|
[% FOREACH bi2 IN build2.inputs %]
|
||||||
|
[% IF bi1.name == bi2.name %]
|
||||||
|
<tr>
|
||||||
|
[% IF bi1.type == bi2.type %]
|
||||||
|
[% IF bi1.value != bi2.value || bi1.uri != bi2.uri || bi1.revision != bi2.revision || bi1.path != bi2.path || bi1.dependency != bi2.dependency %]
|
||||||
|
<td>[% bi1.name %]</td>
|
||||||
|
<td>
|
||||||
|
[% INCLUDE renderInputValue input=bi1 %] to [% INCLUDE renderInputValue input=bi2 %]
|
||||||
|
</td>
|
||||||
|
[% END %]
|
||||||
|
[% ELSE %]
|
||||||
|
<td>[% bi1.name %]</td>
|
||||||
|
<td>Changed input type from '[% type = bi1.type; inputTypes.$type %]' to '[% type = bi2.type; inputTypes.$type %]'</td>
|
||||||
|
[% END %]
|
||||||
|
</tr>
|
||||||
|
[% deletedInput = 0 %]
|
||||||
|
[% END %]
|
||||||
|
[% END %]
|
||||||
|
[% IF deletedInput == 1 %]
|
||||||
|
<tr><td>[% bi1.name %]</td><td>Input not present in this build.</td></tr>
|
||||||
|
[% END %]
|
||||||
|
[% END %]
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
[% END %]
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue