Esempio n. 1
0
function setStatus(\NamelessCoder\Gizzle\Payload $payload, \Milo\Github\Api $api, $state, $buildNumber)
{
    $token = $api->getToken();
    $head = $payload->getHead();
    if (TRUE === empty($token) || TRUE === empty($head)) {
        return;
    }
    $url = sprintf('/repos/%s/%s/statuses/%s', $payload->getRepository()->getOwner()->getName(), $payload->getRepository()->getName(), $head->getId());
    switch ($state) {
        case 'pending':
            $description = 'Waiting to hear from Gizzle...';
            break;
        case 'success':
            $description = 'Gizzle build was successful!';
            break;
        case 'error':
            $description = 'Gizzle reported an error!';
            break;
        case 'failure':
            $description = 'Gizzle was unable to run the build!';
            break;
        default:
    }
    $data = array('state' => $state, 'target_url' => 'http://github.com/NamelessCoder/gizzle', 'context' => $payload->getRepository()->getFullName() . '-gizzle-build-' . $buildNumber, 'description' => $description);
    $api->post($url, $data);
}
 /**
  * @param Payload $payload
  * @return string
  */
 protected function getRepositoryPath(Payload $payload)
 {
     $repositoryRelativePath = sprintf($this->getSettingValue(self::OPTION_DIRECTORY), $payload->getRepository()->getName());
     $repositoryBasePath = $this->getSettingValue(self::OPTION_DOCUMENTROOT, '/');
     $repositoryBasePath = sprintf($repositoryBasePath, substr($payload->getRef(), 11));
     $repositoryLocalPath = $repositoryBasePath . $repositoryRelativePath;
     return $repositoryLocalPath;
 }
