mirror of https://github.com/hauke68/Magallanes
Andrés Montañez
8 years ago
7 changed files with 328 additions and 107 deletions
@ -0,0 +1,122 @@
|
||||
<?php |
||||
/* |
||||
* This file is part of the Magallanes package. |
||||
* |
||||
* (c) Andrés Montañez <andres@andresmontanez.com> |
||||
* |
||||
* For the full copyright and license information, please view the LICENSE |
||||
* file that was distributed with this source code. |
||||
*/ |
||||
|
||||
namespace Mage\Deploy\Strategy; |
||||
|
||||
use Mage\Runtime\Exception\RuntimeException; |
||||
use Mage\Runtime\Runtime; |
||||
|
||||
/** |
||||
* Strategy for Deployment with Releases, using TarGz and SCP |
||||
* |
||||
* @author Andrés Montañez <andresmontanez@gmail.com> |
||||
*/ |
||||
class ReleasesStrategy implements StrategyInterface |
||||
{ |
||||
/** |
||||
* @var Runtime |
||||
*/ |
||||
protected $runtime; |
||||
|
||||
public function getName() |
||||
{ |
||||
return 'Releases'; |
||||
} |
||||
|
||||
public function setRuntime(Runtime $runtime) |
||||
{ |
||||
$this->runtime = $runtime; |
||||
} |
||||
|
||||
public function getPreDeployTasks() |
||||
{ |
||||
$this->checkStage(Runtime::PRE_DEPLOY); |
||||
$tasks = $this->runtime->getTasks(); |
||||
|
||||
if ($this->runtime->getBranch() && !$this->runtime->inRollback() && !in_array('git/change-branch', $tasks)) { |
||||
array_unshift($tasks, 'git/change-branch'); |
||||
} |
||||
|
||||
if (!$this->runtime->inRollback() && !in_array('deploy/targz/prepare', $tasks)) { |
||||
array_push($tasks, 'deploy/targz/prepare'); |
||||
} |
||||
|
||||
return $tasks; |
||||
} |
||||
|
||||
public function getOnDeployTasks() |
||||
{ |
||||
$this->checkStage(Runtime::ON_DEPLOY); |
||||
$tasks = $this->runtime->getTasks(); |
||||
|
||||
if (!$this->runtime->inRollback() && !in_array('deploy/targz/copy', $tasks)) { |
||||
array_unshift($tasks, 'deploy/targz/copy'); |
||||
} |
||||
|
||||
if (!$this->runtime->inRollback() && !in_array('deploy/release/prepare', $tasks)) { |
||||
array_unshift($tasks, 'deploy/release/prepare'); |
||||
} |
||||
|
||||
return $tasks; |
||||
} |
||||
|
||||
public function getOnReleaseTasks() |
||||
{ |
||||
$this->checkStage(Runtime::ON_RELEASE); |
||||
$tasks = $this->runtime->getTasks(); |
||||
|
||||
if (!in_array('deploy/release', $tasks)) { |
||||
array_unshift($tasks, 'deploy/release'); |
||||
} |
||||
|
||||
return $tasks; |
||||
} |
||||
|
||||
public function getPostReleaseTasks() |
||||
{ |
||||
$this->checkStage(Runtime::POST_RELEASE); |
||||
$tasks = $this->runtime->getTasks(); |
||||
|
||||
if (!in_array('deploy/release/cleanup', $tasks)) { |
||||
array_unshift($tasks, 'deploy/release/cleanup'); |
||||
} |
||||
|
||||
return $tasks; |
||||
} |
||||
|
||||
public function getPostDeployTasks() |
||||
{ |
||||
$this->checkStage(Runtime::POST_DEPLOY); |
||||
$tasks = $this->runtime->getTasks(); |
||||
|
||||
if (!$this->runtime->inRollback() && !in_array('deploy/targz/cleanup', $tasks)) { |
||||
array_unshift($tasks, 'deploy/targz/cleanup'); |
||||
} |
||||
|
||||
if ($this->runtime->getBranch() && !$this->runtime->inRollback() && !in_array('git/change-branch', $tasks)) { |
||||
array_push($tasks, 'git/change-branch'); |
||||
} |
||||
|
||||
return $tasks; |
||||
} |
||||
|
||||
/** |
||||
* Check the runtime stage is correct |
||||
* |
||||
* @param $stage |
||||
* @throws RuntimeException |
||||
*/ |
||||
private function checkStage($stage) |
||||
{ |
||||
if ($this->runtime->getStage() !== $stage) { |
||||
throw new RuntimeException(sprintf('Invalid stage, got "%s" but expected "%"', $this->runtime->getStage(), $stage)); |
||||
} |
||||
} |
||||
} |
@ -0,0 +1,96 @@
|
||||
<?php |
||||
/* |
||||
* This file is part of the Magallanes package. |
||||
* |
||||
* (c) Andrés Montañez <andres@andresmontanez.com> |
||||
* |
||||
* For the full copyright and license information, please view the LICENSE |
||||
* file that was distributed with this source code. |
||||
*/ |
||||
|
||||
namespace Mage\Deploy\Strategy; |
||||
|
||||
use Mage\Runtime\Exception\RuntimeException; |
||||
use Mage\Runtime\Runtime; |
||||
|
||||
/** |
||||
* Strategy for Deployment with Rsync |
||||
* |
||||
* @author Andrés Montañez <andresmontanez@gmail.com> |
||||
*/ |
||||
class RsyncStrategy implements StrategyInterface |
||||
{ |
||||
/** |
||||
* @var Runtime |
||||
*/ |
||||
protected $runtime; |
||||
|
||||
public function getName() |
||||
{ |
||||
return 'Rsync'; |
||||
} |
||||
|
||||
public function setRuntime(Runtime $runtime) |
||||
{ |
||||
$this->runtime = $runtime; |
||||
} |
||||
|
||||
public function getPreDeployTasks() |
||||
{ |
||||
$this->checkStage(Runtime::PRE_DEPLOY); |
||||
$tasks = $this->runtime->getTasks(); |
||||
|
||||
if ($this->runtime->getBranch() && !$this->runtime->inRollback() && !in_array('git/change-branch', $tasks)) { |
||||
array_unshift($tasks, 'git/change-branch'); |
||||
} |
||||
|
||||
return $tasks; |
||||
} |
||||
|
||||
public function getOnDeployTasks() |
||||
{ |
||||
$this->checkStage(Runtime::ON_DEPLOY); |
||||
$tasks = $this->runtime->getTasks(); |
||||
|
||||
if (!$this->runtime->inRollback() && !in_array('deploy/rsync', $tasks)) { |
||||
array_unshift($tasks, 'deploy/rsync'); |
||||
} |
||||
|
||||
return $tasks; |
||||
} |
||||
|
||||
public function getOnReleaseTasks() |
||||
{ |
||||
return []; |
||||
} |
||||
|
||||
public function getPostReleaseTasks() |
||||
{ |
||||
return []; |
||||
} |
||||
|
||||
public function getPostDeployTasks() |
||||
{ |
||||
$this->checkStage(Runtime::POST_DEPLOY); |
||||
$tasks = $this->runtime->getTasks(); |
||||
|
||||
if ($this->runtime->getBranch() && !$this->runtime->inRollback() && !in_array('git/change-branch', $tasks)) { |
||||
array_push($tasks, 'git/change-branch'); |
||||
} |
||||
|
||||
return $tasks; |
||||
} |
||||
|
||||
/** |
||||
* Check the runtime stage is correct |
||||
* |
||||
* @param $stage |
||||
* @throws RuntimeException |
||||
*/ |
||||
private function checkStage($stage) |
||||
{ |
||||
if ($this->runtime->getStage() !== $stage) { |
||||
throw new RuntimeException(sprintf('Invalid stage, got "%s" but expected "%"', $this->runtime->getStage(), $stage)); |
||||
} |
||||
} |
||||
} |
@ -0,0 +1,35 @@
|
||||
<?php |
||||
/* |
||||
* This file is part of the Magallanes package. |
||||
* |
||||
* (c) Andrés Montañez <andres@andresmontanez.com> |
||||
* |
||||
* For the full copyright and license information, please view the LICENSE |
||||
* file that was distributed with this source code. |
||||
*/ |
||||
|
||||
namespace Mage\Deploy\Strategy; |
||||
|
||||
use Mage\Runtime\Runtime; |
||||
|
||||
/** |
||||
* Interface for Deploy Strategies |
||||
* |
||||
* @author Andrés Montañez <andresmontanez@gmail.com> |
||||
*/ |
||||
interface StrategyInterface |
||||
{ |
||||
public function getName(); |
||||
|
||||
public function setRuntime(Runtime $runtime); |
||||
|
||||
public function getPreDeployTasks(); |
||||
|
||||
public function getOnDeployTasks(); |
||||
|
||||
public function getOnReleaseTasks(); |
||||
|
||||
public function getPostReleaseTasks(); |
||||
|
||||
public function getPostDeployTasks(); |
||||
} |
Loading…
Reference in new issue