コード例 #1
0
        /// <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);
        }