Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
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;
}
}