Skip to content

Commit a614b7d

Browse files
authored
Merge branch 'master' into master
2 parents 2a0b27b + 09cd773 commit a614b7d

File tree

53 files changed

+1725
-60
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

53 files changed

+1725
-60
lines changed

.github/CODEOWNERS

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
* @danielgerlag @glucaci

.github/workflows/dotnet.yml

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ jobs:
1717
dotnet-version: |
1818
3.1.x
1919
6.0.x
20+
8.0.x
2021
- name: Restore dependencies
2122
run: dotnet restore
2223
- name: Build
@@ -33,6 +34,7 @@ jobs:
3334
dotnet-version: |
3435
3.1.x
3536
6.0.x
37+
8.0.x
3638
- name: Restore dependencies
3739
run: dotnet restore
3840
- name: Build
@@ -49,6 +51,7 @@ jobs:
4951
dotnet-version: |
5052
3.1.x
5153
6.0.x
54+
8.0.x
5255
- name: Restore dependencies
5356
run: dotnet restore
5457
- name: Build
@@ -65,6 +68,7 @@ jobs:
6568
dotnet-version: |
6669
3.1.x
6770
6.0.x
71+
8.0.x
6872
- name: Restore dependencies
6973
run: dotnet restore
7074
- name: Build
@@ -81,6 +85,7 @@ jobs:
8185
dotnet-version: |
8286
3.1.x
8387
6.0.x
88+
8.0.x
8489
- name: Restore dependencies
8590
run: dotnet restore
8691
- name: Build
@@ -97,6 +102,7 @@ jobs:
97102
dotnet-version: |
98103
3.1.x
99104
6.0.x
105+
8.0.x
100106
- name: Restore dependencies
101107
run: dotnet restore
102108
- name: Build
@@ -113,6 +119,7 @@ jobs:
113119
dotnet-version: |
114120
3.1.x
115121
6.0.x
122+
8.0.x
116123
- name: Restore dependencies
117124
run: dotnet restore
118125
- name: Build
@@ -129,9 +136,10 @@ jobs:
129136
dotnet-version: |
130137
3.1.x
131138
6.0.x
139+
8.0.x
132140
- name: Restore dependencies
133141
run: dotnet restore
134142
- name: Build
135143
run: dotnet build --no-restore
136144
- name: Elasticsearch Tests
137-
run: dotnet test test/WorkflowCore.Tests.Elasticsearch --no-build --verbosity normal -p:ParallelizeTestCollections=false
145+
run: dotnet test test/WorkflowCore.Tests.Elasticsearch --no-build --verbosity normal -p:ParallelizeTestCollections=false

README.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
# Workflow Core
22

