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); }
/** * 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) { $monitoredRepositoryNames = (array) $this->getSettingValue(self::OPTION_MONITORED, array()); $defaultBranch = $payload->getRepository()->getMasterBranch(); $isMonitored = TRUE === in_array($payload->getRepository()->getName(), $monitoredRepositoryNames); $matchesHead = 'refs/heads/' . $this->getSettingValue(self::OPTION_BRANCH, $defaultBranch) === $payload->getRef(); $hasHead = NULL !== $payload->getHead(); return $matchesHead && $isMonitored && $hasHead; }
/** * Upload the extension contained in repository to * the official TYPO3 extension repository using * credentials stored in the .typo3credentials file * as a "username:password" value. * * @param Payload $payload * @return void * @throws \RuntimeException */ public function process(Payload $payload) { $sha1 = $payload->getHead()->getId(); $tag = substr($payload->getRef(), strlen(self::PATTERN_TAG_HEAD)); $this->validateVersionNumber($tag); // additional settings not requiring validation. $url = $this->getSettingValue(self::OPTION_URL, $payload->getRepository()->resolveApiUrl(Repository::API_URL_CLONE)); // look for an upload comment in settings; if not found there, use Payload HEAD's message body $comment = $this->getSettingValue(self::OPTION_COMMENT, $payload->getHead()->getMessage()); // validation: credentials file and local directory path. $directory = $this->getSettingValue(self::OPTION_DIRECTORY); $directory = rtrim($directory, '/') . '/'; $directory .= $sha1 . '/' . $this->getWorkingDirectoryName($payload); $credentialsFile = $this->getSettingValue(self::OPTION_CREDENTIALSFILE, GIZZLE_HOME . self::CREDENTIALS_FILE); $this->validateCredentialsFile($credentialsFile); list($username, $password) = $this->readUploadCredentials($credentialsFile); // initializing build directory and cloning source $clone = $this->getGitClonePlugin(); $clonePluginSettings = $this->getSubPluginSettings('\\NamelessCoder\\GizzleGitPlugins\\GizzlePlugins\\ClonePlugin', array(ClonePlugin::OPTION_GITCOMMAND => $this->getSettingValue(self::OPTION_GITCOMMAND, ClonePlugin::DEFAULT_GITCOMMAND), ClonePlugin::OPTION_DIRECTORY => $directory, ClonePlugin::OPTION_SINGLE => TRUE, ClonePlugin::OPTION_BRANCH => $tag, ClonePlugin::OPTION_DEPTH => 1)); $clone->initialize($clonePluginSettings); $this->createWorkingDirectory($directory); $this->validateDirectory($directory); $clone->process($payload); // a large, properly formatted data file. $comment = sprintf($comment, $url); try { $output = $this->getUploader()->upload($directory, $username, $password, $comment); } catch (\SoapFault $error) { throw new \RuntimeException($error->getMessage(), $error->getCode()); } // cleanup and messages if (TRUE === (bool) $this->getSettingValue(self::OPTION_REMOVEBUILD, FALSE)) { $this->removeWorkingDirectory($this->getSettingValue(self::OPTION_DIRECTORY), $sha1); } $payload->getResponse()->addOutputFromPlugin($this, $output); }
/** * 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); } }