def run_step(self):
        """
        Run a step.

        :return: StepResult
        """

        # Resolve ^^task_name.return_value style option syntax
        task_config = self.step.task_config.copy()
        task_config["options"] = task_config["options"].copy()
        self.flow.resolve_return_value_options(task_config["options"])

        exc = None
        try:
            task = self.step.task_class(
                self.project_config,
                TaskConfig(task_config),
                org_config=self.org_config,
                name=self.step.task_name,
                stepnum=self.step.step_num,
                flow=self.flow,
            )
            self._log_options(task)
            task()
        except Exception as e:
            self.flow.logger.exception(
                "Exception in task {}".format(self.step.task_name)
            )
            exc = e
        return StepResult(
            self.step.step_num,
            self.step.task_name,
            self.step.path,
            task.result,
            task.return_values,
            exc,
        )
Run a step.

        :return: StepResult