public function run(ContextInterface $context)
{
$tasks = $this->tasks->filterByContext($context)->sortByPriority($this->grumPHP);
$taskResults = new TaskResultCollection();
$this->eventDispatcher->dispatch(RunnerEvents::RUNNER_RUN, new RunnerEvent($tasks, $context, $taskResults));
foreach ($tasks as $task) {
try {
$taskResult = $this->runTask($task, $context);
} catch (RuntimeException $e) {
$taskResult = TaskResult::createFailed($task, $context, $e->getMessage());
}
$taskResults->add($taskResult);
if (!$taskResult->isPassed() && $taskResult->isBlocking() && $this->grumPHP->stopOnFailure()) {
break;
}
}
if ($taskResults->isFailed()) {
$this->eventDispatcher->dispatch(RunnerEvents::RUNNER_FAILED, new RunnerFailedEvent($tasks, $context, $taskResults));
return $taskResults;
}
$this->eventDispatcher->dispatch(RunnerEvents::RUNNER_COMPLETE, new RunnerEvent($tasks, $context, $taskResults));
return $taskResults;
}