Example #1
0
 /**
  * Place a comment using the configured comment plus
  * a dump of payload data from the Payload. Set the
  * comment for a pull request or commit as determined
  * by the OPTION_PULL_REQUEST and OPTION_COMMIT flags
  * (both of which are booleans).
  *
  * Both options can be set to TRUE, but if pull request
  * commenting is enabled, it takes priority. To comment
  * on the HEAD commit of a pull request, run this plugin
  * with only the OPTION_COMMIT flag.
  *
  * @param Payload $payload
  * @return void
  */
 public function process(Payload $payload)
 {
     $commentSetting = $this->getSetting(self::OPTION_COMMENT);
     if (FALSE === empty($commentSetting)) {
         $commentSetting .= PHP_EOL;
     }
     $errors = $payload->getResponse()->getErrors();
     $output = $payload->getResponse()->getOutput();
     $commentString = $commentSetting . $this->renderErrorsAsMarkupList($errors) . $this->renderPayloadDataAsMarkupList($output);
     $commentString = trim($commentString);
     if (TRUE === (bool) $this->getSettingValue(self::OPTION_PULL_REQUEST, FALSE)) {
         $payload->storePullRequestComment($payload->getPullRequest(), $commentString);
     } elseif (TRUE === (bool) $this->getSettingValue(self::OPTION_COMMIT, FALSE)) {
         $payload->storeCommitComment($payload->getHead(), $commentString);
     }
 }
 /**
  * @param Payload $payload
  * @param Commit $commit
  * @param string $url
  * @return boolean
  */
 protected function validateCodeStyleOfPhpFile(Payload $payload, Commit $commit, $url, $path)
 {
     $contents = file_get_contents($url);
     $syntaxCommand = 'php -l';
     list($result, $errors) = $this->passStdinToCommand($syntaxCommand, $contents);
     if (FALSE === empty($errors)) {
         $errors = trim($errors);
         $errors = str_replace('parse error in - on line', 'parse error in ' . $path . ' on line', $errors);
         $payload->storeCommitValidation($payload->getPullRequest(), $commit, $errors, $path, substr($errors, 0, strrpos($errors, ' ')));
         $this->markCommit($payload, $commit, 'PHP syntax check failed! ' . $errors);
         return FALSE;
     }
     $codeStyleCommand = 'vendor/bin/phpcs --standard=' . $this->getSettingValue(self::OPTION_CODE_STYLE_RULES) . ' --report=json';
     list($result, $errors) = $this->passStdinToCommand($codeStyleCommand, $contents);
     if (FALSE === empty($errors)) {
         $payload->getResponse()->addOutputFromPlugin($this, array('Error running PHPCS: ' . $errors));
         return FALSE;
     }
     $validation = json_decode($result, JSON_OBJECT_AS_ARRAY);
     $errorsAndWarnings = (int) $validation['totals']['errors'] + (int) $validation['totals']['warnings'];
     if (0 === $errorsAndWarnings) {
         $this->markCommit($payload, $commit, 'No parsing errors and coding style is valid', 'success');
         return TRUE;
     } else {
         $messages = $validation['files']['STDIN']['messages'];
         foreach ($messages as $messageData) {
             $payload->storeCommitValidation($payload->getPullRequest(), $commit, $messageData['message'], $path, $messageData['line']);
             $this->markCommit($payload, $commit, 'Commit has one or more coding standards violations');
         }
         return FALSE;
     }
 }
 /**
  * @param Payload $payload
  * @return boolean
  */
 protected function validateCodeStyleOfPhpFilesInCommits(Payload $payload)
 {
     $url = $payload->getPullRequest()->getUrlCommits();
     $urlPath = $this->getUrlPathFromUrl($url);
     $response = $payload->getApi()->get($urlPath);
     $commits = json_decode($response->getContent(), JSON_OBJECT_AS_ARRAY);
     $hasErrors = FALSE;
     foreach ($commits as $commitData) {
         $commitUrl = $commitData['url'];
         $commitUrlPath = $this->getUrlPathFromUrl($commitUrl);
         $commitResponse = $payload->getApi()->get($commitUrlPath);
         $commitData = json_decode($commitResponse->getContent(), JSON_OBJECT_AS_ARRAY);
         $commit = new Commit($commitData);
         $commit->setId($commitData['sha']);
         foreach ($commitData['files'] as $fileData) {
             $extension = pathinfo($fileData['filename'], PATHINFO_EXTENSION);
             if (self::PHP_EXTENSION === $extension) {
                 $result = $this->validateCodeStyleOfPhpFile($payload, $commit, $fileData['raw_url'], $fileData['filename']);
                 $hasErrors = TRUE !== $result || TRUE === $hasErrors;
             }
         }
     }
     return FALSE === $hasErrors;
 }