Skip to content
This repository was archived by the owner on Nov 5, 2020. It is now read-only.

Commit f7da27c

Browse files
committed
add ping event in github
1 parent bd2feb0 commit f7da27c

File tree

4 files changed

+197
-10
lines changed

4 files changed

+197
-10
lines changed

src/Event/PingEvent.php

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
<?php
2+
3+
namespace DavidBadura\GitWebhooks\Event;
4+
5+
/**
6+
* @author David Badura <d.a.badura@gmail.com>
7+
*/
8+
class PingEvent extends AbstractEvent
9+
{
10+
/**
11+
* @var int
12+
*/
13+
public $id;
14+
15+
/**
16+
* @var string
17+
*/
18+
public $title;
19+
20+
/**
21+
* @var string
22+
*/
23+
public $description;
24+
25+
/**
26+
* @var string
27+
*/
28+
public $action;
29+
}

src/Provider/GithubProvider.php

Lines changed: 18 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44

55
use DavidBadura\GitWebhooks\Event\AbstractEvent;
66
use DavidBadura\GitWebhooks\Event\MergeRequestEvent;
7+
use DavidBadura\GitWebhooks\Event\PingEvent;
78
use DavidBadura\GitWebhooks\Event\PushEvent;
89
use DavidBadura\GitWebhooks\Struct\Commit;
910
use DavidBadura\GitWebhooks\Struct\Repository;
@@ -23,6 +24,8 @@ public function create(Request $request)
2324
{
2425
$data = $this->getData($request);
2526
switch ($request->headers->get('X-Github-Event')) {
27+
case 'ping':
28+
return $this->createPingEvent($data);
2629
case 'push':
2730
return $this->createPushEvent($data);
2831
case 'pull_request':
@@ -41,6 +44,19 @@ public function support(Request $request)
4144
return $request->headers->has('X-GitHub-Event');
4245
}
4346

47+
/**
48+
* @param array $data
49+
* @return PingEvent
50+
*/
51+
private function createPingEvent($data)
52+
{
53+
$event = new PingEvent();
54+
$event->provider = self::NAME;
55+
$event->repository = $this->createRepository($data['repository']);
56+
57+
return $event;
58+
}
59+
4460
/**
4561
* @param array $data
4662
* @return PushEvent
@@ -61,16 +77,8 @@ private function createPushEvent($data)
6177
$user->email = $data['pusher']['email'];
6278
}
6379

64-
$repository = new Repository();
65-
$repository->id = $data['repository']['id'];
66-
$repository->name = $data['repository']['name'];
67-
$repository->namespace = $this->extractNamespace($data['repository']['full_name']);
68-
$repository->description = $data['repository']['description'];
69-
$repository->homepage = $data['repository']['homepage'];
70-
$repository->url = $data['repository']['html_url'];
71-
7280
$event->user = $user;
73-
$event->repository = $repository;
81+
$event->repository = $this->createRepository($data['repository']);
7482
$event->commits = $this->createCommits($data['commits']);
7583

7684
if (!$event->commits) {
@@ -178,7 +186,7 @@ private function extractNamespace($fullName)
178186
*/
179187
private function pullRequestState(array $pullRequest)
180188
{
181-
if ($pullRequest['state'] == 'open') {
189+
if ($pullRequest['state'] === 'open') {
182190
return MergeRequestEvent::STATE_OPEN;
183191
}
184192

tests/Provider/GithubProviderTest.php

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -84,6 +84,20 @@ public function testPullRequest()
8484
$this->assertEquals('0d1a26e67d8f5eaf1f6ba5c57fc3c7d91ac0fd1c', $event->lastCommit->id);
8585
}
8686

87+
public function testPingRequest()
88+
{
89+
$request = $this->createRequest('ping', __DIR__ . '/_files/github/ping.json');
90+
91+
$provider = new GithubProvider();
92+
93+
/** @var MergeRequestEvent $event */
94+
$event = $provider->create($request);
95+
96+
$this->assertInstanceOf('DavidBadura\GitWebhooks\Event\PingEvent', $event);
97+
$this->assertEquals('simpspector', $event->repository->name);
98+
$this->assertEquals('simpspector', $event->repository->namespace);
99+
}
100+
87101
/**
88102
* @param string $event
89103
* @param string $file
Lines changed: 136 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,136 @@
1+
{
2+
"zen": "Speak like a human.",
3+
"hook_id": 11668534,
4+
"hook": {
5+
"type": "Repository",
6+
"id": 11668534,
7+
"name": "web",
8+
"active": true,
9+
"events": [
10+
"commit_comment",
11+
"push"
12+
],
13+
"config": {
14+
"content_type": "form",
15+
"insecure_ssl": "0",
16+
"url": "https://simpspector.wallenborn.net/hooks"
17+
},
18+
"updated_at": "2017-01-23T08:47:37Z",
19+
"created_at": "2017-01-23T08:47:37Z",
20+
"url": "https://api.github.com/repos/simpspector/simpspector/hooks/11668534",
21+
"test_url": "https://api.github.com/repos/simpspector/simpspector/hooks/11668534/test",
22+
"ping_url": "https://api.github.com/repos/simpspector/simpspector/hooks/11668534/pings",
23+
"last_response": {
24+
"code": null,
25+
"status": "unused",
26+
"message": null
27+
}
28+
},
29+
"repository": {
30+
"id": 26141279,
31+
"name": "simpspector",
32+
"full_name": "simpspector/simpspector",
33+
"owner": {
34+
"login": "simpspector",
35+
"id": 11267955,
36+
"avatar_url": "https://avatars.githubusercontent.com/u/11267955?v=3",
37+
"gravatar_id": "",
38+
"url": "https://api.github.com/users/simpspector",
39+
"html_url": "https://github.com/simpspector",
40+
"followers_url": "https://api.github.com/users/simpspector/followers",
41+
"following_url": "https://api.github.com/users/simpspector/following{/other_user}",
42+
"gists_url": "https://api.github.com/users/simpspector/gists{/gist_id}",
43+
"starred_url": "https://api.github.com/users/simpspector/starred{/owner}{/repo}",
44+
"subscriptions_url": "https://api.github.com/users/simpspector/subscriptions",
45+
"organizations_url": "https://api.github.com/users/simpspector/orgs",
46+
"repos_url": "https://api.github.com/users/simpspector/repos",
47+
"events_url": "https://api.github.com/users/simpspector/events{/privacy}",
48+
"received_events_url": "https://api.github.com/users/simpspector/received_events",
49+
"type": "Organization",
50+
"site_admin": false
51+
},
52+
"private": false,
53+
"html_url": "https://github.com/simpspector/simpspector",
54+
"description": ":eyes: SimpleThings Code Inspector for gitlab and github (almost alpha) - Metrics, Static Code Analytics, Coding Standards, ...",
55+
"fork": false,
56+
"url": "https://api.github.com/repos/simpspector/simpspector",
57+
"forks_url": "https://api.github.com/repos/simpspector/simpspector/forks",
58+
"keys_url": "https://api.github.com/repos/simpspector/simpspector/keys{/key_id}",
59+
"collaborators_url": "https://api.github.com/repos/simpspector/simpspector/collaborators{/collaborator}",
60+
"teams_url": "https://api.github.com/repos/simpspector/simpspector/teams",
61+
"hooks_url": "https://api.github.com/repos/simpspector/simpspector/hooks",
62+
"issue_events_url": "https://api.github.com/repos/simpspector/simpspector/issues/events{/number}",
63+
"events_url": "https://api.github.com/repos/simpspector/simpspector/events",
64+
"assignees_url": "https://api.github.com/repos/simpspector/simpspector/assignees{/user}",
65+
"branches_url": "https://api.github.com/repos/simpspector/simpspector/branches{/branch}",
66+
"tags_url": "https://api.github.com/repos/simpspector/simpspector/tags",
67+
"blobs_url": "https://api.github.com/repos/simpspector/simpspector/git/blobs{/sha}",
68+
"git_tags_url": "https://api.github.com/repos/simpspector/simpspector/git/tags{/sha}",
69+
"git_refs_url": "https://api.github.com/repos/simpspector/simpspector/git/refs{/sha}",
70+
"trees_url": "https://api.github.com/repos/simpspector/simpspector/git/trees{/sha}",
71+
"statuses_url": "https://api.github.com/repos/simpspector/simpspector/statuses/{sha}",
72+
"languages_url": "https://api.github.com/repos/simpspector/simpspector/languages",
73+
"stargazers_url": "https://api.github.com/repos/simpspector/simpspector/stargazers",
74+
"contributors_url": "https://api.github.com/repos/simpspector/simpspector/contributors",
75+
"subscribers_url": "https://api.github.com/repos/simpspector/simpspector/subscribers",
76+
"subscription_url": "https://api.github.com/repos/simpspector/simpspector/subscription",
77+
"commits_url": "https://api.github.com/repos/simpspector/simpspector/commits{/sha}",
78+
"git_commits_url": "https://api.github.com/repos/simpspector/simpspector/git/commits{/sha}",
79+
"comments_url": "https://api.github.com/repos/simpspector/simpspector/comments{/number}",
80+
"issue_comment_url": "https://api.github.com/repos/simpspector/simpspector/issues/comments{/number}",
81+
"contents_url": "https://api.github.com/repos/simpspector/simpspector/contents/{+path}",
82+
"compare_url": "https://api.github.com/repos/simpspector/simpspector/compare/{base}...{head}",
83+
"merges_url": "https://api.github.com/repos/simpspector/simpspector/merges",
84+
"archive_url": "https://api.github.com/repos/simpspector/simpspector/{archive_format}{/ref}",
85+
"downloads_url": "https://api.github.com/repos/simpspector/simpspector/downloads",
86+
"issues_url": "https://api.github.com/repos/simpspector/simpspector/issues{/number}",
87+
"pulls_url": "https://api.github.com/repos/simpspector/simpspector/pulls{/number}",
88+
"milestones_url": "https://api.github.com/repos/simpspector/simpspector/milestones{/number}",
89+
"notifications_url": "https://api.github.com/repos/simpspector/simpspector/notifications{?since,all,participating}",
90+
"labels_url": "https://api.github.com/repos/simpspector/simpspector/labels{/name}",
91+
"releases_url": "https://api.github.com/repos/simpspector/simpspector/releases{/id}",
92+
"deployments_url": "https://api.github.com/repos/simpspector/simpspector/deployments",
93+
"created_at": "2014-11-03T22:12:14Z",
94+
"updated_at": "2017-01-20T14:00:04Z",
95+
"pushed_at": "2017-01-20T13:59:03Z",
96+
"git_url": "git://github.com/simpspector/simpspector.git",
97+
"ssh_url": "git@github.com:simpspector/simpspector.git",
98+
"clone_url": "https://github.com/simpspector/simpspector.git",
99+
"svn_url": "https://github.com/simpspector/simpspector",
100+
"homepage": "",
101+
"size": 1187,
102+
"stargazers_count": 6,
103+
"watchers_count": 6,
104+
"language": "PHP",
105+
"has_issues": true,
106+
"has_downloads": true,
107+
"has_wiki": true,
108+
"has_pages": false,
109+
"forks_count": 1,
110+
"mirror_url": null,
111+
"open_issues_count": 25,
112+
"forks": 1,
113+
"open_issues": 25,
114+
"watchers": 6,
115+
"default_branch": "master"
116+
},
117+
"sender": {
118+
"login": "larsborn",
119+
"id": 1826897,
120+
"avatar_url": "https://avatars.githubusercontent.com/u/1826897?v=3",
121+
"gravatar_id": "",
122+
"url": "https://api.github.com/users/larsborn",
123+
"html_url": "https://github.com/larsborn",
124+
"followers_url": "https://api.github.com/users/larsborn/followers",
125+
"following_url": "https://api.github.com/users/larsborn/following{/other_user}",
126+
"gists_url": "https://api.github.com/users/larsborn/gists{/gist_id}",
127+
"starred_url": "https://api.github.com/users/larsborn/starred{/owner}{/repo}",
128+
"subscriptions_url": "https://api.github.com/users/larsborn/subscriptions",
129+
"organizations_url": "https://api.github.com/users/larsborn/orgs",
130+
"repos_url": "https://api.github.com/users/larsborn/repos",
131+
"events_url": "https://api.github.com/users/larsborn/events{/privacy}",
132+
"received_events_url": "https://api.github.com/users/larsborn/received_events",
133+
"type": "User",
134+
"site_admin": false
135+
}
136+
}

0 commit comments

Comments
 (0)