/**
* @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;
}