33
[![Build status](https://ci.appveyor.com/api/projects/status/xnby6p5v4ur04u76?svg=true)](https://ci.appveyor.com/project/danielgerlag/workflow-core)
4+
[<img src="https://api.gitsponsors.com/api/badge/img?id=73864802" height="20">](https://api.gitsponsors.com/api/badge/link?p=xj6mObb7nZAJGyuABfd8nD5XWf3SE4oUfw0vmCgSiJeIfNlzJAej0FWX8oFdYm6D7bvZpCf6qANVBNPWid4dRQ==)
45

56
Workflow Core is a light weight embeddable workflow engine targeting .NET Standard. Think: long running processes with multiple tasks that need to track state. It supports pluggable persistence and concurrency providers to allow for multi-node clusters.
67

WorkflowCore.sln

Lines changed: 16 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11

22
Microsoft Visual Studio Solution File, Format Version 12.00
3-
# Visual Studio Version 16
4-
VisualStudioVersion = 16.0.29509.3
3+
# Visual Studio Version 17
4+
VisualStudioVersion = 17.5.33424.131
55
MinimumVisualStudioVersion = 10.0.40219.1
66
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "src", "src", "{EF47161E-E399-451C-BDE8-E92AAD3BD761}"
77
EndProject
@@ -154,6 +154,10 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "WorkflowCore.Sample19", "sr
154154
EndProject
155155
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "WorkflowCore.Persistence.RavenDB", "src\providers\WorkflowCore.Persistence.RavenDB\WorkflowCore.Persistence.RavenDB.csproj", "{AF205715-C8B7-42EF-BF14-AFC9E7F27242}"
156156
EndProject
157+
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "WorkflowCore.Persistence.Oracle", "src\providers\WorkflowCore.Persistence.Oracle\WorkflowCore.Persistence.Oracle.csproj", "{635629BC-9D5C-40C6-BBD0-060550ECE290}"
158+
EndProject
159+
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "WorkflowCore.Tests.Oracle", "test\WorkflowCore.Tests.Oracle\WorkflowCore.Tests.Oracle.csproj", "{A2837F1C-3740-4375-9069-81AE32C867CA}"
160+
EndProject
157161
Global
158162
GlobalSection(SolutionConfigurationPlatforms) = preSolution
159163
Debug|Any CPU = Debug|Any CPU
@@ -376,6 +380,14 @@ Global
376380
{AF205715-C8B7-42EF-BF14-AFC9E7F27242}.Debug|Any CPU.Build.0 = Debug|Any CPU
377381
{AF205715-C8B7-42EF-BF14-AFC9E7F27242}.Release|Any CPU.ActiveCfg = Release|Any CPU
378382
{AF205715-C8B7-42EF-BF14-AFC9E7F27242}.Release|Any CPU.Build.0 = Release|Any CPU
383+
{635629BC-9D5C-40C6-BBD0-060550ECE290}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
384+
{635629BC-9D5C-40C6-BBD0-060550ECE290}.Debug|Any CPU.Build.0 = Debug|Any CPU
385+
{635629BC-9D5C-40C6-BBD0-060550ECE290}.Release|Any CPU.ActiveCfg = Release|Any CPU
386+
{635629BC-9D5C-40C6-BBD0-060550ECE290}.Release|Any CPU.Build.0 = Release|Any CPU
387+
{A2837F1C-3740-4375-9069-81AE32C867CA}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
388+
{A2837F1C-3740-4375-9069-81AE32C867CA}.Debug|Any CPU.Build.0 = Debug|Any CPU
389+
{A2837F1C-3740-4375-9069-81AE32C867CA}.Release|Any CPU.ActiveCfg = Release|Any CPU
390+
{A2837F1C-3740-4375-9069-81AE32C867CA}.Release|Any CPU.Build.0 = Release|Any CPU
379391
EndGlobalSection
380392
GlobalSection(SolutionProperties) = preSolution
381393
HideSolutionNode = FALSE
@@ -438,6 +450,8 @@ Global
438450
{54DE20BA-EBA7-4BF0-9BD9-F03766849716} = {E6CEAD8D-F565-471E-A0DC-676F54EAEDEB}
439451
{1223ED47-3E5E-4960-B70D-DFAF550F6666} = {5080DB09-CBE8-4C45-9957-C3BB7651755E}
440452
{AF205715-C8B7-42EF-BF14-AFC9E7F27242} = {2EEE6ABD-EE9B-473F-AF2D-6DABB85D7BA2}
453+
{635629BC-9D5C-40C6-BBD0-060550ECE290} = {2EEE6ABD-EE9B-473F-AF2D-6DABB85D7BA2}
454+
{A2837F1C-3740-4375-9069-81AE32C867CA} = {E6CEAD8D-F565-471E-A0DC-676F54EAEDEB}
441455
EndGlobalSection
442456
GlobalSection(ExtensibilityGlobals) = postSolution
443457
SolutionGuid = {DC0FA8D3-6449-4FDA-BB46-ECF58FAD23B4}

src/Directory.Build.props

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4,10 +4,10 @@
44
<PackageLicenseUrl>https://github.com/danielgerlag/workflow-core/blob/master/LICENSE.md</PackageLicenseUrl>
55
<RepositoryType>git</RepositoryType>
66
<RepositoryUrl>https://github.com/danielgerlag/workflow-core.git</RepositoryUrl>
7-
<Version>3.10.0</Version>
8-
<AssemblyVersion>3.10.0.0</AssemblyVersion>
9-
<FileVersion>3.10.0.0</FileVersion>
7+
<Version>3.13.0</Version>
8+
<AssemblyVersion>3.13.0.0</AssemblyVersion>
9+
<FileVersion>3.13.0.0</FileVersion>
1010
<PackageIconUrl>https://github.com/danielgerlag/workflow-core/raw/master/src/logo.png</PackageIconUrl>
11-
<PackageVersion>3.10.0</PackageVersion>
11+
<PackageVersion>3.13.0</PackageVersion>
1212
</PropertyGroup>
1313
</Project>
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
using System;
2+
using System.Linq;
3+
4+
namespace WorkflowCore.Interface
5+
{
6+
public interface ITypeResolver
7+
{
8+
Type FindType(string name);
9+
}
10+
}

src/WorkflowCore.DSL/ServiceCollectionExtensions.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ public static class ServiceCollectionExtensions
99
{
1010
public static IServiceCollection AddWorkflowDSL(this IServiceCollection services)
1111
{
12+
services.AddTransient<ITypeResolver, TypeResolver>();
1213
services.AddTransient<IDefinitionLoader, DefinitionLoader>();
1314
return services;
1415
}

src/WorkflowCore.DSL/Services/DefinitionLoader.cs

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -17,10 +17,12 @@ namespace WorkflowCore.Services.DefinitionStorage
1717
public class DefinitionLoader : IDefinitionLoader
1818
{
1919
private readonly IWorkflowRegistry _registry;
20+
private readonly ITypeResolver _typeResolver;
2021

21-
public DefinitionLoader(IWorkflowRegistry registry)
22+
public DefinitionLoader(IWorkflowRegistry registry, ITypeResolver typeResolver)
2223
{
2324
_registry = registry;
25+
_typeResolver = typeResolver;
2426
}
2527

2628
public WorkflowDefinition LoadDefinition(string source, Func<string, DefinitionSourceV1> deserializer)
@@ -220,10 +222,11 @@ private void AttachOutputs(StepSourceV1 source, Type dataType, Type stepType, Wo
220222
var dataParameter = Expression.Parameter(dataType, "data");
221223

222224

223-
if(output.Key.Contains(".") || output.Key.Contains("["))
225+
if (output.Key.Contains(".") || output.Key.Contains("["))
224226
{
225227
AttachNestedOutput(output, step, source, sourceExpr, dataParameter);
226-
}else
228+
}
229+
else
227230
{
228231
AttachDirectlyOutput(output, step, dataType, sourceExpr, dataParameter);
229232
}
@@ -259,11 +262,11 @@ private void AttachDirectlyOutput(KeyValuePair<string, string> output, WorkflowS
259262

260263
}
261264

262-
private void AttachNestedOutput( KeyValuePair<string, string> output, WorkflowStep step, StepSourceV1 source, LambdaExpression sourceExpr, ParameterExpression dataParameter)
265+
private void AttachNestedOutput(KeyValuePair<string, string> output, WorkflowStep step, StepSourceV1 source, LambdaExpression sourceExpr, ParameterExpression dataParameter)
263266
{
264267
PropertyInfo propertyInfo = null;
265268
String[] paths = output.Key.Split('.');
266-
269+
267270
Expression targetProperty = dataParameter;
268271

269272
bool hasAddOutput = false;
@@ -352,7 +355,7 @@ private void AttachOutcomes(StepSourceV1 source, Type dataType, WorkflowStep ste
352355

353356
private Type FindType(string name)
354357
{
355-
return Type.GetType(name, true, true);
358+
return _typeResolver.FindType(name);
356359
}
357360

358361
private static Action<IStepBody, object, IStepExecutionContext> BuildScalarInputAction(KeyValuePair<string, object> input, ParameterExpression dataParameter, ParameterExpression contextParameter, ParameterExpression environmentVarsParameter, PropertyInfo stepProperty)
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
using System;
2+
using System.Collections.Generic;
3+
using System.Text;
4+
using WorkflowCore.Interface;
5+
6+
namespace WorkflowCore.Services.DefinitionStorage
7+
{
8+
public class TypeResolver : ITypeResolver
9+
{
10+
public Type FindType(string name)
11+
{
12+
return Type.GetType(name, true, true);
13+
}
14+
}
15+
}

src/WorkflowCore/Models/WorkflowOptions.cs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ namespace WorkflowCore.Models
88
{
99
public class WorkflowOptions
1010
{
11-
internal Func<IServiceProvider, IPersistenceProvider> PersistanceFactory;
11+
internal Func<IServiceProvider, IPersistenceProvider> PersistenceFactory;
1212
internal Func<IServiceProvider, IQueueProvider> QueueFactory;
1313
internal Func<IServiceProvider, IDistributedLockProvider> LockFactory;
1414
internal Func<IServiceProvider, ILifeCycleEventHub> EventHubFactory;
@@ -29,7 +29,7 @@ public WorkflowOptions(IServiceCollection services)
2929

3030
QueueFactory = new Func<IServiceProvider, IQueueProvider>(sp => new SingleNodeQueueProvider());
3131
LockFactory = new Func<IServiceProvider, IDistributedLockProvider>(sp => new SingleNodeLockProvider());
32-
PersistanceFactory = new Func<IServiceProvider, IPersistenceProvider>(sp => new TransientMemoryPersistenceProvider(sp.GetService<ISingletonMemoryProvider>()));
32+
PersistenceFactory = new Func<IServiceProvider, IPersistenceProvider>(sp => new TransientMemoryPersistenceProvider(sp.GetService<ISingletonMemoryProvider>()));
3333
SearchIndexFactory = new Func<IServiceProvider, ISearchIndex>(sp => new NullSearchIndex());
3434
EventHubFactory = new Func<IServiceProvider, ILifeCycleEventHub>(sp => new SingleNodeEventHub(sp.GetService<ILoggerFactory>()));
3535
}
@@ -42,7 +42,7 @@ public WorkflowOptions(IServiceCollection services)
4242

4343
public void UsePersistence(Func<IServiceProvider, IPersistenceProvider> factory)
4444
{
45-
PersistanceFactory = factory;
45+
PersistenceFactory = factory;
4646
}
4747

4848
public void UseDistributedLockManager(Func<IServiceProvider, IDistributedLockProvider> factory)

src/WorkflowCore/ServiceCollectionExtensions.cs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -20,10 +20,10 @@ public static IServiceCollection AddWorkflow(this IServiceCollection services, A
2020
var options = new WorkflowOptions(services);
2121
setupAction?.Invoke(options);
2222
services.AddSingleton<ISingletonMemoryProvider, MemoryPersistenceProvider>();
23-
services.AddTransient<IPersistenceProvider>(options.PersistanceFactory);
24-
services.AddTransient<IWorkflowRepository>(options.PersistanceFactory);
25-
services.AddTransient<ISubscriptionRepository>(options.PersistanceFactory);
26-
services.AddTransient<IEventRepository>(options.PersistanceFactory);
23+
services.AddTransient<IPersistenceProvider>(options.PersistenceFactory);
24+
services.AddTransient<IWorkflowRepository>(options.PersistenceFactory);
25+
services.AddTransient<ISubscriptionRepository>(options.PersistenceFactory);
26+
services.AddTransient<IEventRepository>(options.PersistenceFactory);
2727
services.AddSingleton<IQueueProvider>(options.QueueFactory);
2828
services.AddSingleton<IDistributedLockProvider>(options.LockFactory);
2929
services.AddSingleton<ILifeCycleEventHub>(options.EventHubFactory);

src/WorkflowCore/Services/WorkflowActivity.cs

Lines changed: 18 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,7 @@ internal static void Enrich(WorkflowInstance workflow, string action)
4848
}
4949
}
5050

51+
5152
internal static void Enrich(WorkflowStep workflowStep)
5253
{
5354
var activity = Activity.Current;
@@ -57,10 +58,18 @@ internal static void Enrich(WorkflowStep workflowStep)
5758
? "inline"
5859
: workflowStep.Name;
5960

60-
activity.DisplayName += $" step {stepName}";
61+
if (string.IsNullOrEmpty(activity.DisplayName))
62+
{
63+
activity.DisplayName = $"step {stepName}";
64+
}
65+
else
66+
{
67+
activity.DisplayName += $" step {stepName}";
68+
}
69+
6170
activity.SetTag("workflow.step.id", workflowStep.Id);
6271
activity.SetTag("workflow.step.name", stepName);
63-
activity.SetTag("workflow.step.type", workflowStep.BodyType.Name);
72+
activity.SetTag("workflow.step.type", workflowStep.BodyType?.Name);
6473
}
6574
}
6675

@@ -69,10 +78,10 @@ internal static void Enrich(WorkflowExecutorResult result)
6978
var activity = Activity.Current;
7079
if (activity != null)
7180
{
72-
activity.SetTag("workflow.subscriptions.count", result.Subscriptions.Count);
73-
activity.SetTag("workflow.errors.count", result.Errors.Count);
81+
activity.SetTag("workflow.subscriptions.count", result?.Subscriptions?.Count);
82+
activity.SetTag("workflow.errors.count", result?.Errors?.Count);
7483

75-
if (result.Errors.Count > 0)
84+
if (result?.Errors?.Count > 0)
7685
{
7786
activity.SetStatus(Status.Error);
7887
activity.SetStatus(ActivityStatusCode.Error);
@@ -85,10 +94,10 @@ internal static void Enrich(Event evt)
8594
var activity = Activity.Current;
8695
if (activity != null)
8796
{
88-
activity.DisplayName = $"workflow process {evt.EventName}";
89-
activity.SetTag("workflow.event.id", evt.Id);
90-
activity.SetTag("workflow.event.name", evt.EventName);
91-
activity.SetTag("workflow.event.processed", evt.IsProcessed);
97+
activity.DisplayName = $"workflow process {evt?.EventName}";
98+
activity.SetTag("workflow.event.id", evt?.Id);
99+
activity.SetTag("workflow.event.name", evt?.EventName);
100+
activity.SetTag("workflow.event.processed", evt?.IsProcessed);
92101
}
93102
}
94103

0 commit comments

Comments
 (0)