public function deploy()
{
if ($this->listFiles) {
$this->cli->lightYellow('LIST mode: No remote files will be modified.');
}
$this->checkSubmodules($this->repo);
$this->prepareServers();
// Exit with an error if the specified server does not exist in phploy.ini
if ($this->server != '' && !array_key_exists($this->server, $this->servers)) {
throw new \Exception("The server \"{$this->server}\" is not defined in {$this->iniFilename}.");
}
// Loop through all the servers in phploy.ini
foreach ($this->servers as $name => $server) {
$this->currentlyDeploying = $name;
// If a server is specified, it's deployed only to that
if ($this->server != '' && $this->server != $name) {
continue;
} elseif ($this->server == '' && $this->defaultServer == true && $name != 'default' && $this->deployAll == false) {
continue;
}
$connection = new \Banago\PHPloy\Connection($server);
$this->connection = $connection->server;
if ($this->sync) {
$this->dotRevision = $this->dotRevisionFilename;
$this->setRevision();
continue;
}
$files = $this->compare($this->revision);
$this->cli->bold()->white()->out("\r\nSERVER: " . $name);
if ($this->listFiles) {
$this->listFiles($files[$this->currentlyDeploying]);
} else {
// Pre Deploy
if (isset($this->preDeploy[$name]) && count($this->preDeploy[$name]) > 0) {
$this->preDeploy($this->preDeploy[$name]);
}
// Pre Deploy Remote
if (isset($this->preDeployRemote[$name]) && count($this->preDeployRemote[$name]) > 0) {
$this->preDeployRemote($this->preDeployRemote[$name]);
}
// Push repository
$this->push($files[$this->currentlyDeploying]);
// Push Submodules
if ($this->scanSubmodules && count($this->submodules) > 0) {
foreach ($this->submodules as $submodule) {
$this->repo = $submodule['path'];
$this->currentSubmoduleName = $submodule['name'];
$this->cli->gray()->out("\r\nSUBMODULE: " . $this->currentSubmoduleName);
$files = $this->compare($submodule['revision']);
if ($this->listFiles === true) {
$this->listFiles($files[$this->currentlyDeploying]);
} else {
$this->push($files[$this->currentlyDeploying], $submodule['revision']);
}
}
// We've finished deploying submodules, reset settings for the next server
$this->repo = $this->mainRepo;
$this->currentSubmoduleName = '';
}
// Copy
if (isset($this->copyDirs[$name]) && count($this->copyDirs[$name]) > 0) {
$this->copy($this->copyDirs[$name]);
}
// Purge
if (isset($this->purgeDirs[$name]) && count($this->purgeDirs[$name]) > 0) {
$this->purge($this->purgeDirs[$name]);
}
// Post Deploy
if (isset($this->postDeploy[$name]) && count($this->postDeploy[$name]) > 0) {
$this->postDeploy($this->postDeploy[$name]);
}
// Post Deploy Remote
if (isset($this->postDeployRemote[$name]) && count($this->postDeployRemote[$name]) > 0) {
$this->postDeployRemote($this->postDeployRemote[$name]);
}
}
// Done
if (!$this->listFiles) {
$this->cli->bold()->lightGreen("\r\n|---------------[ " . $this->humanFilesize($this->deploymentSize) . ' Deployed ]---------------|');
$this->deploymentSize = 0;
}
}
}