Add CircleCI plugin.

[?]
Apr 19, 2017, 7:20 PM
RCTBHBVC6LHEPG4MYV7VGXA2VJ226FQI42XCNBPAV2BJKLIPGHCAC

Dependencies

Change contents

  • file addition: CircleCINotification.pm (----------)
    [2.1]
    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;