tasks as $name => $config) { $this->registerTask($name, $config); } } protected function registerTask(string $name, array $config): void { $methodName = $config['methodName'] ?? ''; if ($methodName === '' || !method_exists(static::class, $methodName)) { return; } $task = new Task($name, $this->$methodName(...)); $description = $this->getFunctionSummary($methodName); if ($description) { $task->desc($description); } $stages = $config['stages'] ?? []; if (count($stages)) { $task->onStage(...$stages); } $deployer = Deployer::get(); $deployer->tasks->set($name, $task); } protected function getFunctionSummary(string $function): string { $summary = ''; try { $reflector = new ReflectionMethod(Deployment::class, $function); $comment = $reflector->getDocComment(); if ($comment) { $summary = DocBlockFactory::createInstance()->create($comment)->getSummary(); } } catch (\Exception) { } return $summary; } protected function getTasks(): array { return array_keys($this->tasks); } protected function get(string $name, $default = null) { return get($name, $default) ?? ( isset(Deployer::get()->config[$name]) ? Deployer::get()->config->get($name) : $default ); } protected function set(string $name, $value): void { set($name, $value); } protected function has(string $name): bool { return has($name) || Deployer::get()->config->has($name); } protected function hasArray(string $name): bool { return $this->has($name) && is_array($this->get($name)); } }