From 5de8d32c079034495bacc2abfb574a16bfce8a66 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Poul=20Kjeldager=20S=C3=B8rensen?= Date: Tue, 25 Jan 2022 00:23:46 +0100 Subject: [PATCH 1/7] fix(release2.0.0)!: Releasing 2.0.0 Releasing 2.0.0 --- src/WorkflowEngine.Core/ActionMetadata.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/WorkflowEngine.Core/ActionMetadata.cs b/src/WorkflowEngine.Core/ActionMetadata.cs index d13f609..9ea7af2 100644 --- a/src/WorkflowEngine.Core/ActionMetadata.cs +++ b/src/WorkflowEngine.Core/ActionMetadata.cs @@ -7,7 +7,7 @@ public class ActionMetadata { public WorkflowRunAfterActions RunAfter { get; set; } = new WorkflowRunAfterActions(); public string Type { get; set; } - public IDictionary Inputs { get; set; } = new Dictionary(); + public IDictionary Inputs { get; set; } = new Dictionary(); } From d2588b06780ffe57a00704cc09b8c037c6b2bb28 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Poul=20Kjeldager=20S=C3=B8rensen?= Date: Tue, 25 Jan 2022 00:36:16 +0100 Subject: [PATCH 2/7] fix(pipeline):semantic release requires node 16 --- .github/workflows/release.yml | 2 +- WorkflowEngine.sln | 8 ++++++-- 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index d21cced..1befb9d 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -33,7 +33,7 @@ jobs: - name: Setup Node.js uses: actions/setup-node@v1 with: - node-version: 13 + node-version: 16 - name: Add plugin for conventional commits run: npm install conventional-changelog-conventionalcommits diff --git a/WorkflowEngine.sln b/WorkflowEngine.sln index fd7d4ca..d683dd5 100644 --- a/WorkflowEngine.sln +++ b/WorkflowEngine.sln @@ -1,7 +1,7 @@  Microsoft Visual Studio Solution File, Format Version 12.00 -# Visual Studio Version 16 -VisualStudioVersion = 16.0.31320.298 +# Visual Studio Version 17 +VisualStudioVersion = 17.0.31912.275 MinimumVisualStudioVersion = 10.0.40219.1 Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "WorkflowEngine.Core", "src\WorkflowEngine.Core\WorkflowEngine.Core.csproj", "{44ED38AB-742A-455D-8451-BB0947E76E43}" EndProject @@ -10,7 +10,11 @@ EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution Items", "{0749C5E8-52D4-4B3A-89EA-891DD156A056}" ProjectSection(SolutionItems) = preProject .gitignore = .gitignore + .github\workflows\.releaserc = .github\workflows\.releaserc + .github\workflows\build.yml = .github\workflows\build.yml README.md = README.md + .github\workflows\release.yml = .github\workflows\release.yml + .github\workflows\todo.yml = .github\workflows\todo.yml EndProjectSection EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "WorkflowEngine.Hangfire", "src\WorkflowEngine.Hangfire\WorkflowEngine.Hangfire.csproj", "{7A50D90B-98AE-4B7F-9B39-8828D9ACED5B}" From 0a0a353b1e388537997ee5c4ec7eed139f3f800d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Poul=20Kjeldager=20S=C3=B8rensen?= Date: Tue, 25 Jan 2022 00:40:14 +0100 Subject: [PATCH 3/7] added pipeline for release branches to validation next version --- .github/workflows/prerelease.yml | 39 ++++++++++++++++++++++++++++++++ WorkflowEngine.sln | 1 + 2 files changed, 40 insertions(+) create mode 100644 .github/workflows/prerelease.yml diff --git a/.github/workflows/prerelease.yml b/.github/workflows/prerelease.yml new file mode 100644 index 0000000..30e2cbf --- /dev/null +++ b/.github/workflows/prerelease.yml @@ -0,0 +1,39 @@ +name: Release + +on: + push: + branches: + - releases/** + +jobs: + release: + name: Pre Releasing + runs-on: windows-latest + steps: + - name: Checkout repo + uses: actions/checkout@v2 + + - name: Setup Node.js + uses: actions/setup-node@v1 + with: + node-version: 16 + + - name: Add plugin for conventional commits + run: npm install conventional-changelog-conventionalcommits + working-directory: ./.github/workflows + + - name: Add plugin for executing bash commands + run: npm install @semantic-release/exec -D + working-directory: ./.github/workflows + + - name: Dry Run Semantic to get next Version nummber + working-directory: ./.github/workflows + env: + GITHUB_TOKEN: ${{ secrets.GH_TOKEN }} + GIT_AUTHOR_NAME: thygesteffensen + GIT_AUTHOR_EMAIL: 31892312+thygesteffensen@users.noreply.github.com + run: | + echo "RELEASE_VERSION=$((npx semantic-release --dry-run).Where({ $_ -like '*Release note*' }) | Out-String | Select-String '[0-9]+\.[0-9]+\.[0-9]+([-][a-zA-z]+[.][0-9]*)?' | % { $_.Matches } | % { $_.Value })" | Out-File -FilePath $env:GITHUB_ENV -Encoding utf8 -Append + + - name: Print release verison + run: echo ${env:RELEASE_VERSION} \ No newline at end of file diff --git a/WorkflowEngine.sln b/WorkflowEngine.sln index d683dd5..68b7f60 100644 --- a/WorkflowEngine.sln +++ b/WorkflowEngine.sln @@ -12,6 +12,7 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution .gitignore = .gitignore .github\workflows\.releaserc = .github\workflows\.releaserc .github\workflows\build.yml = .github\workflows\build.yml + .github\workflows\prerelease.yml = .github\workflows\prerelease.yml README.md = README.md .github\workflows\release.yml = .github\workflows\release.yml .github\workflows\todo.yml = .github\workflows\todo.yml From 20cb4157e5c8373f709fb23dee389ef768bdd623 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Poul=20Kjeldager=20S=C3=B8rensen?= Date: Tue, 25 Jan 2022 00:49:50 +0100 Subject: [PATCH 4/7] fix(release): releasing 2.0.0 BREAKING CHANGE: ActionMetadata was changed from to --- src/WorkflowEngine.Core/ActionMetadata.cs | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/WorkflowEngine.Core/ActionMetadata.cs b/src/WorkflowEngine.Core/ActionMetadata.cs index 9ea7af2..55bc3d3 100644 --- a/src/WorkflowEngine.Core/ActionMetadata.cs +++ b/src/WorkflowEngine.Core/ActionMetadata.cs @@ -3,6 +3,9 @@ namespace WorkflowEngine.Core { + /// + /// Represent the metadata for a action + /// public class ActionMetadata { public WorkflowRunAfterActions RunAfter { get; set; } = new WorkflowRunAfterActions(); @@ -11,5 +14,4 @@ public class ActionMetadata } - } From 133fd28fc3d8e80349af7bb8f31c4fdb2efdb2dc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Poul=20Kjeldager=20S=C3=B8rensen?= Date: Tue, 25 Jan 2022 00:56:09 +0100 Subject: [PATCH 5/7] fix(pipeline): Fixes the name of workflow --- .github/workflows/prerelease.yml | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/.github/workflows/prerelease.yml b/.github/workflows/prerelease.yml index 30e2cbf..73f7bcd 100644 --- a/.github/workflows/prerelease.yml +++ b/.github/workflows/prerelease.yml @@ -1,4 +1,4 @@ -name: Release +name: PreRelease on: push: @@ -26,6 +26,16 @@ jobs: run: npm install @semantic-release/exec -D working-directory: ./.github/workflows + - name: Dry Run Semantic to get next Version nummber + working-directory: ./.github/workflows + env: + GITHUB_TOKEN: ${{ secrets.GH_TOKEN }} + GIT_AUTHOR_NAME: thygesteffensen + GIT_AUTHOR_EMAIL: 31892312+thygesteffensen@users.noreply.github.com + run: | + echo "$(npx semantic-release --dry-run)" + + - name: Dry Run Semantic to get next Version nummber working-directory: ./.github/workflows env: From dd3d0184918608172deb230e45ddeb6ca7a390ee Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Poul=20Kjeldager=20S=C3=B8rensen?= Date: Tue, 25 Jan 2022 01:05:04 +0100 Subject: [PATCH 6/7] fix: semantic release branches --- .github/workflows/.releaserc | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.github/workflows/.releaserc b/.github/workflows/.releaserc index 0708516..c5991f2 100644 --- a/.github/workflows/.releaserc +++ b/.github/workflows/.releaserc @@ -1,5 +1,7 @@ branches: - name: master + - name: 'releases/+([0-9])?(.{+([0-9]),x}).x' + prerelease: true - name: dev prerelease: dev From 32931b8886dcb71e6e60b7e266d64c013ef25674 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Poul=20Kjeldager=20S=C3=B8rensen?= Date: Tue, 15 Feb 2022 16:52:14 +0100 Subject: [PATCH 7/7] fix: Fixing jobnames --- src/WorkflowEngine.Core/Action.cs | 10 ++++++- src/WorkflowEngine.Core/ActionExecutor.cs | 27 ------------------- .../ActionImplementationMetadata.cs | 14 ++++++++++ .../IActionImplementation.cs | 16 +++++++++++ .../IActionImplementationExtenssions.cs | 17 ++++++++++++ .../IActionImplementationMetadata.cs | 12 +++++++++ src/WorkflowEngine.Core/TriggerContext.cs | 15 +++++++++-- src/WorkflowEngine.Core/Workflow.cs | 17 +++++++++++- src/WorkflowEngine.Hangfire/Class1.cs | 11 -------- .../IHangfireActionExecutor.cs | 14 ++++++++++ .../IHangfireWorkflowExecutor.cs | 14 ++++++++++ 11 files changed, 125 insertions(+), 42 deletions(-) create mode 100644 src/WorkflowEngine.Core/ActionImplementationMetadata.cs create mode 100644 src/WorkflowEngine.Core/IActionImplementation.cs create mode 100644 src/WorkflowEngine.Core/IActionImplementationExtenssions.cs create mode 100644 src/WorkflowEngine.Core/IActionImplementationMetadata.cs create mode 100644 src/WorkflowEngine.Hangfire/IHangfireActionExecutor.cs create mode 100644 src/WorkflowEngine.Hangfire/IHangfireWorkflowExecutor.cs diff --git a/src/WorkflowEngine.Core/Action.cs b/src/WorkflowEngine.Core/Action.cs index a019b69..90ddba0 100644 --- a/src/WorkflowEngine.Core/Action.cs +++ b/src/WorkflowEngine.Core/Action.cs @@ -2,12 +2,20 @@ namespace WorkflowEngine.Core { - public class Action : IAction + public class Action : IAction, IFormattable { public DateTimeOffset ScheduledTime { get; set; } public string Type { get; set; } public string Key { get; set; } + + public string ToString(string format, IFormatProvider formatProvider) + { + if (format == "Type") + return Type; + + return string.Empty; + } } diff --git a/src/WorkflowEngine.Core/ActionExecutor.cs b/src/WorkflowEngine.Core/ActionExecutor.cs index 975e013..74d8cc5 100644 --- a/src/WorkflowEngine.Core/ActionExecutor.cs +++ b/src/WorkflowEngine.Core/ActionExecutor.cs @@ -6,33 +6,6 @@ namespace WorkflowEngine.Core { - public interface IActionImplementationMetadata{ - string Type { get; } - Type Implementation { get; } - } - public class ActionImplementationMetadata : IActionImplementationMetadata - where T: IActionImplementation - { - public string Type { get; set; } - public Type Implementation => typeof(T); - } - public static class IActionImplementationExtenssions - { - public static IServiceCollection AddAction(this IServiceCollection services, string type) - where T: class, IActionImplementation - { - return services.AddTransient() - .AddSingleton< IActionImplementationMetadata>(new ActionImplementationMetadata { Type = type }); - } - } - public interface IActionImplementation - { - - - ValueTask ExecuteAsync(IWorkflow workflow, IAction action); - - - } public class ActionExecutor : IActionExecutor { private readonly IServiceProvider serviceProvider; diff --git a/src/WorkflowEngine.Core/ActionImplementationMetadata.cs b/src/WorkflowEngine.Core/ActionImplementationMetadata.cs new file mode 100644 index 0000000..ffe8ed3 --- /dev/null +++ b/src/WorkflowEngine.Core/ActionImplementationMetadata.cs @@ -0,0 +1,14 @@ +using System; + +namespace WorkflowEngine.Core +{ + public class ActionImplementationMetadata : IActionImplementationMetadata + where T: IActionImplementation + { + public string Type { get; set; } + public Type Implementation => typeof(T); + } + + + +} diff --git a/src/WorkflowEngine.Core/IActionImplementation.cs b/src/WorkflowEngine.Core/IActionImplementation.cs new file mode 100644 index 0000000..71e079f --- /dev/null +++ b/src/WorkflowEngine.Core/IActionImplementation.cs @@ -0,0 +1,16 @@ +using System.Threading.Tasks; + +namespace WorkflowEngine.Core +{ + public interface IActionImplementation + { + + + ValueTask ExecuteAsync(IWorkflow workflow, IAction action); + + + } + + + +} diff --git a/src/WorkflowEngine.Core/IActionImplementationExtenssions.cs b/src/WorkflowEngine.Core/IActionImplementationExtenssions.cs new file mode 100644 index 0000000..0c72520 --- /dev/null +++ b/src/WorkflowEngine.Core/IActionImplementationExtenssions.cs @@ -0,0 +1,17 @@ +using Microsoft.Extensions.DependencyInjection; + +namespace WorkflowEngine.Core +{ + public static class IActionImplementationExtenssions + { + public static IServiceCollection AddAction(this IServiceCollection services, string type) + where T: class, IActionImplementation + { + return services.AddTransient() + .AddSingleton< IActionImplementationMetadata>(new ActionImplementationMetadata { Type = type }); + } + } + + + +} diff --git a/src/WorkflowEngine.Core/IActionImplementationMetadata.cs b/src/WorkflowEngine.Core/IActionImplementationMetadata.cs new file mode 100644 index 0000000..0056f08 --- /dev/null +++ b/src/WorkflowEngine.Core/IActionImplementationMetadata.cs @@ -0,0 +1,12 @@ +using System; + +namespace WorkflowEngine.Core +{ + public interface IActionImplementationMetadata{ + string Type { get; } + Type Implementation { get; } + } + + + +} diff --git a/src/WorkflowEngine.Core/TriggerContext.cs b/src/WorkflowEngine.Core/TriggerContext.cs index 98fca7c..01f5bc1 100644 --- a/src/WorkflowEngine.Core/TriggerContext.cs +++ b/src/WorkflowEngine.Core/TriggerContext.cs @@ -1,8 +1,19 @@ -namespace WorkflowEngine.Core +using System; + +namespace WorkflowEngine.Core { - public class TriggerContext : ITriggerContext + public class TriggerContext : ITriggerContext, IFormattable { public IWorkflow Workflow { get; set; } + + public string ToString(string format, IFormatProvider formatProvider) + { + if(format =="WorkFlow") + { + return Workflow?.GetType().Name.ToString(); + } + return string.Empty; + } } diff --git a/src/WorkflowEngine.Core/Workflow.cs b/src/WorkflowEngine.Core/Workflow.cs index 5bd1b30..aca351f 100644 --- a/src/WorkflowEngine.Core/Workflow.cs +++ b/src/WorkflowEngine.Core/Workflow.cs @@ -1,12 +1,27 @@ using System; +using System.Linq; namespace WorkflowEngine.Core { - public class Workflow : IWorkflow + public class Workflow : IWorkflow, IFormattable { public Guid Id { get; set; } public string Version { get; set; } public WorkflowManifest Manifest { get; set; } + + public string ToString(string format, IFormatProvider formatProvider) + { + if (format == "Id") + return Id.ToString(); + + if (format == "Version") + return Version; + + if (format == "Trigger") + return Manifest.Triggers.FirstOrDefault().Value?.Type; + + return string.Empty; + } } diff --git a/src/WorkflowEngine.Hangfire/Class1.cs b/src/WorkflowEngine.Hangfire/Class1.cs index fb971b2..3fd3366 100644 --- a/src/WorkflowEngine.Hangfire/Class1.cs +++ b/src/WorkflowEngine.Hangfire/Class1.cs @@ -1,20 +1,9 @@ using System; -using System.ComponentModel; using System.Threading.Tasks; using WorkflowEngine.Core; namespace WorkflowEngine { - public interface IHangfireActionExecutor - { - [DisplayName("Action: {0}")] - public ValueTask ExecuteAsync(string type, IWorkflow workflow, IAction action); - } - public interface IHangfireWorkflowExecutor - { - [DisplayName("Trigger: {0}")] - public ValueTask TriggerAsync(ITriggerContext context); - } public class HangfireWorkflowExecutor : IHangfireWorkflowExecutor, IHangfireActionExecutor { diff --git a/src/WorkflowEngine.Hangfire/IHangfireActionExecutor.cs b/src/WorkflowEngine.Hangfire/IHangfireActionExecutor.cs new file mode 100644 index 0000000..f69be58 --- /dev/null +++ b/src/WorkflowEngine.Hangfire/IHangfireActionExecutor.cs @@ -0,0 +1,14 @@ +using Hangfire; +using System.ComponentModel; +using System.Threading.Tasks; +using WorkflowEngine.Core; + +namespace WorkflowEngine +{ + public interface IHangfireActionExecutor + { + [JobDisplayName("Action: {0}, workflow={1:Id}")] + public ValueTask ExecuteAsync(string type, IWorkflow workflow, IAction action); + } + +} diff --git a/src/WorkflowEngine.Hangfire/IHangfireWorkflowExecutor.cs b/src/WorkflowEngine.Hangfire/IHangfireWorkflowExecutor.cs new file mode 100644 index 0000000..b7b237a --- /dev/null +++ b/src/WorkflowEngine.Hangfire/IHangfireWorkflowExecutor.cs @@ -0,0 +1,14 @@ +using Hangfire; +using System.ComponentModel; +using System.Threading.Tasks; +using WorkflowEngine.Core; + +namespace WorkflowEngine +{ + public interface IHangfireWorkflowExecutor + { + [JobDisplayName("Trigger: {0:WorkFlow}")] + public ValueTask TriggerAsync(ITriggerContext context); + } + +}