Exemplo n.º 1
0
 /**
  * @todo the policy check and Payload->isBuildable() could be implemented
  *       as a voting system
  */
 private function schedulePullRequest(PayloadInterface $payload, Project $project)
 {
     $logger = $this->get('logger');
     switch ($project->getSettings()->getPolicy()) {
         case ProjectSettings::POLICY_ALL:
         case ProjectSettings::POLICY_PR:
             $doBuild = true;
             break;
         case ProjectSettings::POLICY_PATTERNS:
         case ProjectSettings::POLICY_NONE:
             $doBuild = false;
             break;
         default:
             $logger->error('could not find a build policy', ['project' => $project->getFullName(), 'pull_request_number' => $payload->getPullRequestNumber()]);
             return new JsonResponse(['project' => $project->getFullName(), 'class' => 'danger', 'policy' => $project->getSettings()->getPolicy(), 'message' => 'Could not find a valid build policy'], 400);
     }
     if (!$doBuild) {
         $logger->info('build declined by project policy', ['project' => $project->getId(), 'number' => $payload->getPullRequestNumber()]);
         return new JsonResponse(['class' => 'info', 'message' => 'Build declined by project policy (' . $project->getSettings()->getPolicy() . ')'], 200);
     }
     if (!$payload->isBuildable()) {
         return new JsonResponse(json_encode(['class' => 'danger', 'message' => 'pull request is not buildable']), 200);
     }
     $ref = sprintf('pull/%d/head', $payload->getPullRequestNumber());
     $provider = $this->get('app_core.provider.factory')->getProvider($project);
     return [$ref, $provider->getHashFromRef($project, $ref)];
 }