/**
* Takes the data returned from the webhook request and then adds deployers own data, such as project ID
* and runs any checks such as checks the branch is allowed to be deployed.
*
* @param array $payload
* @param Request $request
* @param Project $project
*
* @return array|false Either an array of the complete deployment config, or false if it is invalid.
*/
private function appendProjectSettings($payload, Request $request, Project $project)
{
// If the payload is empty return false
if (!is_array($payload) || !count($payload)) {
return false;
}
$payload['project_id'] = $project->id;
// If there is no branch set get it from the project
if (is_null($payload['branch']) || empty($payload['branch'])) {
$payload['branch'] = $project->branch;
}
// If the project doesn't allow other branches check the requested branch is the correct one
if (!$project->allow_other_branch && $payload['branch'] !== $project->branch) {
return false;
}
$payload['optional'] = [];
// Check if the commands input is set, if so explode on comma and filter out any invalid commands
if ($request->has('commands')) {
$valid = $project->commands->lists('id');
$requested = explode(',', $request->get('commands'));
$payload['optional'] = collect($requested)->unique()->intersect($valid)->toArray();
}
// If the webhook is allowed to deploy other branches check if the request has an update_only
// query string and if so check the branch matches that which is currently deployed
if ($project->allow_other_branch && $request->has('update_only') && $request->get('update_only') !== false) {
$deployment = $this->deploymentRepository->getLatestSuccessful($project->id);
if (!$deployment || $deployment->branch !== $payload['branch']) {
return false;
}
}
return $payload;
}