From 562d91bd558cfa192ed66460b89cad5b4bb9c26d Mon Sep 17 00:00:00 2001 From: Sipke Schoorstra Date: Tue, 20 May 2025 11:24:23 +0200 Subject: [PATCH] Fix async callback awaiting in HTTP endpoint (#6660) * Await HTTP resume callbacks * Update HttpEndpoint.cs * Update HttpEndpointActivityExecutionContextExtensions.cs * Refactor to use `WaitForHttpRequestAsync` consistently. Replaced `WaitForHttpRequest` with `WaitForHttpRequestAsync` across the codebase to align with asynchronous naming conventions. This change improves clarity and maintains consistency in method naming. * Add 'codex/*' branch to workflow path filters This update ensures that actions in the workflow are triggered for changes in branches following the 'codex/*' naming convention. It aligns the path filters with the branching strategy and improves CI/CD coverage. --- .github/workflows/packages.yml | 1 + .../Elsa.Http/Activities/HttpEndpoint.cs | 4 +- .../Elsa.Http/Activities/HttpEndpointBase.cs | 4 +- ...pointActivityExecutionContextExtensions.cs | 39 ++++++++++--------- 4 files changed, 25 insertions(+), 23 deletions(-) diff --git a/.github/workflows/packages.yml b/.github/workflows/packages.yml index e3f8ea3da..ec55bf739 100644 --- a/.github/workflows/packages.yml +++ b/.github/workflows/packages.yml @@ -11,6 +11,7 @@ on: - 'enh/*' - 'rc/*' - 'develop/*' + - 'codex/*' release: types: [ prereleased, published ] env: diff --git a/src/modules/Elsa.Http/Activities/HttpEndpoint.cs b/src/modules/Elsa.Http/Activities/HttpEndpoint.cs index b38822b42..6db32f823 100644 --- a/src/modules/Elsa.Http/Activities/HttpEndpoint.cs +++ b/src/modules/Elsa.Http/Activities/HttpEndpoint.cs @@ -163,7 +163,7 @@ public class HttpEndpoint : Trigger { var path = Path.Get(context); var methods = SupportedMethods.GetOrDefault(context) ?? new List { HttpMethods.Get }; - context.WaitForHttpRequest(path, methods, OnResumeAsync); + await context.WaitForHttpRequestAsync(path, methods, OnResumeAsync); } private async ValueTask OnResumeAsync(ActivityExecutionContext context) @@ -497,4 +497,4 @@ public class HttpEndpoint : Trigger return routeData; } -} \ No newline at end of file +} diff --git a/src/modules/Elsa.Http/Activities/HttpEndpointBase.cs b/src/modules/Elsa.Http/Activities/HttpEndpointBase.cs index e3e3666fb..9257a73c1 100644 --- a/src/modules/Elsa.Http/Activities/HttpEndpointBase.cs +++ b/src/modules/Elsa.Http/Activities/HttpEndpointBase.cs @@ -20,10 +20,10 @@ public abstract class HttpEndpointBase : Trigger { } - protected override void Execute(ActivityExecutionContext context) + protected override async ValueTask ExecuteAsync(ActivityExecutionContext context) { var options = GetOptions(); - context.WaitForHttpRequest(options, HttpRequestReceivedAsync); + await context.WaitForHttpRequestAsync(options, HttpRequestReceivedAsync); } protected override IEnumerable GetTriggerPayloads(TriggerIndexingContext context) diff --git a/src/modules/Elsa.Http/Extensions/HttpEndpointActivityExecutionContextExtensions.cs b/src/modules/Elsa.Http/Extensions/HttpEndpointActivityExecutionContextExtensions.cs index 67bc08d52..ca62a0782 100644 --- a/src/modules/Elsa.Http/Extensions/HttpEndpointActivityExecutionContextExtensions.cs +++ b/src/modules/Elsa.Http/Extensions/HttpEndpointActivityExecutionContextExtensions.cs @@ -9,27 +9,27 @@ namespace Elsa.Http.Extensions; public static class HttpEndpointActivityExecutionContextExtensions { - public static void WaitForHttpRequest(this ActivityExecutionContext context, string path, string method, ExecuteActivityDelegate? callback = null) +public static async ValueTask WaitForHttpRequestAsync(this ActivityExecutionContext context, string path, string method, ExecuteActivityDelegate? callback = null) +{ + var options = new HttpEndpointOptions { - var options = new HttpEndpointOptions - { - Path = path, - Methods = [method] - }; - WaitForHttpRequest(context, options, callback); - } + Path = path, + Methods = [method] + }; + await WaitForHttpRequestAsync(context, options, callback); +} - public static void WaitForHttpRequest(this ActivityExecutionContext context, string path, IEnumerable methods, ExecuteActivityDelegate? callback = null) +public static async ValueTask WaitForHttpRequestAsync(this ActivityExecutionContext context, string path, IEnumerable methods, ExecuteActivityDelegate? callback = null) +{ + var options = new HttpEndpointOptions { - var options = new HttpEndpointOptions - { - Path = path, - Methods = methods.ToList() - }; - WaitForHttpRequest(context, options, callback); - } + Path = path, + Methods = methods.ToList() + }; + await WaitForHttpRequestAsync(context, options, callback); +} - public static void WaitForHttpRequest(this ActivityExecutionContext context, HttpEndpointOptions options, ExecuteActivityDelegate? callback = null) + public static async ValueTask WaitForHttpRequestAsync(this ActivityExecutionContext context, HttpEndpointOptions options, ExecuteActivityDelegate? callback = null) { var path = options.Path; if (path.Contains("//")) @@ -42,7 +42,8 @@ public static class HttpEndpointActivityExecutionContextExtensions return; } - callback?.Invoke(context); + if (callback is not null) + await callback(context); } public static IEnumerable GetHttpEndpointStimuli(this TriggerIndexingContext context, string path, string method) @@ -91,4 +92,4 @@ public static class HttpEndpointActivityExecutionContextExtensions }; context.CreateBookmark(bookmarkOptions); } -} \ No newline at end of file +}