/** * @param Build $copyFrom * @return \PHPCI\Model\Build */ public function createDuplicateBuild(Build $copyFrom) { $data = $copyFrom->getDataArray(); // Clean up unwanted properties from the original build: unset($data['id']); unset($data['status']); unset($data['log']); unset($data['started']); unset($data['finished']); $build = new Build(); $build->setValues($data); $build->setCreated(new \DateTime()); return $this->buildStore->save($build); }
protected function createBuild($projectId, $commitId, $branch, $committer, $commitMessage, $extra = null) { // Check if a build already exists for this commit ID: $builds = $this->buildStore->getByProjectAndCommit($projectId, $commitId); if ($builds['count']) { return true; } // If not, create a new build job for it: $build = new Build(); $build->setProjectId($projectId); $build->setCommitId($commitId); $build->setStatus(Build::STATUS_NEW); $build->setLog(''); $build->setCreated(new \DateTime()); $build->setBranch($branch); $build->setCommitterEmail($committer); $build->setCommitMessage($commitMessage); if (!is_null($extra)) { $build->setExtra(json_encode($extra)); } $build = BuildFactory::getBuild($this->buildStore->save($build)); // Send a status postback if the build type provides one: $build->sendStatusPostback(); return true; }
/** * Create a new pending build for a project. */ public function build($projectId) { /* @var \PHPCI\Model\Project $project */ $project = $this->projectStore->getById($projectId); if (empty($project)) { throw new NotFoundException('Project with id: ' . $projectId . ' not found'); } $build = new Build(); $build->setProjectId($projectId); $build->setCommitId('Manual'); $build->setStatus(Build::STATUS_NEW); $build->setBranch($project->getBranch()); $build->setCreated(new \DateTime()); $build->setCommitterEmail($_SESSION['user']->getEmail()); $build = $this->buildStore->save($build); header('Location: ' . PHPCI_URL . 'build/view/' . $build->getId()); exit; }
/** * Run the active build. */ public function execute() { // Update the build in the database, ping any external services. $this->build->setStatus(Build::STATUS_RUNNING); $this->build->setStarted(new \DateTime()); $this->store->save($this->build); $this->build->sendStatusPostback(); $success = true; $previous_build = $this->build->getProject()->getPreviousBuild($this->build->getBranch()); $previous_state = Build::STATUS_NEW; if ($previous_build) { $previous_state = $previous_build->getStatus(); } try { // Set up the build: $this->setupBuild(); // Run the core plugin stages: foreach (array('setup', 'test') as $stage) { $success &= $this->pluginExecutor->executePlugins($this->config, $stage); } // Set the status so this can be used by complete, success and failure // stages. if ($success) { $this->build->setStatus(Build::STATUS_SUCCESS); } else { $this->build->setStatus(Build::STATUS_FAILED); } if ($success) { $this->pluginExecutor->executePlugins($this->config, 'success'); if ($previous_state == Build::STATUS_FAILED) { $this->pluginExecutor->executePlugins($this->config, 'fixed'); } $this->buildLogger->logSuccess(Lang::get('build_success')); } else { $this->pluginExecutor->executePlugins($this->config, 'failure'); if ($previous_state == Build::STATUS_SUCCESS || $previous_state == Build::STATUS_NEW) { $this->pluginExecutor->executePlugins($this->config, 'broken'); } $this->buildLogger->logFailure(Lang::get('build_failed')); } } catch (\Exception $ex) { $this->build->setStatus(Build::STATUS_FAILED); $this->buildLogger->logFailure(Lang::get('exception') . $ex->getMessage()); } finally { // Complete stage plugins are always run $this->pluginExecutor->executePlugins($this->config, 'complete'); } // Update the build in the database, ping any external services, etc. $this->build->sendStatusPostback(); $this->build->setFinished(new \DateTime()); // Clean up: $this->buildLogger->log(Lang::get('removing_build')); $this->build->removeBuildDirectory(); $this->store->save($this->build); }
/** * Run the active build. */ public function execute() { // Update the build in the database, ping any external services. $this->build->setStatus(Build::STATUS_RUNNING); $this->build->setStarted(new \DateTime()); $this->store->save($this->build); $this->build->sendStatusPostback(); $success = true; try { // Set up the build: $this->setupBuild(); // Run the core plugin stages: foreach (array('setup', 'test') as $stage) { $success &= $this->pluginExecutor->executePlugins($this->config, $stage); } // Set the status so this can be used by complete, success and failure // stages. if ($success) { $this->build->setStatus(Build::STATUS_SUCCESS); } else { $this->build->setStatus(Build::STATUS_FAILED); } // Complete stage plugins are always run $this->pluginExecutor->executePlugins($this->config, 'complete'); if ($success) { $this->pluginExecutor->executePlugins($this->config, 'success'); $this->buildLogger->logSuccess(Lang::get('build_success')); } else { $this->pluginExecutor->executePlugins($this->config, 'failure'); $this->buildLogger->logFailure(Lang::get('build_failed')); } // Clean up: $this->buildLogger->log(Lang::get('removing_build')); $cmd = 'rm -Rf "%s"'; if (IS_WIN) { $cmd = 'rmdir /S /Q "%s"'; } $this->executeCommand($cmd, $this->buildPath); } catch (\Exception $ex) { $this->build->setStatus(Build::STATUS_FAILED); $this->buildLogger->logFailure(Lang::get('exception') . $ex->getMessage()); } // Update the build in the database, ping any external services, etc. $this->build->sendStatusPostback(); $this->build->setFinished(new \DateTime()); $this->store->save($this->build); }
/** * Create a build using an existing build as a template: */ public function rebuild($buildId) { $copy = BuildFactory::getBuildById($buildId); if (empty($copy)) { throw new NotFoundException('Build with ID: ' . $buildId . ' does not exist.'); } $build = new Build(); $build->setProjectId($copy->getProjectId()); $build->setCommitId($copy->getCommitId()); $build->setStatus(Build::STATUS_NEW); $build->setBranch($copy->getBranch()); $build->setCreated(new \DateTime()); $build->setCommitterEmail($copy->getCommitterEmail()); $build->setCommitMessage($copy->getCommitMessage()); $build->setExtra(json_encode($copy->getExtra())); $build = $this->buildStore->save($build); header('Location: ' . PHPCI_URL . 'build/view/' . $build->getId()); exit; }
/** * @param Build $copyFrom * @return \PHPCI\Model\Build */ public function createDuplicateBuild(Build $copyFrom) { $data = $copyFrom->getDataArray(); // Clean up unwanted properties from the original build: unset($data['id']); unset($data['status']); unset($data['log']); unset($data['started']); unset($data['finished']); $build = new Build(); $build->setValues($data); $build->setCreated(new \DateTime()); $build->setStatus(0); $build = $this->buildStore->save($build); $buildId = $build->getId(); if (!empty($buildId)) { $build = BuildFactory::getBuild($build); $build->sendStatusPostback(); $this->addBuildToQueue($build); } return $build; }