public function doRun(InputInterface $input, OutputInterface $output)
    {
        $this->configuration = ConfigurationReader::readInput($input);
        $this->environment->getEventEmitter()->emit('peridot.configure', [$this->configuration, $this]);

        $runner = $this->getRunner();
        $factory = new ReporterFactory($this->configuration, $output, $this->environment->getEventEmitter());

        $this->loadDsl($this->configuration->getDsl());
        $this->add(new Command($runner, $this->configuration, $factory, $this->environment->getEventEmitter()));

        $exitCode = parent::doRun($input, $output);

        $this->environment->getEventEmitter()->emit('peridot.end', [$exitCode, $input, $output]);

        return $exitCode;
    }