private void EventSourceOnBuildFinished(object sender, BuildFinishedEventArgs e)
        {
            var submitSuccess = false;

            try
            {
                var logData = _logDataBuilder.Build();

                var hasAnyFailure = logData.Annotations.Any() &&
                                    logData.Annotations.Any(annotation => annotation.AnnotationLevel == AnnotationLevel.Failure);

                var stringBuilder = new StringBuilder();
                stringBuilder.Append(logData.ErrorCount.ToString());
                stringBuilder.Append(" ");
                stringBuilder.Append(logData.ErrorCount == 1 ? "error" : "errors");
                stringBuilder.Append(" - ");
                stringBuilder.Append(logData.WarningCount.ToString());
                stringBuilder.Append(" ");
                stringBuilder.Append(logData.WarningCount == 1 ? "warning" : "warnings");

                var createCheckRun = new CreateCheckRun
                {
                    Annotations = logData.Annotations,
                    Conclusion  = !hasAnyFailure ? CheckConclusion.Success : CheckConclusion.Failure,
                    StartedAt   = _startedAt,
                    CompletedAt = DateTimeOffset.Now,
                    Summary     = logData.Report,
                    Name        = _configuration?.Name ?? "MSBuild Log",
                    Title       = stringBuilder.ToString(),
                };

                var contents = createCheckRun.ToJson();
                var bytes    = Encoding.Unicode.GetBytes(contents);
                submitSuccess = _submissionService.SubmitAsync(bytes, _parameters).Result;
            }
            catch (Exception exception)
            {
                _environmentProvider.WriteLine(exception.ToString());
            }
            _environmentProvider.WriteLine($"Submission {(submitSuccess ? "Success" : "Failure")}");
        }
        public void Proces(string inputFile, string outputFile, string cloneRoot, string owner, string repo, string hash, string configurationFile = null)
        {
            if (!_fileSystem.File.Exists(inputFile))
            {
                throw new InvalidOperationException($"Input file `{inputFile}` does not exist.");
            }

            if (_fileSystem.File.Exists(outputFile))
            {
                throw new InvalidOperationException($"Output file `{outputFile}` already exists.");
            }

            CheckRunConfiguration configuration = null;

            if (configurationFile != null)
            {
                if (!_fileSystem.File.Exists(configurationFile))
                {
                    throw new InvalidOperationException($"Configuration file `{configurationFile}` does not exist.");
                }

                var configurationString = _fileSystem.File.ReadAllText(configurationFile);
                if (string.IsNullOrWhiteSpace(configurationString))
                {
                    throw new InvalidOperationException($"Content of configuration file `{configurationFile}` is null or empty.");
                }

                configuration = JsonConvert.DeserializeObject <CheckRunConfiguration>(configurationString, new JsonSerializerSettings
                {
                    Formatting       = Formatting.None,
                    ContractResolver = new CamelCasePropertyNamesContractResolver(),
                    Converters       = new List <JsonConverter>
                    {
                        new StringEnumConverter {
                            NamingStrategy = new CamelCaseNamingStrategy()
                        }
                    },
                    MissingMemberHandling = MissingMemberHandling.Error
                });
            }

            var dateTimeOffset = DateTimeOffset.Now;
            var logData        = _binaryLogProcessor.ProcessLog(inputFile, cloneRoot, owner, repo, hash, configuration);

            var hasAnyFailure = logData.Annotations.Any() &&
                                logData.Annotations.Any(annotation => annotation.AnnotationLevel == AnnotationLevel.Failure);

            var stringBuilder = new StringBuilder();

            stringBuilder.Append(logData.ErrorCount.ToString());
            stringBuilder.Append(" ");
            stringBuilder.Append(logData.ErrorCount == 1 ? "error": "errors");
            stringBuilder.Append(" - ");
            stringBuilder.Append(logData.WarningCount.ToString());
            stringBuilder.Append(" ");
            stringBuilder.Append(logData.WarningCount == 1 ? "warning" : "warnings");

            var createCheckRun = new CreateCheckRun
            {
                Annotations = logData.Annotations,
                Conclusion  = !hasAnyFailure ? CheckConclusion.Success : CheckConclusion.Failure,
                StartedAt   = dateTimeOffset,
                CompletedAt = DateTimeOffset.Now,
                Summary     = logData.Report,
                Name        = configuration?.Name ?? "MSBuild Log",
                Title       = stringBuilder.ToString(),
            };

            var contents = createCheckRun.ToJson();

            _fileSystem.File.WriteAllText(outputFile, contents);
        }