package Fedora::App::ReviewTool::Koji;
=begin
This is kinda wimpy right now -- we just call the external koji "binary"
rather than do the actual xmlrpc calls.
=cut
use Moose::Role;
use MooseX::Types::Path::Class qw{ File };
use MooseX::Types::URI qw{ Uri };
use English qw{ -no_match_vars }; # Avoids regex performance penalty
use List::Util qw{ first };
use namespace::clean -except => 'meta';
# debugging
#use Smart::Comments;
our $VERSION = '0.10';
has koji => (
is => 'rw',
isa => File,
coerce => 1,
lazy_build => 1,
documentation => 'Full path to the koji script',
);
sub _build_koji { '/usr/bin/koji' }
has koji_target => (
traits => [ 'Getopt' ],
is => 'rw',
isa => 'Str',
lazy_build => 1,
cmd_flag => 'koji-target',
documentation => 'Target for scratch build (default: dist-f12)',
);
sub _build_koji_target { 'dist-f12' }
has no_koji => (
traits => [ 'Getopt' ],
is => 'rw',
isa => 'Bool',
default => 0,
cmd_flag => 'no-koji',
documentation => q{Don't run a scratch build},
);
has _koji_success => (
is => 'rw',
isa => 'Bool',
clearer => '_clear_koji_success',
predicate => '_has_koji_success',
);
# e.g. http://koji.fedoraproject.org/koji/taskinfo?taskID=914599
has _koji_uri => (is => 'rw', isa => Uri, coerce => 1);
has _koji_output => (
is => 'rw',
isa => 'ArrayRef[Str]',
auto_deref => 1,
predicate => '_has_koji_output',
);
sub koji_run_scratch {
my ($self, $srpm) = @_;
# first, make sure things work...
die "Cannot read $srpm!\n"
unless -r $srpm && -f _;
my $cmd = $self->koji . ' build --scratch ' . $self->koji_target
. q{ } . "$srpm";
print "Running koji build -- this may take some time\n";
my @output = `$cmd`;
# $CHILD_ERROR aka $?, which I can never remember...
#die "koji failed with: $CHILD_ERROR\n" if $CHILD_ERROR;
$self->_koji_output(\@output);
# find our task uri; e.g.
# Task info: http://koji.fedoraproject.org/koji/taskinfo?taskID=914599
my $uri = first { /^Task info/ } @output;
$uri = (split / /, $uri)[2];
$self->_koji_uri($uri);
$self->_koji_success($output[-1] =~ /success/);
if ($output[-1] =~ /success/) {
# victory is mine!
$self->_koji_success(1);
return 1;
}
# if we're here, the build failed
$self->_koji_success(0);
$self->log->warn("Koji failed! ($uri): \n" . join q{}, @output);
}
# this is horribly hackish, and I certainly hope it won't be around any longer
# than it has to (read: until Fedora::Koji is available)
# we don't actually use this yet
with 'MooseX::Role::XMLRPC::Client' => {
name => '_kojirpc',
uri => 'http://koji.fedoraproject.org/kojihub',
login_info => 0,
};
sub get_koji_task_children {
my ($self, $task_id) = @_;
return $self->_kojirpc_rpc->simple_request('getTaskChildren', $task_id);
}
1;
__END__