/** * @param JobDefinition $job * * @throws \Exception */ public function runJob(JobDefinition $job) { $this->output->writeln(["\n", sprintf('<info>Running the %s job</info><comment>%s</comment>', $job->getName(), $job->getDescription() !== '' ? " > " . $job->getDescription() : '')]); foreach ($job->getTasks() as $task) { $preTaskEvent = new PreTaskEvent($job, $task); $this->dispatcher->dispatch(Event::PRE_TASK, $preTaskEvent); if ($preTaskEvent->isPropagationStopped()) { continue; } $service = $this->taskRegistry->findTaskByType($task->getType()); $this->prepareServiceForTask($service, $task); try { $service->run($this->output); } catch (TaskRuntimeException $e) { if (!$task->continueOnError()) { throw $e; } /** @var FormatterHelper $formatter */ $formatter = $this->helperSet->get('formatter'); $this->output->writeln(['', $formatter->formatBlock([sprintf('[Warning] Task: %s', $task->getType()), sprintf('%s', $e->getMessage())], 'bg=yellow;fg=black', true), '']); } } }
/** * @param string[] $names * * @throws \Exception * @return array */ private function buildJobs(array $names) { $jobs = $this->container->getParameter('jobs'); foreach ($names as $name) { if (!array_key_exists($name, $jobs)) { throw new BldrException(sprintf("Job `%s` does not exist. Found: %s", $name, implode(', ', array_keys($jobs)))); } $jobInfo = $jobs[$name]; $description = isset($jobInfo['description']) ? $jobInfo['description'] : ""; $job = new JobDefinition($name, $description); foreach ($jobInfo['tasks'] as $taskInfo) { $task = new TaskDefinition($taskInfo['type']); $task->setContinueOnError(isset($taskInfo['continueOnError']) ? $taskInfo['continueOnError'] : false); unset($taskInfo['type'], $taskInfo['continueOnError']); $task->setParameters($taskInfo); $job->addTask($task); } $this->registry->addJob($job); } }
/** * @param string[] $names * * @return array */ public function buildJobs($names) { foreach ($names as $name) { $jobInfo = $this->config['jobs'][$name]; $description = isset($jobInfo['description']) ? $jobInfo['description'] : ""; $job = new JobDefinition($name, $description); foreach ($jobInfo['tasks'] as $taskInfo) { $task = new TaskDefinition($taskInfo['type']); $task->setContinueOnError(isset($taskInfo['continueOnError']) ? $taskInfo['continueOnError'] : false); unset($taskInfo['type'], $taskInfo['continueOnError']); $task->setParameters($taskInfo); $job->addTask($task); } $this->registry->addJob($job); } }