[TASK] Reorganize and cleanup

This commit is contained in:
Sebastian Fischer 2025-04-17 20:53:18 +02:00
parent d5ea903e4d
commit 047235b84d
6 changed files with 87 additions and 90 deletions

View File

@ -4,6 +4,7 @@ declare(strict_types=1);
namespace Evoweb\DeployerConfig\Config;
use Deployer\Deployer;
use Deployer\Exception\Exception;
use Evoweb\DeployerConfig\Tasks\Deploy;
use Evoweb\DeployerConfig\Tasks\Local;

View File

@ -8,6 +8,7 @@ use Deployer\Deployer;
use Deployer\Task\GroupTask;
use Deployer\Task\Task;
use Evoweb\DeployerConfig\Config\Deployment;
use InvalidArgumentException;
use phpDocumentor\Reflection\DocBlockFactory;
use ReflectionMethod;
@ -36,11 +37,14 @@ abstract class AbstractTasks
array_walk($this->tasks, [$this, 'registerTask']);
}
protected function registerTask(array $config, string $name): void
protected function registerTask(array|string $body, string $name): void
{
$body = $config['body'] ?? '';
if (is_string($body) && !method_exists($this, $body)) {
return;
if (!is_array($body)) {
$name = $body;
$body = lcfirst(str_replace('_', '', ucwords(strtolower(preg_replace('/[^:]+:/', '', $body)), '_')));
if (!method_exists($this, $body)) {
print_r('not found ' . $body . "\n");
}
}
if (is_callable([$this, $body])) {
@ -53,13 +57,9 @@ abstract class AbstractTasks
} elseif (is_array($body)) {
$task = new GroupTask($name, $body);
} else {
throw new \InvalidArgumentException('Task body should be a function or an array.');
throw new InvalidArgumentException('Task body should be a function or an array.');
}
array_map(function ($selector) use ($task) {
$task->addSelector($selector);
}, $config['stages'] ?? []);
$deployer = Deployer::get();
$deployer->tasks->set($name, $task);
}

View File

@ -10,40 +10,36 @@ class Deploy extends AbstractTasks
{
protected array $tasks = [
'deploy:prepare' => [
'body' => [
'local:info',
'local:setup',
'remote:prepare',
'rsync:warmup',
'local:lock',
'local:release',
'local:update_code',
'local:env',
'local:shared',
'local:writable',
'local:write_release',
'local:create_folder',
'local:vendors',
]
'local:info',
'local:setup',
'remote:prepare',
'rsync:warmup',
'local:lock',
'local:release',
'local:update_code',
'local:env',
'local:shared',
'local:writable',
'local:write_release',
'local:create_folder',
'local:vendors',
],
'deploy:publish' => [
'body' => [
'local:clear_paths',
'local:symlink',
'local:cleanup',
'rsync:remote',
'remote:change_group',
'remote:writable',
'remote:db_compare',
'remote:fix_folder_structure',
'rsync:switch_current',
'remote:clear_cache',
'remote:clear_opcache',
'local:echo_release_number',
'local:unlock',
'deploy:success'
]
'local:clear_paths',
'local:symlink',
'local:cleanup',
'rsync:remote',
'remote:change_group',
'remote:writable',
'remote:db_compare',
'remote:fix_folder_structure',
'rsync:switch_current',
'remote:clear_cache',
'remote:clear_opcache',
'local:echo_release_number',
'local:unlock',
'deploy:success',
],
];

View File

@ -24,28 +24,28 @@ use function Deployer\timestamp;
class Local extends AbstractTasks
{
protected array $tasks = [
'local:info' => ['body' => 'localInfo'],
'local:setup' => ['body' => 'localSetup'],
'local:lock' => ['body' => 'localLock'],
'local:unlock' => ['body' => 'localUnlock'],
'local:release' => ['body' => 'localRelease'],
'local:update_code' => ['body' => 'localUpdateCode'],
'local:env' => ['body' => 'localEnv'],
'local:shared' => ['body' => 'localShared'],
'local:writable' => ['body' => 'localWritable'],
'local:write_release' => ['body' => 'localWriteRelease'],
'local:create_folder' => ['body' => 'localCreateFolder'],
'local:vendors' => ['body' => 'localVendors'],
'local:clear_paths' => ['body' => 'localClearPaths'],
'local:symlink' => ['body' => 'localSymlink'],
'local:cleanup' => ['body' => 'localCleanup'],
'local:echo_release_number' => ['body' => 'localEchoReleaseNumber'],
'local:info',
'local:setup',
'local:lock',
'local:unlock',
'local:release',
'local:update_code',
'local:env',
'local:shared',
'local:writable',
'local:write_release',
'local:create_folder',
'local:vendors',
'local:clear_paths',
'local:symlink',
'local:cleanup',
'local:echo_release_number',
];
/**
* Displays info about deployment
*/
public function localInfo(): void
public function info(): void
{
info("deploying <fg=green;options=bold>{{what}}</> to <fg=magenta;options=bold>{{where}}</>");
}
@ -53,7 +53,7 @@ class Local extends AbstractTasks
/**
* Prepares host for deploy
*/
public function localSetup(): void
public function setup(): void
{
runLocally(
<<<EOF
@ -75,7 +75,7 @@ class Local extends AbstractTasks
/**
* Locks deploy
*/
public function localLock(): void
public function lock(): void
{
$user = escapeshellarg(get('user'));
$locked = runLocally("[ -f {{deploy_path}}/.dep/deploy.lock ] && echo +locked || echo $user > {{deploy_path}}/.dep/deploy.lock");
@ -91,7 +91,7 @@ class Local extends AbstractTasks
/**
* Unlocks deploy
*/
public function localUnlock(): void
public function unlock(): void
{
// always success
runLocally("rm -f {{deploy_path}}/.dep/deploy.lock");
@ -100,7 +100,7 @@ class Local extends AbstractTasks
/**
* Prepares release
*/
public function localRelease(): void
public function release(): void
{
// Clean up if there is unfinished release.
if (testLocally('[ -h {{deploy_path}}/release ]')) {
@ -163,7 +163,7 @@ class Local extends AbstractTasks
/**
* Updates code
*/
public function localUpdateCode(): void
public function updateCode(): void
{
$git = get('bin/git');
$repository = get('repository');
@ -216,7 +216,7 @@ class Local extends AbstractTasks
/**
* Configure .env file
*/
public function localEnv(): void
public function env(): void
{
if (testLocally('[ ! -e {{release_or_current_path}}/.env ] && [ -f {{release_or_current_path}}/{{dotenv_example}} ]')) {
runLocally('cp {{release_or_current_path}}/{{dotenv_example}} {{release_or_current_path}}/.env');
@ -226,7 +226,7 @@ class Local extends AbstractTasks
/**
* Creates symlinks for shared files and dirs
*/
public function localShared(): void
public function shared(): void
{
$sharedPath = "{{deploy_path}}/shared";
@ -298,7 +298,7 @@ class Local extends AbstractTasks
/**
* Makes writable dirs
*/
public function localWritable(): void
public function writable(): void
{
$dirs = join(' ', get('writable_dirs'));
$mode = get('writable_mode');
@ -385,15 +385,15 @@ class Local extends AbstractTasks
}
}
public function localWriteRelease(): void
public function writeRelease(): void
{
runLocally('echo ' . getEnv('CI_COMMIT_REF_NAME') . ' > {{release_path}}/release');
runLocally('echo {{target}} > {{release_path}}/release');
}
/**
* Creating necessary folders
*/
public function localCreateFolder(): void
public function createFolder(): void
{
$sudo = $this->getSudo();
@ -411,7 +411,7 @@ class Local extends AbstractTasks
/**
* Installing vendors
*/
public function localVendors(): void
public function vendors(): void
{
if (!$this->commandExist('unzip')) {
info(
@ -429,7 +429,7 @@ class Local extends AbstractTasks
/**
* Cleanup files and/or directories
*/
public function localClearPaths(): void
public function clearPaths(): void
{
$paths = get('clear_paths');
$sudo = get('clear_use_sudo') ? 'sudo' : '';
@ -448,7 +448,7 @@ class Local extends AbstractTasks
/**
* Creating symlink to release
*/
public function localSymlink(): void
public function symlink(): void
{
if (get('use_atomic_symlink')) {
runLocally("mv -T {{deploy_path}}/release {{current_path}}");
@ -464,7 +464,7 @@ class Local extends AbstractTasks
/**
* Cleaning up old releases
*/
public function localCleanup(): void
public function cleanup(): void
{
$releases = get('releases_list');
$keep = get('keep_releases');
@ -479,7 +479,7 @@ class Local extends AbstractTasks
}
}
public function localEchoReleaseNumber(): void
public function echoReleaseNumber(): void
{
info('Folder of this release is: {{release_path}}');
}

View File

@ -14,19 +14,19 @@ use function Deployer\writeln;
class Remote extends AbstractTasks
{
protected array $tasks = [
'remote:prepare' => ['body' => 'remotePrepare'],
'remote:change_group' => ['body' => 'remoteChangeGroup'],
'remote:writable' => ['body' => 'remoteWritable'],
'remote:db_compare' => ['body' => 'remoteDbCompare'],
'remote:fix_folder_structure' => ['body' => 'remoteFixFolderStructure'],
'remote:clear_cache' => ['body' => 'remoteClearCache'],
'remote:clear_opcache' => ['body' => 'remoteClearOpcache'],
'remote:prepare',
'remote:change_group',
'remote:writable',
'remote:db_compare',
'remote:fix_folder_structure',
'remote:clear_cache',
'remote:clear_opcache',
];
/**
* Prepare remote path exists
*/
public function remotePrepare(): void
public function prepare(): void
{
if (!$this->hasArray('prepare_dirs')) {
return;
@ -43,7 +43,7 @@ class Remote extends AbstractTasks
/**
* Change usergroup for the hole project
*/
public function remoteChangeGroup(): void
public function changeGroup(): void
{
if ($this->get('http_group')) {
$sudo = get('writable_use_sudo') ? 'sudo' : '';
@ -61,7 +61,7 @@ class Remote extends AbstractTasks
/**
* Set files and/or folders writable
*/
public function remoteWritable(): void
public function writable(): void
{
if ($this->hasArray('writable_dirs') || $this->hasArray('writable_files')) {
$sudo = get('writable_use_sudo') ? 'sudo' : '';
@ -104,7 +104,7 @@ class Remote extends AbstractTasks
/**
* Database migration
*/
public function remoteDbCompare(): void
public function dbCompare(): void
{
$path = parse('{{app_container_path}}') ?: parse('{{remote_path}}');
@ -122,7 +122,7 @@ class Remote extends AbstractTasks
/**
* Fix folder structure
*/
public function remoteFixFolderStructure(): void
public function fixFolderStructure(): void
{
$path = parse('{{app_container_path}}') ?: parse('{{remote_path}}');
@ -140,7 +140,7 @@ class Remote extends AbstractTasks
/**
* Clear cache via typo3 cache:flush
*/
public function remoteClearCache(): void
public function clearCache(): void
{
$path = parse('{{app_container_path}}') ?: parse('{{remote_path}}');
@ -156,7 +156,7 @@ class Remote extends AbstractTasks
/**
* Clear opcache via curl on {CI_HOST}/cache.php
*/
public function remoteClearOpcache(): void
public function clearOpcache(): void
{
$webDomain = rtrim($this->get('web_domain'), '/');
$htaccess = $this->has('htaccess') ? '--user ' . $this->get('htaccess') : '';

View File

@ -42,9 +42,9 @@ class Rsync extends AbstractTasks
];
protected array $tasks = [
'rsync:warmup' => ['body' => 'warmup'],
'rsync:remote' => ['body' => 'remote'],
'rsync:switch_current' => ['body' => 'switchCurrent'],
'rsync:warmup',
'rsync:remote',
'rsync:switch_current',
];
protected function setDefaultConfiguration(): void