Skip to content

Commit

Permalink
Merge pull request #115 from ByteInternet/roles_stage_selection
Browse files Browse the repository at this point in the history
Full support for roles/stage selection
  • Loading branch information
tdgroot authored Oct 1, 2024
2 parents f6fe8f3 + 569d390 commit 91711b7
Show file tree
Hide file tree
Showing 8 changed files with 64 additions and 37 deletions.
3 changes: 2 additions & 1 deletion ci/test/run-general.sh
Original file line number Diff line number Diff line change
Expand Up @@ -46,7 +46,8 @@ function end_task() {

# Install docker-compose if it's not installed
if ! [ -x "$(command -v docker-compose)" ]; then
pip install docker-compose
curl -sSL https://github.com/docker/compose/releases/download/v2.29.7/docker-compose-linux-x86_64 -o /usr/local/bin/docker-compose
chmod +x /usr/local/bin/docker-compose
fi

# Clear up env
Expand Down
57 changes: 44 additions & 13 deletions src/DeployRunner.php
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@
use Hypernode\DeployConfiguration\Configuration;
use Hypernode\DeployConfiguration\Server;
use Hypernode\DeployConfiguration\Stage;
use Hypernode\DeployConfiguration\TaskConfigurationInterface;
use Psr\Log\LoggerInterface;
use Symfony\Component\Console\Input\InputInterface;
use Symfony\Component\Console\Output\OutputInterface;
Expand Down Expand Up @@ -75,8 +76,14 @@ public function __construct(
* @throws Throwable
* @throws Exception
*/
public function run(OutputInterface $output, string $stage, string $task, bool $configureBuildStage, bool $configureServers, bool $reuseBrancher): int
{
public function run(
OutputInterface $output,
string $stage,
string $task,
bool $configureBuildStage,
bool $configureServers,
bool $reuseBrancher
): int {
$deployer = $this->deployerLoader->getOrCreateInstance($output);

try {
Expand All @@ -97,8 +104,12 @@ public function run(OutputInterface $output, string $stage, string $task, bool $
* @throws InvalidConfigurationException
* @throws Throwable
*/
private function prepare(bool $configureBuildStage, bool $configureServers, string $stage, bool $reuseBrancher): void
{
private function prepare(
bool $configureBuildStage,
bool $configureServers,
string $stage,
bool $reuseBrancher
): void {
$this->recipeLoader->load('common.php');
$tasks = $this->taskFactory->loadAll();
$config = $this->configurationLoader->load(
Expand Down Expand Up @@ -150,20 +161,36 @@ private function initializeConfigurableTask(ConfigurableTaskInterface $task, Con
if ($task->supports($taskConfig)) {
$deployerTask = $task->configureWithTaskConfig($taskConfig);

if ($deployerTask && $taskConfig instanceof StageConfigurableInterface) {
$this->configureTaskOnStage($deployerTask, $taskConfig);
if ($deployerTask) {
$this->configureDeployerTask($deployerTask, $taskConfig);
}
}
}
}

private function configureTaskOnStage(Task $task, StageConfigurableInterface $taskConfiguration)
private function configureDeployerTask(Task $deployerTask, TaskConfigurationInterface $taskConfig): void
{
if (!$taskConfiguration->getStage()) {
return;
$roles = $taskConfig instanceof ServerRoleConfigurableInterface
? $taskConfig->getServerRoles()
: [];
$stage = $taskConfig instanceof StageConfigurableInterface && $taskConfig->getStage()
? $taskConfig->getStage()->getName()
: null;

if ($roles) {
if ($stage) {
$deployerTask->select(
sprintf(
"stage=${stage}&roles=%s",
implode(",stage=${stage}&roles=", $roles)
)
);
} else {
$deployerTask->select('roles=' . implode(',roles=', $roles));
}
} elseif ($stage) {
$deployerTask->select("stage={$stage}");
}

$task->select('stage=' . $taskConfiguration->getStage()->getName());
}

private function configureServers(Configuration $config, string $stage, bool $reuseBrancher): void
Expand All @@ -179,8 +206,12 @@ private function configureServers(Configuration $config, string $stage, bool $re
}
}

private function configureStageServer(Stage $stage, Server $server, Configuration $config, bool $reuseBrancher): void
{
private function configureStageServer(
Stage $stage,
Server $server,
Configuration $config,
bool $reuseBrancher
): void {
$this->maybeConfigureBrancherServer($server, $reuseBrancher);

$host = host($stage->getName() . ':' . $server->getHostname());
Expand Down
10 changes: 3 additions & 7 deletions src/Deployer/Task/PlatformConfiguration/CronTask.php
Original file line number Diff line number Diff line change
Expand Up @@ -2,19 +2,15 @@

namespace Hypernode\Deploy\Deployer\Task\PlatformConfiguration;

use Hypernode\Deploy\Deployer\Task\IncrementedTaskTrait;
use Deployer\Task\Task;
use Hypernode\Deploy\Deployer\Task\ConfigurableTaskInterface;
use Hypernode\Deploy\Deployer\Task\IncrementedTaskTrait;
use Hypernode\Deploy\Deployer\Task\TaskBase;
use Hypernode\DeployConfiguration\Configuration;
use Hypernode\DeployConfiguration\PlatformConfiguration\CronConfiguration;
use Hypernode\DeployConfiguration\TaskConfigurationInterface;

use function Deployer\before;
use function Deployer\get;
use function Deployer\set;
use function Deployer\task;
use function Deployer\writeln;

class CronTask extends TaskBase implements ConfigurableTaskInterface
{
Expand All @@ -27,14 +23,14 @@ protected function getIncrementalNamePrefix(): string

public function configureWithTaskConfig(TaskConfigurationInterface $config): ?Task
{
task('deploy:cron', [
$task = task('deploy:cron', [
'deploy:cron:render',
'deploy:cron:sync',
]);

before('deploy:symlink', 'deploy:cron');

return null;
return $task;
}

public function supports(TaskConfigurationInterface $config): bool
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,11 +2,10 @@

namespace Hypernode\Deploy\Deployer\Task\PlatformConfiguration;

use Hypernode\Deploy\Deployer\Task\IncrementedTaskTrait;
use Deployer\Task\Task;
use Hypernode\Deploy\Deployer\Task\ConfigurableTaskInterface;
use Hypernode\Deploy\Deployer\Task\IncrementedTaskTrait;
use Hypernode\Deploy\Deployer\Task\TaskBase;
use Hypernode\DeployConfiguration\Configuration;
use Hypernode\DeployConfiguration\PlatformConfiguration\NginxConfiguration;
use Hypernode\DeployConfiguration\TaskConfigurationInterface;

Expand All @@ -29,10 +28,10 @@ public function supports(TaskConfigurationInterface $config): bool

public function configureWithTaskConfig(TaskConfigurationInterface $config): ?Task
{
task('deploy:nginx:manage_vhost', function () {
$task = task('deploy:nginx:manage_vhost', function () {
run('hypernode-manage-vhosts {{domain}} --webroot {{current_path}}/{{public_folder}} --no');
});

return null;
return $task;
}
}
6 changes: 3 additions & 3 deletions src/Deployer/Task/PlatformConfiguration/NginxTask.php
Original file line number Diff line number Diff line change
Expand Up @@ -2,9 +2,9 @@

namespace Hypernode\Deploy\Deployer\Task\PlatformConfiguration;

use Hypernode\Deploy\Deployer\Task\IncrementedTaskTrait;
use Deployer\Task\Task;
use Hypernode\Deploy\Deployer\Task\ConfigurableTaskInterface;
use Hypernode\Deploy\Deployer\Task\IncrementedTaskTrait;
use Hypernode\Deploy\Deployer\Task\TaskBase;
use Hypernode\DeployConfiguration\PlatformConfiguration\NginxConfiguration;
use Hypernode\DeployConfiguration\TaskConfigurationInterface;
Expand Down Expand Up @@ -35,7 +35,7 @@ public function configureWithTaskConfig(TaskConfigurationInterface $config): ?Ta
return '/tmp/nginx-config-' . get('domain');
});

task('deploy:nginx', [
$task = task('deploy:nginx', [
'deploy:nginx:prepare',
'deploy:nginx:upload',
'deploy:nginx:sync',
Expand All @@ -49,6 +49,6 @@ public function configureWithTaskConfig(TaskConfigurationInterface $config): ?Ta
after('deploy:nginx:prepare', $taskName);
}

return null;
return $task;
}
}
6 changes: 3 additions & 3 deletions src/Deployer/Task/PlatformConfiguration/RedisTask.php
Original file line number Diff line number Diff line change
Expand Up @@ -2,9 +2,9 @@

namespace Hypernode\Deploy\Deployer\Task\PlatformConfiguration;

use Hypernode\Deploy\Deployer\Task\IncrementedTaskTrait;
use Deployer\Task\Task;
use Hypernode\Deploy\Deployer\Task\ConfigurableTaskInterface;
use Hypernode\Deploy\Deployer\Task\IncrementedTaskTrait;
use Hypernode\Deploy\Deployer\Task\TaskBase;
use Hypernode\DeployConfiguration\PlatformConfiguration\RedisConfiguration;
use Hypernode\DeployConfiguration\TaskConfigurationInterface;
Expand All @@ -30,11 +30,11 @@ public function supports(TaskConfigurationInterface $config): bool

public function configureWithTaskConfig(TaskConfigurationInterface $config): ?Task
{
task('deploy:redis', [
$task = task('deploy:redis', [
'deploy:redis:enable',
]);

before('deploy:symlink', self::TASK_NAME);
return null;
return $task;
}
}
6 changes: 3 additions & 3 deletions src/Deployer/Task/PlatformConfiguration/SupervisorTask.php
Original file line number Diff line number Diff line change
Expand Up @@ -2,9 +2,9 @@

namespace Hypernode\Deploy\Deployer\Task\PlatformConfiguration;

use Hypernode\Deploy\Deployer\Task\IncrementedTaskTrait;
use Deployer\Task\Task;
use Hypernode\Deploy\Deployer\Task\ConfigurableTaskInterface;
use Hypernode\Deploy\Deployer\Task\IncrementedTaskTrait;
use Hypernode\Deploy\Deployer\Task\TaskBase;
use Hypernode\DeployConfiguration\PlatformConfiguration\SupervisorConfiguration;
use Hypernode\DeployConfiguration\TaskConfigurationInterface;
Expand Down Expand Up @@ -35,7 +35,7 @@ public function configureWithTaskConfig(TaskConfigurationInterface $config): ?Ta
return '/tmp/supervisor-config-' . get('domain');
});

task('deploy:supervisor', [
$task = task('deploy:supervisor', [
'deploy:supervisor:prepare',
'deploy:supervisor:upload',
'deploy:supervisor:sync',
Expand All @@ -47,6 +47,6 @@ public function configureWithTaskConfig(TaskConfigurationInterface $config): ?Ta
after('deploy:supervisor:prepare', $taskName);
}

return null;
return $task;
}
}
6 changes: 3 additions & 3 deletions src/Deployer/Task/PlatformConfiguration/VarnishTask.php
Original file line number Diff line number Diff line change
Expand Up @@ -2,9 +2,9 @@

namespace Hypernode\Deploy\Deployer\Task\PlatformConfiguration;

use Hypernode\Deploy\Deployer\Task\IncrementedTaskTrait;
use Deployer\Task\Task;
use Hypernode\Deploy\Deployer\Task\ConfigurableTaskInterface;
use Hypernode\Deploy\Deployer\Task\IncrementedTaskTrait;
use Hypernode\Deploy\Deployer\Task\TaskBase;
use Hypernode\DeployConfiguration\PlatformConfiguration\VarnishConfiguration;
use Hypernode\DeployConfiguration\TaskConfigurationInterface;
Expand All @@ -31,7 +31,7 @@ public function supports(TaskConfigurationInterface $config): bool

public function configureWithTaskConfig(TaskConfigurationInterface $config): ?Task
{
task('deploy:varnish', [
$task = task('deploy:varnish', [
'deploy:varnish:enable',
'deploy:varnish:prepare',
'deploy:varnish:upload',
Expand All @@ -46,6 +46,6 @@ public function configureWithTaskConfig(TaskConfigurationInterface $config): ?Ta
after('deploy:varnish:prepare', $taskName);
}

return null;
return $task;
}
}

0 comments on commit 91711b7

Please sign in to comment.