- @if (data_get($deployment, 'pull_request_id'))
-
-
>
- Pull Request #{{ data_get($deployment, 'pull_request_id') }}
+ @if (data_get($deployment, 'is_webhook') || data_get($deployment, 'pull_request_id'))
+
@if (data_get($deployment, 'is_webhook'))
- (Webhook)
+ Webhook
@endif
- Webhook (SHA
- @if (data_get($deployment, 'commit'))
- {{ data_get($deployment, 'commit') }})
- @else
- HEAD)
+ @if (data_get($deployment, 'pull_request_id'))
+ @if (data_get($deployment, 'is_webhook'))
+ |
+ @endif
+ Pull Request #{{ data_get($deployment, 'pull_request_id') }}
+ (SHA
+ @if (data_get($deployment, 'commit'))
+ {{ data_get($deployment, 'commit') }})
+ @else
+ HEAD)
+ @endif
@endif
+ @else
+
+ Manual
+
@endif
diff --git a/routes/webhooks.php b/routes/webhooks.php
index 3eab89a3a..515b90d84 100644
--- a/routes/webhooks.php
+++ b/routes/webhooks.php
@@ -397,6 +397,7 @@ Route::post('/source/bitbucket/events/manual', function () {
});
Route::post('/source/github/events/manual', function () {
try {
+ $return_payloads = collect([]);
$x_github_event = Str::lower(request()->header('X-GitHub-Event'));
$x_hub_signature_256 = Str::after(request()->header('X-Hub-Signature-256'), 'sha256=');
$content_type = request()->header('Content-Type');
@@ -445,13 +446,22 @@ Route::post('/source/github/events/manual', function () {
foreach ($applications as $application) {
$webhook_secret = data_get($application, 'manual_webhook_secret_github');
$hmac = hash_hmac('sha256', request()->getContent(), $webhook_secret);
- if (!hash_equals($x_hub_signature_256, $hmac)) {
+ if (!hash_equals($x_hub_signature_256, $hmac) && !isDev()) {
ray('Invalid signature');
+ $return_payloads->push([
+ 'application' => $application->name,
+ 'status' => 'failed',
+ 'message' => 'Invalid token.',
+ ]);
continue;
}
$isFunctional = $application->destination->server->isFunctional();
if (!$isFunctional) {
- ray('Server is not functional: ' . $application->destination->server->name);
+ $return_payloads->push([
+ 'application' => $application->name,
+ 'status' => 'failed',
+ 'message' => 'Server is not functional.',
+ ]);
continue;
}
if ($x_github_event === 'push') {
@@ -462,10 +472,19 @@ Route::post('/source/github/events/manual', function () {
application: $application,
deployment_uuid: $deployment_uuid,
force_rebuild: false,
- is_webhook: true
+ is_webhook: true,
);
+ $return_payloads->push([
+ 'application' => $application->name,
+ 'status' => 'success',
+ 'message' => 'Deployment queued.',
+ ]);
} else {
- ray('Deployments disabled for ' . $application->name);
+ $return_payloads->push([
+ 'application' => $application->name,
+ 'status' => 'failed',
+ 'message' => 'Deployments disabled.',
+ ]);
}
}
if ($x_github_event === 'pull_request') {
@@ -489,11 +508,17 @@ Route::post('/source/github/events/manual', function () {
is_webhook: true,
git_type: 'github'
);
- ray('Deploying preview for ' . $application->name . ' with branch ' . $branch . ' and base branch ' . $base_branch . ' and pull request id ' . $pull_request_id);
- return response('Preview Deployment queued.');
+ $return_payloads->push([
+ 'application' => $application->name,
+ 'status' => 'success',
+ 'message' => 'Preview deployment queued.',
+ ]);
} else {
- ray('Preview deployments disabled for ' . $application->name);
- return response('Nothing to do. Preview Deployments disabled.');
+ $return_payloads->push([
+ 'application' => $application->name,
+ 'status' => 'failed',
+ 'message' => 'Preview deployments disabled.',
+ ]);
}
}
if ($action === 'closed') {
@@ -503,12 +528,23 @@ Route::post('/source/github/events/manual', function () {
$container_name = generateApplicationContainerName($application, $pull_request_id);
// ray('Stopping container: ' . $container_name);
instant_remote_process(["docker rm -f $container_name"], $application->destination->server);
- return response('Preview Deployment closed.');
+ $return_payloads->push([
+ 'application' => $application->name,
+ 'status' => 'success',
+ 'message' => 'Preview deployment closed.',
+ ]);
+ } else {
+ $return_payloads->push([
+ 'application' => $application->name,
+ 'status' => 'failed',
+ 'message' => 'No preview deployment found.',
+ ]);
}
- return response('Nothing to do. No Preview Deployment found');
}
}
}
+ ray($return_payloads);
+ return response($return_payloads);
} catch (Exception $e) {
ray($e->getMessage());
return handleError($e);
@@ -516,6 +552,7 @@ Route::post('/source/github/events/manual', function () {
});
Route::post('/source/github/events', function () {
try {
+ $return_payloads = collect([]);
$id = null;
$x_github_delivery = request()->header('X-GitHub-Delivery');
$x_github_event = Str::lower(request()->header('X-GitHub-Event'));
@@ -539,7 +576,7 @@ Route::post('/source/github/events', function () {
$hmac = hash_hmac('sha256', request()->getContent(), $webhook_secret);
if (config('app.env') !== 'local') {
if (!hash_equals($x_hub_signature_256, $hmac)) {
- return response('not cool');
+ return response('Invalid signature.');
}
}
if ($x_github_event === 'push') {
@@ -579,7 +616,11 @@ Route::post('/source/github/events', function () {
foreach ($applications as $application) {
$isFunctional = $application->destination->server->isFunctional();
if (!$isFunctional) {
- ray('Server is not functional: ' . $application->destination->server->name);
+ $return_payloads->push([
+ 'application' => $application->name,
+ 'status' => 'failed',
+ 'message' => 'Server is not functional.',
+ ]);
continue;
}
if ($x_github_event === 'push') {
@@ -592,8 +633,17 @@ Route::post('/source/github/events', function () {
force_rebuild: false,
is_webhook: true
);
+ $return_payloads->push([
+ 'application' => $application->name,
+ 'status' => 'success',
+ 'message' => 'Deployment queued.',
+ ]);
} else {
- ray('Deployments disabled for ' . $application->name);
+ $return_payloads->push([
+ 'application' => $application->name,
+ 'status' => 'failed',
+ 'message' => 'Deployments disabled.',
+ ]);
}
}
if ($x_github_event === 'pull_request') {
@@ -617,11 +667,17 @@ Route::post('/source/github/events', function () {
is_webhook: true,
git_type: 'github'
);
- ray('Deploying preview for ' . $application->name . ' with branch ' . $branch . ' and base branch ' . $base_branch . ' and pull request id ' . $pull_request_id);
- return response('Preview Deployment queued.');
+ $return_payloads->push([
+ 'application' => $application->name,
+ 'status' => 'success',
+ 'message' => 'Preview deployment queued.',
+ ]);
} else {
- ray('Preview deployments disabled for ' . $application->name);
- return response('Nothing to do. Preview Deployments disabled.');
+ $return_payloads->push([
+ 'application' => $application->name,
+ 'status' => 'failed',
+ 'message' => 'Preview deployments disabled.',
+ ]);
}
}
if ($action === 'closed' || $action === 'close') {
@@ -632,12 +688,23 @@ Route::post('/source/github/events', function () {
$container_name = generateApplicationContainerName($application, $pull_request_id);
// ray('Stopping container: ' . $container_name);
instant_remote_process(["docker rm -f $container_name"], $application->destination->server);
- return response('Preview Deployment closed.');
+ $return_payloads->push([
+ 'application' => $application->name,
+ 'status' => 'success',
+ 'message' => 'Preview deployment closed.',
+ ]);
+ } else {
+ $return_payloads->push([
+ 'application' => $application->name,
+ 'status' => 'failed',
+ 'message' => 'No preview deployment found.',
+ ]);
}
- return response('Nothing to do. No Preview Deployment found');
}
}
}
+ ray($return_payloads);
+ return response($return_payloads);
} catch (Exception $e) {
ray($e->getMessage());
return handleError($e);