-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathpush.php
More file actions
114 lines (92 loc) · 4.67 KB
/
push.php
File metadata and controls
114 lines (92 loc) · 4.67 KB
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
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
<?php
/**
* Push webhook handler
*/
declare(strict_types=1);
require_once "header.php";
use xisrapilx\githubvknotifier\data\github\hook\exception\HookException;
use xisrapilx\githubvknotifier\data\github\hook\Push;
use xisrapilx\githubvknotifier\logger\LoggerProvider;
use xisrapilx\githubvknotifier\utils\config\ConfigProvider;
use xisrapilx\githubvknotifier\utils\exception\NetworkUtilsException;
use xisrapilx\githubvknotifier\utils\NetworkUtils;
use xisrapilx\githubvknotifier\utils\vk\exception\VKException;
use xisrapilx\githubvknotifier\utils\vk\VKUtils;
$logger = LoggerProvider::provide();
try{
$config = ConfigProvider::provide();
if($config->testing){
$push = Push::fromJsonObject(json_decode(file_get_contents("test.json")));
}else{
$push = Push::fromInput();
}
if(!in_array($push->repository->id, $config->acceptedRepositoryIds)){
$logger->notice("Попытка обработки репозитория не из списка разрешенных(политкорректно!) репозиториев.");
return;
}
if(empty($push->commits)){
$logger->notice("Событие без изменений не может быть обработано.");
return;
}
try{
$artifactFilename = WORKING_DIRECTORY."artifact.zipp";
$bytes = file_put_contents($artifactFilename, NetworkUtils::getRequest(
"https://api.github.com/repos/{$push->repository->full_name}/zipball",
[],
[],
[
CURLOPT_USERPWD => "{$config->githubLogin}:{$config->githubAccessToken}"
]
));
$logger->info("Ядро успешно скачано! Байтов записано: ".$bytes);
if($bytes > 1){
$vkUtils = new VKUtils($config->vkAccessToken, "5.122");
try{
$data = $vkUtils->getMessagesDocumentUploadServer($config->vkPeerId);
if(isset($data["response"]["upload_url"])){
$data = $vkUtils->uploadDocument($data["response"]["upload_url"], $artifactFilename);
if(isset($data["file"])){
$data = $vkUtils->saveDocument($data);
if(isset($data["response"])){
$message = "Новые изменения в репозитории {$push->repository->full_name}!".PHP_EOL.PHP_EOL;
$message .= "Коммиты:";
foreach($push->commits as $commit){
$message .= $commit->message.PHP_EOL;
}
$message .= PHP_EOL."Автор изменений: ".$push->sender->login;
$data = $vkUtils->sendMessage(
$config->vkPeerId,
$message,
"doc".$data["response"]["doc"]["owner_id"]."_".$data["response"]["doc"]["id"]);
if(is_int($data["response"])){
$logger->info("Сообщение с артифактом отправлено! Идентификатор: ".$data["response"]);
}else{
$logger->error("Не получилось отправить сообщение в диалог!");
}
}else{
$logger->error("Не удалось сохранить документ!");
$logger->debug(var_export($data, true));
}
}else{
$logger->error("Не удалось загрузить документ!");
$logger->debug(var_export($data, true));
}
}else{
$logger->error("Не удалось получить сервер для загрузки документа!");
$logger->debug(var_export($data, true));
}
}catch(VKException $exception){
$logger->error("[{$exception->getCode()}] ".$exception->getMessage());
$logger->debug($exception->getTraceAsString());
}
}else{
$logger->info("Не удалось загрузить артифакты!");
}
}catch(NetworkUtilsException $exception){
$logger->error("[{$exception->getCode()}]".$exception->getMessage());
$logger->debug($exception->getTraceAsString());
}
}catch(HookException $exception){
$logger->error($exception->getMessage());
$logger->debug($exception->getTraceAsString());
}