Exemple #1
0
 /**
  * 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();
 }