/** * @param Section $section * @return Deployer * @throws DeployException */ public function createDeployer(Config $config, Section $section) { // Validate section remote if (!parse_url($section->getRemote())) { throw new DeployException("Missing or invalid 'remote' URL in config."); } // Create *Server $server = $this->createServer($section); // Create deployer $deployment = new Deployer($server, $section->getLocal(), $this->logger); // Set-up preprocessing if ($section->isPreprocess()) { $masks = $section->getPreprocessMasks(); $deployment->preprocessMasks = empty($masks) ? ['*.js', '*.css'] : $masks; $preprocessor = new Preprocessor($this->logger); $deployment->addFilter('js', [$preprocessor, 'expandApacheImports']); $deployment->addFilter('js', [$preprocessor, 'compress'], TRUE); $deployment->addFilter('css', [$preprocessor, 'expandApacheImports']); $deployment->addFilter('css', [$preprocessor, 'expandCssImports']); $deployment->addFilter('css', [$preprocessor, 'compress'], TRUE); } // Merge ignore masks $deployment->ignoreMasks = array_merge(['*.bak', '.svn', '.git*', 'Thumbs.db', '.DS_Store', '.idea'], $section->getIgnoreMasks()); // Basic settings $deployFile = $section->getDeployFile(); $deployment->deploymentFile = empty($deployFile) ? $deployment->deploymentFile : $deployFile; $deployment->allowDelete = $section->isAllowDelete(); $deployment->toPurge = $section->getPurges(); $deployment->testMode = $section->isTestMode(); // Before callbacks $bc = [NULL, NULL]; foreach ($section->getBeforeCallbacks() as $cb) { $bc[is_callable($cb)][] = $cb; } $deployment->runBefore = $bc[0]; $deployment->runBefore[] = function ($server, $logger, $deployer) use($bc, $config, $section) { foreach ((array) $bc[1] as $c) { call_user_func_array($c, [$config, $section, $server, $logger, $deployer]); } }; // After callbacks $ac = [NULL, NULL]; foreach ($section->getAfterCallbacks() as $cb) { $ac[is_callable($cb)][] = $cb; } $deployment->runAfter = $ac[0]; $deployment->runAfter[] = function ($server, $logger, $deployer) use($ac, $config, $section) { foreach ((array) $ac[1] as $c) { call_user_func_array($c, [$config, $section, $server, $logger, $deployer]); } }; return $deployment; }