blob: 87cfba2ebb030c364371a02f4e33bcef5ea3ff64 (
plain) (
blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
|
package jitterbug::Hook;
use Dancer ':syntax';
use Dancer::Plugin::DBIC;
use Try::Tiny;
setting serializer => 'JSON';
post '/' => sub {
my $payload = params->{payload};
# don't confuse poster, and don't care about it
if (!defined $payload) {
error("no payload in input");
status 200;
return;
}
$payload = from_json($payload);
my $repo = $payload->{repository}->{name};
my $project = schema->resultset('Project')->find( { name => $repo } );
if ( !$project ) {
debug("need to create a new project");
try {
schema->txn_do(
sub {
$project = schema->resultset('Project')->create(
{
name => $repo,
url => $payload->{repository}->{url},
description =>
$payload->{repository}->{description},
owner => to_json($payload->{repository}->{owner}),
}
);
}
);
}
catch {
error($_);
};
}
my $last_commit = pop @{ $payload->{commits} };
$last_commit->{compare} = $payload->{compare};
$last_commit->{pusher} = $payload->{pushed};
$last_commit->{ref} = $payload->{ref};
try {
schema->txn_do(
sub {
schema->resultset('Commit')->create(
{
sha256 => $last_commit->{id},
content => to_json($last_commit),
projectid => $project->projectid,
timestamp => $last_commit->{timestamp},
}
);
}
);
}
catch {
error($_);
};
try {
schema->txn_do(
sub {
schema->resultset('Task')->create(
{sha256 => $last_commit->{id}, projectid => $project->projectid}
);
}
);
}catch{
error($_);
};
debug("hook accepted");
{ updated => $repo };
};
1;
|