Esempio n. 3
0
 /**
  * Switch to repository root, pull and do composer update.
  *
  * @param Payload $payload
  * @return void
  */
 public function process(Payload $payload)
 {
     $output = array();
     $command = $this->getCommand();
     // run composer update
     $this->invokeShellCommand($command, $output);
     $payload->getResponse()->addOutputFromPlugin($this, $output);
 }
 /**
  * Analyse $payload and return TRUE if this plugin should
  * be triggered in processing the payload.
  *
  * @param Payload $payload
  * @return boolean
  */
 public function trigger(Payload $payload)
 {
     $url = $payload->getRepository()->getUrl();
     $branch = $payload->getRepository()->getMasterBranch();
     $isEnabled = (bool) $this->getSettingValue(self::OPTION_ENABLED, TRUE);
     $matchesRepository = $url === $this->getSettingValue(self::OPTION_REPOSITORY, $url);
     $matchesBranch = $payload->getRef() === 'refs/heads/' . $this->getSettingValue(self::OPTION_BRANCH, $branch);
     return $matchesRepository && $matchesBranch && $isEnabled;
 }
 /**
  * Perform whichever task the Plugin should perform based
  * on the payload's data.
  *
  * @param Payload $payload
  * @return void
  */
 public function process(Payload $payload)
 {
     $directory = $this->getDirectorySettingOrFail();
     $branch = $this->getSettingValue(self::OPTION_BRANCH, $payload->getRepository()->getMasterBranch());
     $url = $this->getSettingValue(self::OPTION_REPOSITORY, $payload->getRepository()->getUrl());
     $git = $this->resolveGitCommand();
     $command = array('cd', escapeshellarg($directory), '&&', $git, self::COMMAND, escapeshellarg($url), escapeshellarg($branch));
     if (TRUE === (bool) $this->getSettingValue(self::OPTION_REBASE, FALSE)) {
         $command[] = self::COMMAND_REBASE;
     }
     $output = $this->executeGitCommand($command);
     $payload->getResponse()->addOutputFromPlugin($this, $output);
 }
 /**
  * @param Payload $payload
  */
 public function process(Payload $payload)
 {
     $directory = $this->getDirectorySettingOrFail();
     $target = $this->getSettingValue(self::OPTION_HEAD);
     $git = $this->resolveGitCommand();
     $command = array('cd', escapeshellarg($directory), '&&', $git, self::COMMAND);
     if (FALSE === empty($target)) {
         $command[] = $target;
     }
     if (TRUE === (bool) $this->getSettingValue(self::OPTION_HARD)) {
         $command[] = self::COMMAND_HARD;
     }
     $output = $this->executeGitCommand($command);
     $payload->getResponse()->addOutputFromPlugin($this, $output);
 }
 /**
  * @param Payload $payload
  */
 public function process(Payload $payload)
 {
     $directory = $this->getDirectorySettingOrFail();
     $directory = sprintf($directory, $payload->getRepository()->getName());
     $git = $this->resolveGitCommand();
     $branch = $this->getSettingValue(self::OPTION_BRANCH, $payload->getRepository()->getMasterBranch());
     $track = $this->getSettingValue(self::OPTION_TRACK, FALSE);
     $noTrack = $this->getSettingValue(self::OPTION_NOTRACK, FALSE);
     $start = $this->getSettingValue(self::OPTION_STARTPOINT);
     $force = $this->getSettingValue(self::OPTION_FORCE, FALSE);
     $detach = $this->getSettingValue(self::OPTION_DETACH, FALSE);
     $orphan = $this->getSettingValue(self::OPTION_ORPHAN, FALSE);
     $newBranch = $this->getSettingValue(self::OPTION_NEWBRANCH, FALSE);
     $command = array($git, self::COMMAND);
     if (TRUE === $noTrack) {
         $command[] = self::COMMAND_NOTRACK;
     } elseif (TRUE === $track) {
         $trackBranch = $this->getSettingValue(self::OPTION_UPSTREAM, $payload->getRepository()->getMasterBranch());
         $command[] = self::COMMAND_TRACK;
         $command[] = escapeshellarg($trackBranch);
     }
     if (TRUE === $force) {
         $command[] = self::COMMAND_FORCE;
     }
     if (TRUE === $orphan) {
         $command[] = self::COMMAND_ORPHAN;
     }
     if (TRUE === $detach) {
         $command[] = self::COMMAND_DETACH;
     }
     if (TRUE === $newBranch) {
         $command[] = self::COMMAND_NEWBRANCH;
     }
     $command[] = escapeshellarg($branch);
     if (NULL !== $start) {
         $command[] = escapeshellarg($start);
     }
     $output = array('Executing Git checkout command: ' . implode(' ', $command));
     $output = array_merge($output, $this->executeGitCommand($command));
     $payload->getResponse()->addOutputFromPlugin($this, $output);
 }
 /**
  * @param Payload $payload
  */
 public function process(Payload $payload)
 {
     $directory = $this->getDirectorySettingOrFail(FALSE);
     $directory = sprintf($directory, $payload->getRepository()->getName());
     $url = $this->getSettingValue(self::OPTION_REPOSITORY, $payload->getRepository()->resolveApiUrl(Repository::API_URL_CLONE));
     $depth = $this->getSettingValue(self::OPTION_DEPTH, 0);
     $git = $this->resolveGitCommand();
     $command = array($git, self::COMMAND);
     if (0 < $depth) {
         $command[] = self::COMMAND_DEPTH;
         $command[] = $depth;
     }
     if (TRUE === (bool) $this->getSettingValue(self::OPTION_SINGLE, FALSE)) {
         $command[] = self::COMMAND_SINGLEBRANCH;
         $command[] = self::COMMAND_BRANCH;
         $command[] = escapeshellarg($this->getSettingValue(self::OPTION_BRANCH, $payload->getRepository()->getMasterBranch()));
     }
     $command[] = escapeshellarg($url);
     $command[] = $directory;
     $output = array('Executing Git clone command: ' . implode(' ', $command));
     $output = array_merge($output, $this->executeGitCommand($command));
     $payload->getResponse()->addOutputFromPlugin($this, $output);
 }
Esempio n. 9
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;
 }
 /**
  * @param Payload $payload
  * @return string
  * @throws \RuntimeException
  */
 protected function getWorkingDirectoryName(Payload $payload)
 {
     $directoryName = $this->getExtensionKeyFromUrlParameter();
     if (NULL === $directoryName) {
         $directoryName = $this->getSettingValue(self::OPTION_EXTENSIONKEY, $payload->getRepository()->getName());
     }
     $this->validateExtensionKey($directoryName);
     return $directoryName;
 }