/** * Simulates a deploy * * @param string $target * @param string $version * @param array $options */ protected function doSimulate($target, $version, array $options = array()) { $version = $this->getRepository()->getVersion($version); $options += array('full_deploy' => false, 'force' => false); $this->assertTargetExists($target, $this->getConfig()->getConfig()); $this->setConfigParametersForTarget($target); $transporter = $this->getTransporter($target); $readOnlyTransporter = $this->container->get('transporter.readonly'); $readOnlyTransporter->setInnerTransporter($transporter); $config = $this->getConfig()->getConfig(); $derived = $config['build']['derived']; $builder = $this->getBuilder(); $repository = $this->getRepository(); $io = $this->getIO(); $dispatcher = $this->container->get('dispatcher'); $trDeployBefore = $this->container->get('deploy.taskrunner.before'); $trDeployAfter = $this->container->get('deploy.taskrunner.after'); $trDeployFinal = $this->container->get('deploy.taskrunner.final'); $remoteInfoFile = $this->container->getParameter('conveyor.remoteinfofile'); $strategy = $this->getStrategy($readOnlyTransporter); $trDeployBefore->setTransporter($readOnlyTransporter); $trDeployAfter->setTransporter($readOnlyTransporter); $trDeployFinal->setTransporter($readOnlyTransporter); $context = new Context(); $context->setFullDeploy($options['full_deploy'])->setForce($options['force'])->setSimulate(true)->setBuilddir($this->getBuilder()->getBuildDir())->setVersion($version)->setTarget($target)->setStrategy($strategy); if ($transporter instanceof TransactionalTransporterInterface) { $transporter->begin(); } $manager = new StageManager($context, $dispatcher); $manager->addStage('validate.remote', new Stage\ValidateRemoteStage($readOnlyTransporter, $io, $remoteInfoFile))->addStage('get.remote.version', new Stage\RetrieveRemoteVersionInfoStage($readOnlyTransporter, $repository, $io, $remoteInfoFile))->addStage('build', new Stage\BuildStage($builder, $io))->addStage('filelist', new Stage\BuildFilelistStage($repository, $derived))->addStage('deploy.before', new Stage\DeployBeforeStage($trDeployBefore, $io))->addStage('transfer', new Stage\TransferStage($readOnlyTransporter, $io))->addStage('set.remote.version', new Stage\WriteRemoteInfoFileStage($readOnlyTransporter, $remoteInfoFile, $io))->addStage('deploy.after', new Stage\DeployAfterStage($trDeployAfter, $io))->addStage('deploy.final', new Stage\DeployFinalStage($trDeployFinal, $io)); if ($transporter instanceof TransactionalTransporterInterface) { $dispatcher->addListener(StageEvents::STAGE_PRE_EXECUTE, function (StageEvent $event) use($transporter) { if ('deploy.after' === $event->getStageName()) { $transporter->commit(); } }); } try { $result = $manager->execute(); } catch (EmptyChangesetException $e) { $this->getIO()->write('Nothing to deploy: no files have been changed or removed. Use --full to deploy anyway.', true); $result = true; // trigger a cleanup } if ($result === true) { // cleanup $builddir = $this->getBuilder()->getBuildDir(); if (is_dir($builddir)) { $filesystem = new Filesystem(); $filesystem->remove($builddir); } } }
public function testExecuteDispatchesPostExecuteEvent() { $this->dispatcher->expects($this->at(1))->method('dispatch')->with(\Webcreate\Conveyor\Event\StageEvents::STAGE_POST_EXECUTE, $this->anything()); $this->stageManager->addStage('stage1', $this->createStageMock()); $this->stageManager->execute(); }