Ejemplo n.º 1
0
        protected override Task <int> OnExecute(CommandLineApplication app)
        {
            var engineConfiguration = TryGetEngineConfigurationOrTerminate(_repositoryPathOption.Value());
            var buildConfiguration  = TryGetBuildConfigurationOrTerminate(engineConfiguration.RepositoryDirectoryPath);

            var engine = new Engine.Engine(
                engineConfiguration,
                buildConfiguration);

            engine.JobStarting += (sender, args) =>
            {
                Outputter.Write($"Starting '{args.Job.Name}'...");
            };

            engine.JobEnded += (sender, args) =>
            {
                switch (args.ExecutionResult.ResultType)
                {
                case JobExecutionResultType.Success:
                    Outputter.WriteSuccess($"Job '{args.Job.Name}' successfully executed.");
                    break;

                case JobExecutionResultType.Failure:
                    Outputter.WriteError($"Job '{args.Job.Name}' failed.");
                    break;

                case JobExecutionResultType.NotExecuted:
                    Outputter.WriteError($"Job '{args.Job.Name}' will not be executed.");
                    break;

                case JobExecutionResultType.JobNotFound:
                    Outputter.WriteError("Specified job index not found. Use 'jobs' command to list available jobs.");
                    break;

                case JobExecutionResultType.SolutionFileNotFound:
                    Outputter.WriteError("Solution was not found.");
                    break;

                case JobExecutionResultType.UnhandledException:
                    Outputter.WriteError($"Unhandled exception while executing '{args.Job.Name}': " +
                                         $"{args.ExecutionResult.UnhandledException.Message}");
                    break;

                default:
                    throw new ArgumentOutOfRangeException();
                }
            };

            int[] jobs;

            try
            {
                jobs = _jobsIndexesOption
                       .Values
                       .Select(int.Parse)
                       .ToArray();
            }
            catch (Exception)
            {
                Outputter.WriteError("Job option receives a integer as input. Use 'jobs' command to list all available jobs.");
                return(Task.FromResult(1));
            }

            var jobsResults = new List <JobExecutionResult>();

            if (jobs.Length == 0)
            {
                jobsResults = engine.ExecuteAllJobs().ToList();
            }
            else
            {
                foreach (var jobIndex in jobs)
                {
                    jobsResults.Add(engine.ExecuteJob(jobIndex));
                }
            }

            PrintFinalResults(jobsResults);
            return(Task.FromResult(0));
        }