So this is the final part which is needed in order to be able to deliver custom channels, everything else is now just polishing. We do this by simply redirecting to the build product download URL and we use binary_cache_url the same way as in NixChannel.pm. Signed-off-by: aszlig <aszlig@redmoonstudios.org>
84 lines
2.1 KiB
Perl
84 lines
2.1 KiB
Perl
package Hydra::Controller::Channel;
|
|
|
|
use strict;
|
|
use warnings;
|
|
use base 'Hydra::Base::Controller::REST';
|
|
|
|
|
|
sub channel : Chained('/') PathPart('channel/custom') CaptureArgs(3) {
|
|
my ($self, $c, $projectName, $jobsetName, $channelName) = @_;
|
|
|
|
$c->stash->{project} = $c->model('DB::Projects')->find($projectName);
|
|
|
|
notFound($c, "Project $projectName doesn't exist.")
|
|
if !$c->stash->{project};
|
|
|
|
$c->stash->{jobset} = $c->stash->{project}->jobsets->find({
|
|
name => $jobsetName
|
|
});
|
|
|
|
notFound($c, "Jobset $jobsetName doesn't exist.")
|
|
if !$c->stash->{jobset};
|
|
|
|
my $lastSuccessful = $c->model('DB::Builds')->find(
|
|
{ 'eval.hasnewbuilds' => 1
|
|
, project => $projectName
|
|
, jobset => $jobsetName
|
|
, job => $channelName
|
|
, buildstatus => 0
|
|
},
|
|
{ rows => 1, order_by => "eval.id desc"
|
|
, join => { jobsetevalmembers => 'eval' }
|
|
}
|
|
);
|
|
|
|
notFound($c, "Channel $channelName either doesn't exist ".
|
|
"or was never built successfully.")
|
|
if !$lastSuccessful;
|
|
|
|
$c->stash->{lastSuccessful} = $lastSuccessful;
|
|
}
|
|
|
|
|
|
sub overview : Chained('channel') PathPart('') Args(0) {
|
|
my ($self, $c) = @_;
|
|
|
|
$c->stash->{constituents} = [
|
|
$c->stash->{lastSuccessful}->constituents_->search(
|
|
{}, {order_by => ["job"]}
|
|
)
|
|
];
|
|
|
|
$c->stash->{genericChannel} = 0;
|
|
$c->stash->{template} = 'channel-contents.tt';
|
|
}
|
|
|
|
|
|
sub nixexprs : Chained('channel') PathPart('') Args(1) {
|
|
my ($self, $c, $productName) = @_;
|
|
|
|
my $product = $c->stash->{lastSuccessful}->buildproducts->find(
|
|
{ type => "channel", name => $productName }
|
|
);
|
|
|
|
my $url = $c->uri_for(
|
|
$c->controller("Build")->action_for("download"),
|
|
[$c->stash->{lastSuccessful}->id],
|
|
$product->productnr,
|
|
$productName
|
|
);
|
|
|
|
$c->res->redirect($url);
|
|
}
|
|
|
|
|
|
sub binary_cache_url : Chained('channel') PathPart('binary-cache-url') Args(0) {
|
|
my ($self, $c) = @_;
|
|
$c->stash->{'plain'} = { data => $c->uri_for('/') };
|
|
$c->response->content_type('text/plain');
|
|
$c->forward('Hydra::View::Plain');
|
|
}
|
|
|
|
|
|
1;
|