/// <inheritdoc /> public async Task ProcessPayload(PullRequestEventPayload payload, CancellationToken cancellationToken) { if (payload == null) { throw new ArgumentNullException(nameof(payload)); } if (payload.Action != "closed" || !payload.PullRequest.Merged) { throw new NotSupportedException(); } var changelog = Models.Changelog.GetChangelog(payload.PullRequest, out bool malformed); if (changelog == null) { return; } var result = new List <Dictionary <string, string> >(); #pragma warning disable CA1308 // Normalize strings to uppercase result.AddRange(changelog.Changes.Select(x => new Dictionary <string, string> { { x.Type.ToString().ToLowerInvariant(), x.Text } })); #pragma warning restore CA1308 // Normalize strings to uppercase //create the object graph var graph = new { author = changelog.Author, delete_after_temporary_for_replacement = true, changes = result }; //hack because '-' isn't a valid identifier in c# var yaml = new Serializer().Serialize(graph).Replace("delete_after_temporary_for_replacement", "delete-after", StringComparison.InvariantCulture); var title = String.Format(CultureInfo.InvariantCulture, "AutoChangeLog-pr-{0}.yml", payload.PullRequest.Number); var pathToWrite = Path.Combine("html", "changelogs", title); await gitHubManager.CreateFile(payload.PullRequest.Base.Ref, stringLocalizer["CommitMessage", payload.PullRequest.Number], pathToWrite, yaml).ConfigureAwait(false); }