From bb254a20f7465227d59d23722d3eaf10d10a04df Mon Sep 17 00:00:00 2001 From: Jamie Magee Date: Thu, 17 Jul 2025 20:45:35 -0700 Subject: [PATCH] Pass `CancellationToken` to `WebhookEventProcessor` by default --- README.md | 14 +++++++++++--- samples/AspNetCore/MyWebhookEventProcessor.cs | 6 +++++- samples/AzureFunctions/MyWebhookEventProcessor.cs | 6 +++++- .../GitHubWebhookExtensions.cs | 5 ++--- .../GitHubWebhooksHttpFunction.cs | 2 +- 5 files changed, 24 insertions(+), 9 deletions(-) diff --git a/README.md b/README.md index c942f755..7ec6c550 100644 --- a/README.md +++ b/README.md @@ -17,7 +17,11 @@ Libraries to handle GitHub Webhooks in .NET applications. ```C# public sealed class MyWebhookEventProcessor : WebhookEventProcessor { - protected override Task ProcessPullRequestWebhookAsync(WebhookHeaders headers, PullRequestEvent pullRequestEvent, PullRequestAction action) + protected override Task ProcessPullRequestWebhookAsync( + WebhookHeaders headers, + PullRequestEvent pullRequestEvent, + PullRequestAction action, + CancellationToken cancellationToken = default) { ... } @@ -48,7 +52,7 @@ Libraries to handle GitHub Webhooks in .NET applications. ### Azure Functions -**NOTE**: Support is only provided for [isolated process Azure Functions](https://learn.microsoft.com/en-us/azure/azure-functions/dotnet-isolated-process-guide). +**NOTE**: Support is only provided for [isolated process Azure Functions](https://learn.microsoft.com/azure/azure-functions/dotnet-isolated-process-guide). 1. `dotnet add package Octokit.Webhooks.AzureFunctions` 2. Create a class that derives from `WebhookEventProcessor` and override any of the virtual methods to handle webhooks from GitHub. For example, to handle Pull Request webhooks: @@ -56,7 +60,11 @@ Libraries to handle GitHub Webhooks in .NET applications. ```C# public sealed class MyWebhookEventProcessor : WebhookEventProcessor { - protected override Task ProcessPullRequestWebhookAsync(WebhookHeaders headers, PullRequestEvent pullRequestEvent, PullRequestAction action, CancellationToken cancellationToken = default) + protected override Task ProcessPullRequestWebhookAsync( + WebhookHeaders headers, + PullRequestEvent pullRequestEvent, + PullRequestAction action, + CancellationToken cancellationToken = default) { ... } diff --git a/samples/AspNetCore/MyWebhookEventProcessor.cs b/samples/AspNetCore/MyWebhookEventProcessor.cs index 665084c0..88eb4074 100644 --- a/samples/AspNetCore/MyWebhookEventProcessor.cs +++ b/samples/AspNetCore/MyWebhookEventProcessor.cs @@ -9,7 +9,11 @@ namespace AspNetCore; public class MyWebhookEventProcessor(ILogger logger) : WebhookEventProcessor { - protected override async Task ProcessPullRequestWebhookAsync(WebhookHeaders headers, PullRequestEvent pullRequestEvent, PullRequestAction action, CancellationToken cancellationToken = default) + protected override async Task ProcessPullRequestWebhookAsync( + WebhookHeaders headers, + PullRequestEvent pullRequestEvent, + PullRequestAction action, + CancellationToken cancellationToken = default) { switch (action) { diff --git a/samples/AzureFunctions/MyWebhookEventProcessor.cs b/samples/AzureFunctions/MyWebhookEventProcessor.cs index 1fa3d616..739d9dc9 100644 --- a/samples/AzureFunctions/MyWebhookEventProcessor.cs +++ b/samples/AzureFunctions/MyWebhookEventProcessor.cs @@ -9,7 +9,11 @@ namespace AzureFunctions; public class MyWebhookEventProcessor(ILogger logger) : WebhookEventProcessor { - protected override async Task ProcessPullRequestWebhookAsync(WebhookHeaders headers, PullRequestEvent pullRequestEvent, PullRequestAction action, CancellationToken cancellationToken = default) + protected override async Task ProcessPullRequestWebhookAsync( + WebhookHeaders headers, + PullRequestEvent pullRequestEvent, + PullRequestAction action, + CancellationToken cancellationToken = default) { switch (action) { diff --git a/src/Octokit.Webhooks.AspNetCore/GitHubWebhookExtensions.cs b/src/Octokit.Webhooks.AspNetCore/GitHubWebhookExtensions.cs index 9b117c3c..3be57487 100644 --- a/src/Octokit.Webhooks.AspNetCore/GitHubWebhookExtensions.cs +++ b/src/Octokit.Webhooks.AspNetCore/GitHubWebhookExtensions.cs @@ -24,8 +24,7 @@ public static partial class GitHubWebhookExtensions public static IEndpointConventionBuilder MapGitHubWebhooks( this IEndpointRouteBuilder endpoints, string path = "/api/github/webhooks", - string? secret = null, - bool cancelOnRequestAborted = false) + string? secret = null) { var options = endpoints.ServiceProvider.GetService>(); return endpoints.MapPost( @@ -60,7 +59,7 @@ public static IEndpointConventionBuilder MapGitHubWebhooks( try { var service = context.RequestServices.GetRequiredService(); - await service.ProcessWebhookAsync(context.Request.Headers, body, cancelOnRequestAborted ? context.RequestAborted : CancellationToken.None) + await service.ProcessWebhookAsync(context.Request.Headers, body, context.RequestAborted) .ConfigureAwait(false); context.Response.StatusCode = 200; } diff --git a/src/Octokit.Webhooks.AzureFunctions/GitHubWebhooksHttpFunction.cs b/src/Octokit.Webhooks.AzureFunctions/GitHubWebhooksHttpFunction.cs index c588a4ba..0cdddee7 100644 --- a/src/Octokit.Webhooks.AzureFunctions/GitHubWebhooksHttpFunction.cs +++ b/src/Octokit.Webhooks.AzureFunctions/GitHubWebhooksHttpFunction.cs @@ -53,7 +53,7 @@ public sealed partial class GitHubWebhooksHttpFunction(IOptions kv.Key, kv => new StringValues([.. kv.Value]), StringComparer.OrdinalIgnoreCase); - await service.ProcessWebhookAsync(headers, body) + await service.ProcessWebhookAsync(headers, body, ctx.CancellationToken) .ConfigureAwait(false); return req.CreateResponse(HttpStatusCode.OK); }