forked from lix-project/hydra
Add CircleCI plugin.
This commit is contained in:
parent
fed37ea640
commit
f4b4ee5751
44
src/lib/Hydra/Plugin/CircleCINotification.pm
Normal file
44
src/lib/Hydra/Plugin/CircleCINotification.pm
Normal file
|
@ -0,0 +1,44 @@
|
|||
package Hydra::Plugin::CircleCINotification;
|
||||
|
||||
use strict;
|
||||
use parent 'Hydra::Plugin';
|
||||
use HTTP::Request;
|
||||
use LWP::UserAgent;
|
||||
use Hydra::Helper::CatalystUtils;
|
||||
use JSON;
|
||||
|
||||
sub buildFinished {
|
||||
my ($self, $build, $dependents) = @_;
|
||||
my $cfg = $self->{config}->{circleci};
|
||||
my @config = defined $cfg ? ref $cfg eq "ARRAY" ? @$cfg : ($cfg) : ();
|
||||
|
||||
# Figure out to which branches to send notification.
|
||||
my %branches;
|
||||
foreach my $b ($build, @{$dependents}) {
|
||||
my $prevBuild = getPreviousBuild($b);
|
||||
my $jobName = showJobName $b;
|
||||
|
||||
foreach my $branch (@config) {
|
||||
my $force = $branch->{force};
|
||||
next unless $jobName =~ /^$branch->{jobs}$/;
|
||||
|
||||
# If build is failed, don't trigger circleci
|
||||
next if ! $force && $b->buildstatus != 0;
|
||||
|
||||
my $fullUrl = "https://circleci.com/api/v1.1/project/" . $branch->{vcstype} . "/" . $branch->{username} . "/" . $branch->{project} . "/tree/" . $branch->{branch} . "?circle-token=" . $branch->{token};
|
||||
$branches{$fullUrl} = 1;
|
||||
}
|
||||
}
|
||||
|
||||
return if scalar keys %branches == 0;
|
||||
|
||||
# Trigger earch branch
|
||||
my $ua = LWP::UserAgent->new();
|
||||
foreach my $url (keys %branches) {
|
||||
my $req = HTTP::Request->new('POST', $url);
|
||||
$req->header('Content-Type' => 'application/json');
|
||||
$ua->request($req);
|
||||
}
|
||||
}
|
||||
|
||||
1;
|
Loading…
Reference in a new issue