Beispiel #1
0
        private static int ExecuteBuildCommand(
            CommandLineApplication app,
            CommandOption repositoryPathOption,
            CommandOption jobsOption)
        {
            app.ShowRootCommandFullNameAndVersion();

            var engineConfiguration = TryGetEngineConfigurationOrTerminate(repositoryPathOption.Value());
            var buildConfiguration  =
                TryGetBuildConfigurationOrTerminate(engineConfiguration.RepositoryDirectoryPath);

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

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

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

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

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

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

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

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

                default:
                    throw new ArgumentOutOfRangeException();
                }
            };

            int[] jobs;

            try
            {
                jobs = jobsOption
                       .Values
                       .Select(int.Parse)
                       .ToArray();
            }
            catch (Exception)
            {
                PipelineOutputter.WriteError("Job option receives a integer as input. Use 'jobs' command to list all available jobs.");
                return(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(0);
        }