From a36e2c07d04a1ee22e93a05fbb0aad808e52973b Mon Sep 17 00:00:00 2001 From: "bojan.malinic" Date: Fri, 2 Sep 2022 13:33:13 +0200 Subject: [PATCH 01/20] Add command line option --- src/ConductorSharp.Toolkit/Models/ToolkitOptions.cs | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/ConductorSharp.Toolkit/Models/ToolkitOptions.cs b/src/ConductorSharp.Toolkit/Models/ToolkitOptions.cs index 25a6634e..029a6d88 100644 --- a/src/ConductorSharp.Toolkit/Models/ToolkitOptions.cs +++ b/src/ConductorSharp.Toolkit/Models/ToolkitOptions.cs @@ -6,5 +6,8 @@ public class ToolkitOptions { [Option('f', "file", HelpText = "Configuration file", Default = "conductorsharp.yaml")] public string ConfigurationFilePath { get; set; } + + [Option('n', "name", HelpText = "Specifies names of the tasks and workflows to scaffold")] + public IEnumerable Names { get; set; } } } From 266d2f1a632117b825b8e86a19e26ab349c2e601 Mon Sep 17 00:00:00 2001 From: "bojan.malinic" Date: Fri, 2 Sep 2022 13:33:27 +0200 Subject: [PATCH 02/20] Pass options to scaffolding config --- src/ConductorSharp.Toolkit/Program.cs | 5 +++-- src/ConductorSharp.Toolkit/ScaffoldingConfig.cs | 1 + 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/src/ConductorSharp.Toolkit/Program.cs b/src/ConductorSharp.Toolkit/Program.cs index f25f91bb..99a2f006 100644 --- a/src/ConductorSharp.Toolkit/Program.cs +++ b/src/ConductorSharp.Toolkit/Program.cs @@ -61,7 +61,7 @@ private static async Task RunToolkit(ToolkitOptions options) if (!ValidateConfiguration(config)) return; - var container = BuildContainer(config); + var container = BuildContainer(config, options); var commandRegistry = container.Resolve(); // Currently only scaffolding is supported var command = commandRegistry.Get("scaffold"); @@ -104,7 +104,7 @@ private static bool ValidateConfiguration(Configuration config) return validConfiguration; } - private static IContainer BuildContainer(Configuration config) + private static IContainer BuildContainer(Configuration config, ToolkitOptions options) { var serviceCollection = new ServiceCollection(); @@ -118,6 +118,7 @@ private static IContainer BuildContainer(Configuration config) scaffoldingConfig.BaseUrl = config.BaseUrl; scaffoldingConfig.BaseNamespace = config.Namespace; scaffoldingConfig.Destination = config.Destination; + scaffoldingConfig.Names = options.Names.ToArray(); }); builder.Populate(serviceCollection); diff --git a/src/ConductorSharp.Toolkit/ScaffoldingConfig.cs b/src/ConductorSharp.Toolkit/ScaffoldingConfig.cs index 3cc20542..a624385c 100644 --- a/src/ConductorSharp.Toolkit/ScaffoldingConfig.cs +++ b/src/ConductorSharp.Toolkit/ScaffoldingConfig.cs @@ -7,5 +7,6 @@ public class ScaffoldingConfig public string BaseUrl { get; set; } public bool Dryrun { get; set; } public string Destination { get; set; } + public string[] Names { get; set; } } } From e82f26758e54c080451f00ba0273b48074f31a13 Mon Sep 17 00:00:00 2001 From: "bojan.malinic" Date: Fri, 2 Sep 2022 14:21:35 +0200 Subject: [PATCH 03/20] Add filter classes --- src/ConductorSharp.Toolkit/Filters/ITaskFilter.cs | 9 +++++++++ .../Filters/IWorkflowFilter.cs | 9 +++++++++ .../Filters/NameTaskFilter.cs | 15 +++++++++++++++ .../Filters/NameWorkflowFilter.cs | 15 +++++++++++++++ src/ConductorSharp.Toolkit/Util/RegexUtil.cs | 9 +++++++++ 5 files changed, 57 insertions(+) create mode 100644 src/ConductorSharp.Toolkit/Filters/ITaskFilter.cs create mode 100644 src/ConductorSharp.Toolkit/Filters/IWorkflowFilter.cs create mode 100644 src/ConductorSharp.Toolkit/Filters/NameTaskFilter.cs create mode 100644 src/ConductorSharp.Toolkit/Filters/NameWorkflowFilter.cs create mode 100644 src/ConductorSharp.Toolkit/Util/RegexUtil.cs diff --git a/src/ConductorSharp.Toolkit/Filters/ITaskFilter.cs b/src/ConductorSharp.Toolkit/Filters/ITaskFilter.cs new file mode 100644 index 00000000..6b562495 --- /dev/null +++ b/src/ConductorSharp.Toolkit/Filters/ITaskFilter.cs @@ -0,0 +1,9 @@ +using ConductorSharp.Client.Model.Common; + +namespace ConductorSharp.Toolkit.Filters +{ + public interface ITaskFilter + { + bool Test(TaskDefinition taskDefinition); + } +} diff --git a/src/ConductorSharp.Toolkit/Filters/IWorkflowFilter.cs b/src/ConductorSharp.Toolkit/Filters/IWorkflowFilter.cs new file mode 100644 index 00000000..6afdd7da --- /dev/null +++ b/src/ConductorSharp.Toolkit/Filters/IWorkflowFilter.cs @@ -0,0 +1,9 @@ +using ConductorSharp.Client.Model.Common; + +namespace ConductorSharp.Toolkit.Filters +{ + public interface IWorkflowFilter + { + bool Test(WorkflowDefinition workflowDefinition); + } +} diff --git a/src/ConductorSharp.Toolkit/Filters/NameTaskFilter.cs b/src/ConductorSharp.Toolkit/Filters/NameTaskFilter.cs new file mode 100644 index 00000000..4602df4a --- /dev/null +++ b/src/ConductorSharp.Toolkit/Filters/NameTaskFilter.cs @@ -0,0 +1,15 @@ +using ConductorSharp.Client.Model.Common; +using ConductorSharp.Toolkit.Util; +using System.Text.RegularExpressions; + +namespace ConductorSharp.Toolkit.Filters +{ + public class NameTaskFilter : ITaskFilter + { + private readonly Regex _regex; + + public NameTaskFilter(string name) => _regex = RegexUtil.CreateNameRegex(name); + + public bool Test(TaskDefinition taskDefinition) => _regex.IsMatch(taskDefinition.Name); + } +} diff --git a/src/ConductorSharp.Toolkit/Filters/NameWorkflowFilter.cs b/src/ConductorSharp.Toolkit/Filters/NameWorkflowFilter.cs new file mode 100644 index 00000000..2f780b36 --- /dev/null +++ b/src/ConductorSharp.Toolkit/Filters/NameWorkflowFilter.cs @@ -0,0 +1,15 @@ +using ConductorSharp.Client.Model.Common; +using ConductorSharp.Toolkit.Util; +using System.Text.RegularExpressions; + +namespace ConductorSharp.Toolkit.Filters +{ + public class NameWorkflowFilter : IWorkflowFilter + { + private readonly Regex _regex; + + public NameWorkflowFilter(string name) => _regex = RegexUtil.CreateNameRegex(name); + + public bool Test(WorkflowDefinition workflowDefinition) => _regex.IsMatch(workflowDefinition.Name); + } +} diff --git a/src/ConductorSharp.Toolkit/Util/RegexUtil.cs b/src/ConductorSharp.Toolkit/Util/RegexUtil.cs new file mode 100644 index 00000000..8e17af91 --- /dev/null +++ b/src/ConductorSharp.Toolkit/Util/RegexUtil.cs @@ -0,0 +1,9 @@ +using System.Text.RegularExpressions; + +namespace ConductorSharp.Toolkit.Util +{ + public static class RegexUtil + { + public static Regex CreateNameRegex(string name) => new($"^{Regex.Escape(name).Replace("%", ".*")}$", RegexOptions.Compiled); + } +} From 0a7565bb3ca1261446f979700783901954c73e27 Mon Sep 17 00:00:00 2001 From: "bojan.malinic" Date: Fri, 2 Sep 2022 14:44:14 +0200 Subject: [PATCH 04/20] Implement filtering --- .../Service/ScaffoldingService.cs | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/src/ConductorSharp.Toolkit/Service/ScaffoldingService.cs b/src/ConductorSharp.Toolkit/Service/ScaffoldingService.cs index 36240c95..1995bae3 100644 --- a/src/ConductorSharp.Toolkit/Service/ScaffoldingService.cs +++ b/src/ConductorSharp.Toolkit/Service/ScaffoldingService.cs @@ -1,6 +1,7 @@ using ConductorSharp.Client.Model.Common; using ConductorSharp.Client.Service; using ConductorSharp.Engine.Util; +using ConductorSharp.Toolkit.Filters; using ConductorSharp.Toolkit.Util; using Microsoft.Extensions.Logging; using Microsoft.Extensions.Options; @@ -28,7 +29,11 @@ public ScaffoldingService(IMetadataService metadataService, IOptions _config.Names.Select(name => new NameTaskFilter(name)).ToArray(); + + private IWorkflowFilter[] CreateWorkflowFilters() => _config.Names.Select(name => new NameWorkflowFilter(name)).ToArray(); + + // If filter list is empty then all workflows/tasks are returned + + private IEnumerable FilterWorkflows(IEnumerable workflows, IWorkflowFilter[] filters) => + workflows.Where(wf => filters.All(filter => filter.Test(wf))); + + private IEnumerable FilterTasks(IEnumerable tasks, ITaskFilter[] filters) => + tasks.Where(task => filters.All(filter => filter.Test(task))); } } From 7a026a9fbec623d5e2202fdf699d016f5257e5a5 Mon Sep 17 00:00:00 2001 From: "bojan.malinic" Date: Fri, 2 Sep 2022 14:57:35 +0200 Subject: [PATCH 05/20] Add Owner filters --- .../Filters/OwnerAppTaskFilter.cs | 10 ++++++++++ .../Filters/OwnerAppWorkflowFilter.cs | 4 ++++ .../Filters/OwnerEmailTaskFilter.cs | 13 +++++++++++++ .../Filters/OwnerEmailWorkflowFilter.cs | 14 ++++++++++++++ 4 files changed, 41 insertions(+) create mode 100644 src/ConductorSharp.Toolkit/Filters/OwnerAppTaskFilter.cs create mode 100644 src/ConductorSharp.Toolkit/Filters/OwnerAppWorkflowFilter.cs create mode 100644 src/ConductorSharp.Toolkit/Filters/OwnerEmailTaskFilter.cs create mode 100644 src/ConductorSharp.Toolkit/Filters/OwnerEmailWorkflowFilter.cs diff --git a/src/ConductorSharp.Toolkit/Filters/OwnerAppTaskFilter.cs b/src/ConductorSharp.Toolkit/Filters/OwnerAppTaskFilter.cs new file mode 100644 index 00000000..bb24d7fe --- /dev/null +++ b/src/ConductorSharp.Toolkit/Filters/OwnerAppTaskFilter.cs @@ -0,0 +1,10 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace ConductorSharp.Toolkit.Filters +{ + internal class OwnerAppTaskFilter { } +} diff --git a/src/ConductorSharp.Toolkit/Filters/OwnerAppWorkflowFilter.cs b/src/ConductorSharp.Toolkit/Filters/OwnerAppWorkflowFilter.cs new file mode 100644 index 00000000..6f8f7474 --- /dev/null +++ b/src/ConductorSharp.Toolkit/Filters/OwnerAppWorkflowFilter.cs @@ -0,0 +1,4 @@ +namespace ConductorSharp.Toolkit.Filters +{ + public class OwnerAppWorkflowFilter { } +} diff --git a/src/ConductorSharp.Toolkit/Filters/OwnerEmailTaskFilter.cs b/src/ConductorSharp.Toolkit/Filters/OwnerEmailTaskFilter.cs new file mode 100644 index 00000000..c9251be2 --- /dev/null +++ b/src/ConductorSharp.Toolkit/Filters/OwnerEmailTaskFilter.cs @@ -0,0 +1,13 @@ +using ConductorSharp.Client.Model.Common; + +namespace ConductorSharp.Toolkit.Filters +{ + public class OwnerEmailTaskFilter : ITaskFilter + { + private readonly string _ownerEmail; + + public OwnerEmailTaskFilter(string ownerEmail) => _ownerEmail = ownerEmail; + + public bool Test(TaskDefinition taskDefinition) => taskDefinition.Name != null && taskDefinition.Name == _ownerEmail; + } +} diff --git a/src/ConductorSharp.Toolkit/Filters/OwnerEmailWorkflowFilter.cs b/src/ConductorSharp.Toolkit/Filters/OwnerEmailWorkflowFilter.cs new file mode 100644 index 00000000..482cfcd7 --- /dev/null +++ b/src/ConductorSharp.Toolkit/Filters/OwnerEmailWorkflowFilter.cs @@ -0,0 +1,14 @@ +using ConductorSharp.Client.Model.Common; + +namespace ConductorSharp.Toolkit.Filters +{ + public class OwnerEmailWorkflowFilter : IWorkflowFilter + { + private readonly string _ownerEmail; + + public OwnerEmailWorkflowFilter(string ownerEmail) => _ownerEmail = ownerEmail; + + public bool Test(WorkflowDefinition workflowDefinition) => + workflowDefinition.OwnerEmail != null || workflowDefinition.OwnerEmail == _ownerEmail; + } +} From 7bf541d669cac0f38a967f0770c0b50560434691 Mon Sep 17 00:00:00 2001 From: "bojan.malinic" Date: Mon, 5 Sep 2022 10:05:05 +0200 Subject: [PATCH 06/20] Delete task filters --- .../Filters/OwnerAppTaskFilter.cs | 10 ---------- .../Filters/OwnerEmailTaskFilter.cs | 13 ------------- 2 files changed, 23 deletions(-) delete mode 100644 src/ConductorSharp.Toolkit/Filters/OwnerAppTaskFilter.cs delete mode 100644 src/ConductorSharp.Toolkit/Filters/OwnerEmailTaskFilter.cs diff --git a/src/ConductorSharp.Toolkit/Filters/OwnerAppTaskFilter.cs b/src/ConductorSharp.Toolkit/Filters/OwnerAppTaskFilter.cs deleted file mode 100644 index bb24d7fe..00000000 --- a/src/ConductorSharp.Toolkit/Filters/OwnerAppTaskFilter.cs +++ /dev/null @@ -1,10 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; - -namespace ConductorSharp.Toolkit.Filters -{ - internal class OwnerAppTaskFilter { } -} diff --git a/src/ConductorSharp.Toolkit/Filters/OwnerEmailTaskFilter.cs b/src/ConductorSharp.Toolkit/Filters/OwnerEmailTaskFilter.cs deleted file mode 100644 index c9251be2..00000000 --- a/src/ConductorSharp.Toolkit/Filters/OwnerEmailTaskFilter.cs +++ /dev/null @@ -1,13 +0,0 @@ -using ConductorSharp.Client.Model.Common; - -namespace ConductorSharp.Toolkit.Filters -{ - public class OwnerEmailTaskFilter : ITaskFilter - { - private readonly string _ownerEmail; - - public OwnerEmailTaskFilter(string ownerEmail) => _ownerEmail = ownerEmail; - - public bool Test(TaskDefinition taskDefinition) => taskDefinition.Name != null && taskDefinition.Name == _ownerEmail; - } -} From 22936538c1f3e729278d81d21d1978acc033fd2c Mon Sep 17 00:00:00 2001 From: "bojan.malinic" Date: Mon, 5 Sep 2022 10:06:33 +0200 Subject: [PATCH 07/20] Rename methods --- src/ConductorSharp.Toolkit/Service/ScaffoldingService.cs | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/ConductorSharp.Toolkit/Service/ScaffoldingService.cs b/src/ConductorSharp.Toolkit/Service/ScaffoldingService.cs index 1995bae3..b487c3f5 100644 --- a/src/ConductorSharp.Toolkit/Service/ScaffoldingService.cs +++ b/src/ConductorSharp.Toolkit/Service/ScaffoldingService.cs @@ -33,7 +33,7 @@ public async Task Scaffold() var workflowFilters = CreateWorkflowFilters(); var workflowDefinitions = await _metadataService.GetAllWorkflowDefinitions(); - workflowDefinitions = FilterWorkflows(workflowDefinitions, workflowFilters).ToArray(); + workflowDefinitions = Filter(workflowDefinitions, workflowFilters).ToArray(); var workflowDirectory = Path.Combine(_config.Destination, "Workflows"); Directory.CreateDirectory(workflowDirectory); foreach (var workflowDefinition in workflowDefinitions) @@ -48,7 +48,7 @@ public async Task Scaffold() } var taskDefinitions = await _metadataService.GetAllTaskDefinitions(); - taskDefinitions = FilterTasks(taskDefinitions, taskFilters).ToArray(); + taskDefinitions = Filter(taskDefinitions, taskFilters).ToArray(); var tasksDirectory = Path.Combine(_config.Destination, "Tasks"); Directory.CreateDirectory(tasksDirectory); foreach (var taskDefinition in taskDefinitions) @@ -253,10 +253,10 @@ private void DefinePropertyParams(TaskModelGenerator.PropertyData propData, stri // If filter list is empty then all workflows/tasks are returned - private IEnumerable FilterWorkflows(IEnumerable workflows, IWorkflowFilter[] filters) => + private IEnumerable Filter(IEnumerable workflows, IWorkflowFilter[] filters) => workflows.Where(wf => filters.All(filter => filter.Test(wf))); - private IEnumerable FilterTasks(IEnumerable tasks, ITaskFilter[] filters) => + private IEnumerable Filter(IEnumerable tasks, ITaskFilter[] filters) => tasks.Where(task => filters.All(filter => filter.Test(task))); } } From 74fc3bf69066faf250a02a7416abd0bca9b283ea Mon Sep 17 00:00:00 2001 From: "bojan.malinic" Date: Mon, 5 Sep 2022 12:53:30 +0200 Subject: [PATCH 08/20] Implement owner app and owner email workflow filters --- .../Filters/OwnerAppWorkflowFilter.cs | 13 +++++++++++-- .../Filters/OwnerEmailWorkflowFilter.cs | 2 +- 2 files changed, 12 insertions(+), 3 deletions(-) diff --git a/src/ConductorSharp.Toolkit/Filters/OwnerAppWorkflowFilter.cs b/src/ConductorSharp.Toolkit/Filters/OwnerAppWorkflowFilter.cs index 6f8f7474..31aad0ab 100644 --- a/src/ConductorSharp.Toolkit/Filters/OwnerAppWorkflowFilter.cs +++ b/src/ConductorSharp.Toolkit/Filters/OwnerAppWorkflowFilter.cs @@ -1,4 +1,13 @@ -namespace ConductorSharp.Toolkit.Filters +using ConductorSharp.Client.Model.Common; + +namespace ConductorSharp.Toolkit.Filters { - public class OwnerAppWorkflowFilter { } + public class OwnerAppWorkflowFilter : IWorkflowFilter + { + private readonly string _ownerApp; + + public OwnerAppWorkflowFilter(string ownerApp) => _ownerApp = ownerApp; + + public bool Test(WorkflowDefinition workflowDefinition) => workflowDefinition.OwnerApp != null && workflowDefinition.OwnerApp == _ownerApp; + } } diff --git a/src/ConductorSharp.Toolkit/Filters/OwnerEmailWorkflowFilter.cs b/src/ConductorSharp.Toolkit/Filters/OwnerEmailWorkflowFilter.cs index 482cfcd7..2a608c4e 100644 --- a/src/ConductorSharp.Toolkit/Filters/OwnerEmailWorkflowFilter.cs +++ b/src/ConductorSharp.Toolkit/Filters/OwnerEmailWorkflowFilter.cs @@ -9,6 +9,6 @@ public class OwnerEmailWorkflowFilter : IWorkflowFilter public OwnerEmailWorkflowFilter(string ownerEmail) => _ownerEmail = ownerEmail; public bool Test(WorkflowDefinition workflowDefinition) => - workflowDefinition.OwnerEmail != null || workflowDefinition.OwnerEmail == _ownerEmail; + workflowDefinition.OwnerEmail != null && workflowDefinition.OwnerEmail == _ownerEmail; } } From 0b22d95de30d4a6478baf527c0f22dd63fd0caa0 Mon Sep 17 00:00:00 2001 From: "bojan.malinic" Date: Tue, 6 Sep 2022 09:41:23 +0200 Subject: [PATCH 09/20] Update workflow and task name filters --- .../Filters/NameTaskFilter.cs | 6 +++--- .../Filters/NameWorkflowFilter.cs | 6 +++--- .../Service/ScaffoldingService.cs | 18 ++++++++++++++++-- 3 files changed, 22 insertions(+), 8 deletions(-) diff --git a/src/ConductorSharp.Toolkit/Filters/NameTaskFilter.cs b/src/ConductorSharp.Toolkit/Filters/NameTaskFilter.cs index 4602df4a..a04bd415 100644 --- a/src/ConductorSharp.Toolkit/Filters/NameTaskFilter.cs +++ b/src/ConductorSharp.Toolkit/Filters/NameTaskFilter.cs @@ -6,10 +6,10 @@ namespace ConductorSharp.Toolkit.Filters { public class NameTaskFilter : ITaskFilter { - private readonly Regex _regex; + private readonly Regex[] _regexes; - public NameTaskFilter(string name) => _regex = RegexUtil.CreateNameRegex(name); + public NameTaskFilter(IEnumerable names) => _regexes = names.Select(name => RegexUtil.CreateNameRegex(name)).ToArray(); - public bool Test(TaskDefinition taskDefinition) => _regex.IsMatch(taskDefinition.Name); + public bool Test(TaskDefinition taskDefinition) => _regexes.Any(regex => regex.IsMatch(taskDefinition.Name)); } } diff --git a/src/ConductorSharp.Toolkit/Filters/NameWorkflowFilter.cs b/src/ConductorSharp.Toolkit/Filters/NameWorkflowFilter.cs index 2f780b36..fe9189e6 100644 --- a/src/ConductorSharp.Toolkit/Filters/NameWorkflowFilter.cs +++ b/src/ConductorSharp.Toolkit/Filters/NameWorkflowFilter.cs @@ -6,10 +6,10 @@ namespace ConductorSharp.Toolkit.Filters { public class NameWorkflowFilter : IWorkflowFilter { - private readonly Regex _regex; + private readonly Regex[] _regexes; - public NameWorkflowFilter(string name) => _regex = RegexUtil.CreateNameRegex(name); + public NameWorkflowFilter(IEnumerable names) => _regexes = names.Select(name => RegexUtil.CreateNameRegex(name)).ToArray(); - public bool Test(WorkflowDefinition workflowDefinition) => _regex.IsMatch(workflowDefinition.Name); + public bool Test(WorkflowDefinition workflowDefinition) => _regexes.Any(regex => regex.IsMatch(workflowDefinition.Name)); } } diff --git a/src/ConductorSharp.Toolkit/Service/ScaffoldingService.cs b/src/ConductorSharp.Toolkit/Service/ScaffoldingService.cs index b487c3f5..80a20ebe 100644 --- a/src/ConductorSharp.Toolkit/Service/ScaffoldingService.cs +++ b/src/ConductorSharp.Toolkit/Service/ScaffoldingService.cs @@ -247,9 +247,23 @@ private void DefinePropertyParams(TaskModelGenerator.PropertyData propData, stri return (modelGenerator.Build(), name); } - private ITaskFilter[] CreateTaskFilters() => _config.Names.Select(name => new NameTaskFilter(name)).ToArray(); + private ITaskFilter[] CreateTaskFilters() + { + var taskFilters = new List(); + if (_config.Names.Length != 0) + taskFilters.Add(new NameTaskFilter(_config.Names)); + + return taskFilters.ToArray(); + } - private IWorkflowFilter[] CreateWorkflowFilters() => _config.Names.Select(name => new NameWorkflowFilter(name)).ToArray(); + private IWorkflowFilter[] CreateWorkflowFilters() + { + var workflowFilters = new List(); + if (_config.Names.Length != 0) + workflowFilters.Add(new NameWorkflowFilter(_config.Names)); + + return workflowFilters.ToArray(); + } // If filter list is empty then all workflows/tasks are returned From a6c939bf16db3f0520c78253c94d68f4c45db450 Mon Sep 17 00:00:00 2001 From: "bojan.malinic" Date: Tue, 6 Sep 2022 10:03:41 +0200 Subject: [PATCH 10/20] Rename property --- src/ConductorSharp.Toolkit/Models/ToolkitOptions.cs | 2 +- src/ConductorSharp.Toolkit/Program.cs | 2 +- src/ConductorSharp.Toolkit/ScaffoldingConfig.cs | 2 +- src/ConductorSharp.Toolkit/Service/ScaffoldingService.cs | 8 ++++---- 4 files changed, 7 insertions(+), 7 deletions(-) diff --git a/src/ConductorSharp.Toolkit/Models/ToolkitOptions.cs b/src/ConductorSharp.Toolkit/Models/ToolkitOptions.cs index 029a6d88..eb0a7f6d 100644 --- a/src/ConductorSharp.Toolkit/Models/ToolkitOptions.cs +++ b/src/ConductorSharp.Toolkit/Models/ToolkitOptions.cs @@ -8,6 +8,6 @@ public class ToolkitOptions public string ConfigurationFilePath { get; set; } [Option('n', "name", HelpText = "Specifies names of the tasks and workflows to scaffold")] - public IEnumerable Names { get; set; } + public IEnumerable NameFilters { get; set; } } } diff --git a/src/ConductorSharp.Toolkit/Program.cs b/src/ConductorSharp.Toolkit/Program.cs index 99a2f006..e7a75a03 100644 --- a/src/ConductorSharp.Toolkit/Program.cs +++ b/src/ConductorSharp.Toolkit/Program.cs @@ -118,7 +118,7 @@ private static IContainer BuildContainer(Configuration config, ToolkitOptions op scaffoldingConfig.BaseUrl = config.BaseUrl; scaffoldingConfig.BaseNamespace = config.Namespace; scaffoldingConfig.Destination = config.Destination; - scaffoldingConfig.Names = options.Names.ToArray(); + scaffoldingConfig.NameFilters = options.NameFilters.ToArray(); }); builder.Populate(serviceCollection); diff --git a/src/ConductorSharp.Toolkit/ScaffoldingConfig.cs b/src/ConductorSharp.Toolkit/ScaffoldingConfig.cs index a624385c..3a240d07 100644 --- a/src/ConductorSharp.Toolkit/ScaffoldingConfig.cs +++ b/src/ConductorSharp.Toolkit/ScaffoldingConfig.cs @@ -7,6 +7,6 @@ public class ScaffoldingConfig public string BaseUrl { get; set; } public bool Dryrun { get; set; } public string Destination { get; set; } - public string[] Names { get; set; } + public string[] NameFilters { get; set; } } } diff --git a/src/ConductorSharp.Toolkit/Service/ScaffoldingService.cs b/src/ConductorSharp.Toolkit/Service/ScaffoldingService.cs index 80a20ebe..d718348f 100644 --- a/src/ConductorSharp.Toolkit/Service/ScaffoldingService.cs +++ b/src/ConductorSharp.Toolkit/Service/ScaffoldingService.cs @@ -250,8 +250,8 @@ private void DefinePropertyParams(TaskModelGenerator.PropertyData propData, stri private ITaskFilter[] CreateTaskFilters() { var taskFilters = new List(); - if (_config.Names.Length != 0) - taskFilters.Add(new NameTaskFilter(_config.Names)); + if (_config.NameFilters.Length != 0) + taskFilters.Add(new NameTaskFilter(_config.NameFilters)); return taskFilters.ToArray(); } @@ -259,8 +259,8 @@ private ITaskFilter[] CreateTaskFilters() private IWorkflowFilter[] CreateWorkflowFilters() { var workflowFilters = new List(); - if (_config.Names.Length != 0) - workflowFilters.Add(new NameWorkflowFilter(_config.Names)); + if (_config.NameFilters.Length != 0) + workflowFilters.Add(new NameWorkflowFilter(_config.NameFilters)); return workflowFilters.ToArray(); } From 66d3262dfb7a8cda827cd3ce839ea7351388b800 Mon Sep 17 00:00:00 2001 From: "bojan.malinic" Date: Tue, 6 Sep 2022 10:11:26 +0200 Subject: [PATCH 11/20] Add OwnerApp and OwnerEmail filters --- .../Filters/OwnerAppWorkflowFilter.cs | 7 ++++--- .../Filters/OwnerEmailWorkflowFilter.cs | 6 +++--- src/ConductorSharp.Toolkit/Models/ToolkitOptions.cs | 6 ++++++ src/ConductorSharp.Toolkit/Program.cs | 2 ++ src/ConductorSharp.Toolkit/ScaffoldingConfig.cs | 2 ++ 5 files changed, 17 insertions(+), 6 deletions(-) diff --git a/src/ConductorSharp.Toolkit/Filters/OwnerAppWorkflowFilter.cs b/src/ConductorSharp.Toolkit/Filters/OwnerAppWorkflowFilter.cs index 31aad0ab..84f9adad 100644 --- a/src/ConductorSharp.Toolkit/Filters/OwnerAppWorkflowFilter.cs +++ b/src/ConductorSharp.Toolkit/Filters/OwnerAppWorkflowFilter.cs @@ -4,10 +4,11 @@ namespace ConductorSharp.Toolkit.Filters { public class OwnerAppWorkflowFilter : IWorkflowFilter { - private readonly string _ownerApp; + private readonly string[] _ownerApps; - public OwnerAppWorkflowFilter(string ownerApp) => _ownerApp = ownerApp; + public OwnerAppWorkflowFilter(IEnumerable ownerApps) => _ownerApps = ownerApps.ToArray(); - public bool Test(WorkflowDefinition workflowDefinition) => workflowDefinition.OwnerApp != null && workflowDefinition.OwnerApp == _ownerApp; + public bool Test(WorkflowDefinition workflowDefinition) => + workflowDefinition.OwnerApp != null && _ownerApps.Any(app => app == workflowDefinition.OwnerApp); } } diff --git a/src/ConductorSharp.Toolkit/Filters/OwnerEmailWorkflowFilter.cs b/src/ConductorSharp.Toolkit/Filters/OwnerEmailWorkflowFilter.cs index 2a608c4e..35c4d153 100644 --- a/src/ConductorSharp.Toolkit/Filters/OwnerEmailWorkflowFilter.cs +++ b/src/ConductorSharp.Toolkit/Filters/OwnerEmailWorkflowFilter.cs @@ -4,11 +4,11 @@ namespace ConductorSharp.Toolkit.Filters { public class OwnerEmailWorkflowFilter : IWorkflowFilter { - private readonly string _ownerEmail; + private readonly string[] _ownerEmails; - public OwnerEmailWorkflowFilter(string ownerEmail) => _ownerEmail = ownerEmail; + public OwnerEmailWorkflowFilter(IEnumerable ownerEmails) => _ownerEmails = ownerEmails.ToArray(); public bool Test(WorkflowDefinition workflowDefinition) => - workflowDefinition.OwnerEmail != null && workflowDefinition.OwnerEmail == _ownerEmail; + workflowDefinition.OwnerEmail != null && _ownerEmails.Any(email => email == workflowDefinition.OwnerEmail); } } diff --git a/src/ConductorSharp.Toolkit/Models/ToolkitOptions.cs b/src/ConductorSharp.Toolkit/Models/ToolkitOptions.cs index eb0a7f6d..adde7dd0 100644 --- a/src/ConductorSharp.Toolkit/Models/ToolkitOptions.cs +++ b/src/ConductorSharp.Toolkit/Models/ToolkitOptions.cs @@ -9,5 +9,11 @@ public class ToolkitOptions [Option('n', "name", HelpText = "Specifies names of the tasks and workflows to scaffold")] public IEnumerable NameFilters { get; set; } + + [Option('a', "app", HelpText = "Specifies owner apps of the tasks and workflows to scaffold")] + public IEnumerable OwnerAppFilters { get; set; } + + [Option('e', "email", HelpText = "Specifies owner emails of the tasks and workflows to scaffold")] + public IEnumerable OwnerEmailFilters { get; set; } } } diff --git a/src/ConductorSharp.Toolkit/Program.cs b/src/ConductorSharp.Toolkit/Program.cs index e7a75a03..446c5229 100644 --- a/src/ConductorSharp.Toolkit/Program.cs +++ b/src/ConductorSharp.Toolkit/Program.cs @@ -119,6 +119,8 @@ private static IContainer BuildContainer(Configuration config, ToolkitOptions op scaffoldingConfig.BaseNamespace = config.Namespace; scaffoldingConfig.Destination = config.Destination; scaffoldingConfig.NameFilters = options.NameFilters.ToArray(); + scaffoldingConfig.OwnerAppFilters = options.OwnerAppFilters.ToArray(); + scaffoldingConfig.OwnerEmailFilters = options.OwnerEmailFilters.ToArray(); }); builder.Populate(serviceCollection); diff --git a/src/ConductorSharp.Toolkit/ScaffoldingConfig.cs b/src/ConductorSharp.Toolkit/ScaffoldingConfig.cs index 3a240d07..e2f48a65 100644 --- a/src/ConductorSharp.Toolkit/ScaffoldingConfig.cs +++ b/src/ConductorSharp.Toolkit/ScaffoldingConfig.cs @@ -8,5 +8,7 @@ public class ScaffoldingConfig public bool Dryrun { get; set; } public string Destination { get; set; } public string[] NameFilters { get; set; } + public string[] OwnerAppFilters { get; set; } + public string[] OwnerEmailFilters { get; set; } } } From 944aea83e4d295af0324bc05bf3f41b6b4b603ee Mon Sep 17 00:00:00 2001 From: "bojan.malinic" Date: Tue, 6 Sep 2022 10:14:50 +0200 Subject: [PATCH 12/20] Update help text --- src/ConductorSharp.Toolkit/Models/ToolkitOptions.cs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/ConductorSharp.Toolkit/Models/ToolkitOptions.cs b/src/ConductorSharp.Toolkit/Models/ToolkitOptions.cs index adde7dd0..aa879d62 100644 --- a/src/ConductorSharp.Toolkit/Models/ToolkitOptions.cs +++ b/src/ConductorSharp.Toolkit/Models/ToolkitOptions.cs @@ -10,10 +10,10 @@ public class ToolkitOptions [Option('n', "name", HelpText = "Specifies names of the tasks and workflows to scaffold")] public IEnumerable NameFilters { get; set; } - [Option('a', "app", HelpText = "Specifies owner apps of the tasks and workflows to scaffold")] + [Option('a', "app", HelpText = "Specifies owner apps of the workflows to scaffold")] public IEnumerable OwnerAppFilters { get; set; } - [Option('e', "email", HelpText = "Specifies owner emails of the tasks and workflows to scaffold")] + [Option('e', "email", HelpText = "Specifies owner emails of the workflows to scaffold")] public IEnumerable OwnerEmailFilters { get; set; } } } From 159e04595ca45380dfafd914aecc529375209b9c Mon Sep 17 00:00:00 2001 From: "bojan.malinic" Date: Tue, 6 Sep 2022 10:23:20 +0200 Subject: [PATCH 13/20] Update help text --- src/ConductorSharp.Toolkit/Models/ToolkitOptions.cs | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/ConductorSharp.Toolkit/Models/ToolkitOptions.cs b/src/ConductorSharp.Toolkit/Models/ToolkitOptions.cs index aa879d62..4a8ff75b 100644 --- a/src/ConductorSharp.Toolkit/Models/ToolkitOptions.cs +++ b/src/ConductorSharp.Toolkit/Models/ToolkitOptions.cs @@ -7,13 +7,13 @@ public class ToolkitOptions [Option('f', "file", HelpText = "Configuration file", Default = "conductorsharp.yaml")] public string ConfigurationFilePath { get; set; } - [Option('n', "name", HelpText = "Specifies names of the tasks and workflows to scaffold")] + [Option('n', "name", HelpText = "Specifies names of the tasks and workflows to scaffold (workflow and task filter)")] public IEnumerable NameFilters { get; set; } - [Option('a', "app", HelpText = "Specifies owner apps of the workflows to scaffold")] + [Option('a', "app", HelpText = "Specifies owner apps of the workflows to scaffold (workflow filter)")] public IEnumerable OwnerAppFilters { get; set; } - [Option('e', "email", HelpText = "Specifies owner emails of the workflows to scaffold")] + [Option('e', "email", HelpText = "Specifies owner emails of the workflows to scaffold (workflow filter)")] public IEnumerable OwnerEmailFilters { get; set; } } } From 02de508383aa4a2cc449961b78918d26d502aef5 Mon Sep 17 00:00:00 2001 From: "bojan.malinic" Date: Tue, 6 Sep 2022 10:23:47 +0200 Subject: [PATCH 14/20] Create owner app and owner email task filters --- src/ConductorSharp.Toolkit/Service/ScaffoldingService.cs | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/ConductorSharp.Toolkit/Service/ScaffoldingService.cs b/src/ConductorSharp.Toolkit/Service/ScaffoldingService.cs index d718348f..fa1d21cb 100644 --- a/src/ConductorSharp.Toolkit/Service/ScaffoldingService.cs +++ b/src/ConductorSharp.Toolkit/Service/ScaffoldingService.cs @@ -261,6 +261,10 @@ private IWorkflowFilter[] CreateWorkflowFilters() var workflowFilters = new List(); if (_config.NameFilters.Length != 0) workflowFilters.Add(new NameWorkflowFilter(_config.NameFilters)); + if (_config.OwnerAppFilters.Length != 0) + workflowFilters.Add(new OwnerAppWorkflowFilter(_config.OwnerAppFilters)); + if (_config.OwnerEmailFilters.Length != 0) + workflowFilters.Add(new OwnerEmailWorkflowFilter(_config.OwnerEmailFilters)); return workflowFilters.ToArray(); } From 304a3d6f0b2447d2bae06db0369b7cbdf66528b7 Mon Sep 17 00:00:00 2001 From: "bojan.malinic" Date: Tue, 6 Sep 2022 10:29:05 +0200 Subject: [PATCH 15/20] Update help text --- src/ConductorSharp.Toolkit/Models/ToolkitOptions.cs | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/ConductorSharp.Toolkit/Models/ToolkitOptions.cs b/src/ConductorSharp.Toolkit/Models/ToolkitOptions.cs index 4a8ff75b..adde7dd0 100644 --- a/src/ConductorSharp.Toolkit/Models/ToolkitOptions.cs +++ b/src/ConductorSharp.Toolkit/Models/ToolkitOptions.cs @@ -7,13 +7,13 @@ public class ToolkitOptions [Option('f', "file", HelpText = "Configuration file", Default = "conductorsharp.yaml")] public string ConfigurationFilePath { get; set; } - [Option('n', "name", HelpText = "Specifies names of the tasks and workflows to scaffold (workflow and task filter)")] + [Option('n', "name", HelpText = "Specifies names of the tasks and workflows to scaffold")] public IEnumerable NameFilters { get; set; } - [Option('a', "app", HelpText = "Specifies owner apps of the workflows to scaffold (workflow filter)")] + [Option('a', "app", HelpText = "Specifies owner apps of the tasks and workflows to scaffold")] public IEnumerable OwnerAppFilters { get; set; } - [Option('e', "email", HelpText = "Specifies owner emails of the workflows to scaffold (workflow filter)")] + [Option('e', "email", HelpText = "Specifies owner emails of the tasks and workflows to scaffold")] public IEnumerable OwnerEmailFilters { get; set; } } } From 808e1c057f9c6f9750f1853bc67d9bf91c3f4a5f Mon Sep 17 00:00:00 2001 From: "bojan.malinic" Date: Tue, 6 Sep 2022 10:29:29 +0200 Subject: [PATCH 16/20] Add OwnerApp and OwnerEmail task filters --- .../Filters/OwnerAppTaskFilter.cs | 13 +++++++++++++ .../Filters/OwnerEmailTaskFilter.cs | 14 ++++++++++++++ .../Service/ScaffoldingService.cs | 4 ++++ 3 files changed, 31 insertions(+) create mode 100644 src/ConductorSharp.Toolkit/Filters/OwnerAppTaskFilter.cs create mode 100644 src/ConductorSharp.Toolkit/Filters/OwnerEmailTaskFilter.cs diff --git a/src/ConductorSharp.Toolkit/Filters/OwnerAppTaskFilter.cs b/src/ConductorSharp.Toolkit/Filters/OwnerAppTaskFilter.cs new file mode 100644 index 00000000..7096ef30 --- /dev/null +++ b/src/ConductorSharp.Toolkit/Filters/OwnerAppTaskFilter.cs @@ -0,0 +1,13 @@ +using ConductorSharp.Client.Model.Common; + +namespace ConductorSharp.Toolkit.Filters +{ + public class OwnerAppTaskFilter : ITaskFilter + { + private readonly string[] _ownerApps; + + public OwnerAppTaskFilter(IEnumerable ownerApps) => _ownerApps = ownerApps.ToArray(); + + public bool Test(TaskDefinition taskDefinition) => taskDefinition.OwnerApp != null && _ownerApps.Any(app => app == taskDefinition.OwnerApp); + } +} diff --git a/src/ConductorSharp.Toolkit/Filters/OwnerEmailTaskFilter.cs b/src/ConductorSharp.Toolkit/Filters/OwnerEmailTaskFilter.cs new file mode 100644 index 00000000..f43f99be --- /dev/null +++ b/src/ConductorSharp.Toolkit/Filters/OwnerEmailTaskFilter.cs @@ -0,0 +1,14 @@ +using ConductorSharp.Client.Model.Common; + +namespace ConductorSharp.Toolkit.Filters +{ + public class OwnerEmailTaskFilter : ITaskFilter + { + private readonly string[] _ownerEmails; + + public OwnerEmailTaskFilter(IEnumerable ownerEmails) => _ownerEmails = ownerEmails.ToArray(); + + public bool Test(TaskDefinition taskDefinition) => + taskDefinition.OwnerEmail != null && _ownerEmails.Any(email => email == taskDefinition.OwnerEmail); + } +} diff --git a/src/ConductorSharp.Toolkit/Service/ScaffoldingService.cs b/src/ConductorSharp.Toolkit/Service/ScaffoldingService.cs index fa1d21cb..c359b9c8 100644 --- a/src/ConductorSharp.Toolkit/Service/ScaffoldingService.cs +++ b/src/ConductorSharp.Toolkit/Service/ScaffoldingService.cs @@ -252,6 +252,10 @@ private ITaskFilter[] CreateTaskFilters() var taskFilters = new List(); if (_config.NameFilters.Length != 0) taskFilters.Add(new NameTaskFilter(_config.NameFilters)); + if (_config.OwnerAppFilters.Length != 0) + taskFilters.Add(new OwnerAppTaskFilter(_config.OwnerAppFilters)); + if (_config.OwnerEmailFilters.Length != 0) + taskFilters.Add(new OwnerEmailTaskFilter(_config.OwnerEmailFilters)); return taskFilters.ToArray(); } From 6b1ab121f30917328fe2aecfcc67046e68f4a08a Mon Sep 17 00:00:00 2001 From: "bojan.malinic" Date: Tue, 6 Sep 2022 10:56:11 +0200 Subject: [PATCH 17/20] Add option for specifying whether we ignore workflows or tasks during scaffolding --- .../Models/ToolkitOptions.cs | 6 +++ src/ConductorSharp.Toolkit/Program.cs | 2 + .../ScaffoldingConfig.cs | 2 + .../Service/ScaffoldingService.cs | 46 +++++++++++-------- 4 files changed, 36 insertions(+), 20 deletions(-) diff --git a/src/ConductorSharp.Toolkit/Models/ToolkitOptions.cs b/src/ConductorSharp.Toolkit/Models/ToolkitOptions.cs index adde7dd0..4fb583ad 100644 --- a/src/ConductorSharp.Toolkit/Models/ToolkitOptions.cs +++ b/src/ConductorSharp.Toolkit/Models/ToolkitOptions.cs @@ -15,5 +15,11 @@ public class ToolkitOptions [Option('e', "email", HelpText = "Specifies owner emails of the tasks and workflows to scaffold")] public IEnumerable OwnerEmailFilters { get; set; } + + [Option("no-tasks", Default = false, SetName = "no-tasks")] + public bool IgnoreTasks { get; set; } + + [Option("no-workflows", Default = false, SetName = "no-workflows")] + public bool IgnoreWorkflows { get; set; } } } diff --git a/src/ConductorSharp.Toolkit/Program.cs b/src/ConductorSharp.Toolkit/Program.cs index 446c5229..6e1a019a 100644 --- a/src/ConductorSharp.Toolkit/Program.cs +++ b/src/ConductorSharp.Toolkit/Program.cs @@ -121,6 +121,8 @@ private static IContainer BuildContainer(Configuration config, ToolkitOptions op scaffoldingConfig.NameFilters = options.NameFilters.ToArray(); scaffoldingConfig.OwnerAppFilters = options.OwnerAppFilters.ToArray(); scaffoldingConfig.OwnerEmailFilters = options.OwnerEmailFilters.ToArray(); + scaffoldingConfig.IgnoreTasks = options.IgnoreTasks; + scaffoldingConfig.IgnoreWorkflows = options.IgnoreWorkflows; }); builder.Populate(serviceCollection); diff --git a/src/ConductorSharp.Toolkit/ScaffoldingConfig.cs b/src/ConductorSharp.Toolkit/ScaffoldingConfig.cs index e2f48a65..803ba1dc 100644 --- a/src/ConductorSharp.Toolkit/ScaffoldingConfig.cs +++ b/src/ConductorSharp.Toolkit/ScaffoldingConfig.cs @@ -10,5 +10,7 @@ public class ScaffoldingConfig public string[] NameFilters { get; set; } public string[] OwnerAppFilters { get; set; } public string[] OwnerEmailFilters { get; set; } + public bool IgnoreTasks { get; set; } + public bool IgnoreWorkflows { get; set; } } } diff --git a/src/ConductorSharp.Toolkit/Service/ScaffoldingService.cs b/src/ConductorSharp.Toolkit/Service/ScaffoldingService.cs index c359b9c8..40a0d921 100644 --- a/src/ConductorSharp.Toolkit/Service/ScaffoldingService.cs +++ b/src/ConductorSharp.Toolkit/Service/ScaffoldingService.cs @@ -32,33 +32,39 @@ public async Task Scaffold() var taskFilters = CreateTaskFilters(); var workflowFilters = CreateWorkflowFilters(); - var workflowDefinitions = await _metadataService.GetAllWorkflowDefinitions(); - workflowDefinitions = Filter(workflowDefinitions, workflowFilters).ToArray(); - var workflowDirectory = Path.Combine(_config.Destination, "Workflows"); - Directory.CreateDirectory(workflowDirectory); - foreach (var workflowDefinition in workflowDefinitions) + if (!_config.IgnoreWorkflows) { - (var contents, var modelClassName) = CreateWorkflowClass(workflowDefinition); - - if (contents != null) + var workflowDefinitions = await _metadataService.GetAllWorkflowDefinitions(); + workflowDefinitions = Filter(workflowDefinitions, workflowFilters).ToArray(); + var workflowDirectory = Path.Combine(_config.Destination, "Workflows"); + Directory.CreateDirectory(workflowDirectory); + foreach (var workflowDefinition in workflowDefinitions) { - var filePath = Path.Combine(workflowDirectory, $"{modelClassName}.scaff.cs"); - File.WriteAllText(filePath, contents); + (var contents, var modelClassName) = CreateWorkflowClass(workflowDefinition); + + if (contents != null) + { + var filePath = Path.Combine(workflowDirectory, $"{modelClassName}.scaff.cs"); + File.WriteAllText(filePath, contents); + } } } - var taskDefinitions = await _metadataService.GetAllTaskDefinitions(); - taskDefinitions = Filter(taskDefinitions, taskFilters).ToArray(); - var tasksDirectory = Path.Combine(_config.Destination, "Tasks"); - Directory.CreateDirectory(tasksDirectory); - foreach (var taskDefinition in taskDefinitions) + if (!_config.IgnoreTasks) { - (var contents, var modelClassName) = CreateTaskClass(taskDefinition); - - if (contents != null) + var taskDefinitions = await _metadataService.GetAllTaskDefinitions(); + taskDefinitions = Filter(taskDefinitions, taskFilters).ToArray(); + var tasksDirectory = Path.Combine(_config.Destination, "Tasks"); + Directory.CreateDirectory(tasksDirectory); + foreach (var taskDefinition in taskDefinitions) { - var filePath = Path.Combine(tasksDirectory, $"{modelClassName}.scaff.cs"); - File.WriteAllText(filePath, contents); + (var contents, var modelClassName) = CreateTaskClass(taskDefinition); + + if (contents != null) + { + var filePath = Path.Combine(tasksDirectory, $"{modelClassName}.scaff.cs"); + File.WriteAllText(filePath, contents); + } } } } From ea5651fda2ffb9908d65350618869eaf348db24f Mon Sep 17 00:00:00 2001 From: "bojan.malinic" Date: Wed, 7 Sep 2022 08:52:41 +0200 Subject: [PATCH 18/20] Add help text --- src/ConductorSharp.Toolkit/Models/ToolkitOptions.cs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/ConductorSharp.Toolkit/Models/ToolkitOptions.cs b/src/ConductorSharp.Toolkit/Models/ToolkitOptions.cs index 4fb583ad..277e2b1a 100644 --- a/src/ConductorSharp.Toolkit/Models/ToolkitOptions.cs +++ b/src/ConductorSharp.Toolkit/Models/ToolkitOptions.cs @@ -16,10 +16,10 @@ public class ToolkitOptions [Option('e', "email", HelpText = "Specifies owner emails of the tasks and workflows to scaffold")] public IEnumerable OwnerEmailFilters { get; set; } - [Option("no-tasks", Default = false, SetName = "no-tasks")] + [Option("no-tasks", Default = false, SetName = "no-tasks", HelpText = "Skip task scaffolding")] public bool IgnoreTasks { get; set; } - [Option("no-workflows", Default = false, SetName = "no-workflows")] + [Option("no-workflows", Default = false, SetName = "no-workflows", HelpText = "Skip workflow scaffolding")] public bool IgnoreWorkflows { get; set; } } } From 6eb0e49b8ce76e5e2e96ed7a79bf83da972ca216 Mon Sep 17 00:00:00 2001 From: "bojan.malinic" Date: Wed, 7 Sep 2022 09:10:41 +0200 Subject: [PATCH 19/20] Add dryrun option --- src/ConductorSharp.Toolkit/Models/ToolkitOptions.cs | 3 +++ src/ConductorSharp.Toolkit/Program.cs | 1 + src/ConductorSharp.Toolkit/ScaffoldingConfig.cs | 2 +- 3 files changed, 5 insertions(+), 1 deletion(-) diff --git a/src/ConductorSharp.Toolkit/Models/ToolkitOptions.cs b/src/ConductorSharp.Toolkit/Models/ToolkitOptions.cs index 277e2b1a..c1e9d824 100644 --- a/src/ConductorSharp.Toolkit/Models/ToolkitOptions.cs +++ b/src/ConductorSharp.Toolkit/Models/ToolkitOptions.cs @@ -21,5 +21,8 @@ public class ToolkitOptions [Option("no-workflows", Default = false, SetName = "no-workflows", HelpText = "Skip workflow scaffolding")] public bool IgnoreWorkflows { get; set; } + + [Option("dry-run", Default = false, HelpText = "Print which workflows would be scaffolded")] + public bool DryRun { get; set; } } } diff --git a/src/ConductorSharp.Toolkit/Program.cs b/src/ConductorSharp.Toolkit/Program.cs index 6e1a019a..c9b98954 100644 --- a/src/ConductorSharp.Toolkit/Program.cs +++ b/src/ConductorSharp.Toolkit/Program.cs @@ -123,6 +123,7 @@ private static IContainer BuildContainer(Configuration config, ToolkitOptions op scaffoldingConfig.OwnerEmailFilters = options.OwnerEmailFilters.ToArray(); scaffoldingConfig.IgnoreTasks = options.IgnoreTasks; scaffoldingConfig.IgnoreWorkflows = options.IgnoreWorkflows; + scaffoldingConfig.DryRun = options.DryRun; }); builder.Populate(serviceCollection); diff --git a/src/ConductorSharp.Toolkit/ScaffoldingConfig.cs b/src/ConductorSharp.Toolkit/ScaffoldingConfig.cs index 803ba1dc..565e96da 100644 --- a/src/ConductorSharp.Toolkit/ScaffoldingConfig.cs +++ b/src/ConductorSharp.Toolkit/ScaffoldingConfig.cs @@ -5,7 +5,7 @@ public class ScaffoldingConfig public string BaseNamespace { get; set; } public string ApiUrl { get; set; } public string BaseUrl { get; set; } - public bool Dryrun { get; set; } + public bool DryRun { get; set; } public string Destination { get; set; } public string[] NameFilters { get; set; } public string[] OwnerAppFilters { get; set; } From fe87d61f23e04ae21f2facc0c26c4e404570dfc2 Mon Sep 17 00:00:00 2001 From: "bojan.malinic" Date: Wed, 7 Sep 2022 09:11:30 +0200 Subject: [PATCH 20/20] Implement dryrun --- .../Service/ScaffoldingService.cs | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/src/ConductorSharp.Toolkit/Service/ScaffoldingService.cs b/src/ConductorSharp.Toolkit/Service/ScaffoldingService.cs index 40a0d921..d2debe82 100644 --- a/src/ConductorSharp.Toolkit/Service/ScaffoldingService.cs +++ b/src/ConductorSharp.Toolkit/Service/ScaffoldingService.cs @@ -40,9 +40,13 @@ public async Task Scaffold() Directory.CreateDirectory(workflowDirectory); foreach (var workflowDefinition in workflowDefinitions) { + Console.WriteLine($"Scaffolding workflow {workflowDefinition.Name}"); + if (_config.DryRun) + continue; + (var contents, var modelClassName) = CreateWorkflowClass(workflowDefinition); - if (contents != null) + if (contents != null && !_config.DryRun) { var filePath = Path.Combine(workflowDirectory, $"{modelClassName}.scaff.cs"); File.WriteAllText(filePath, contents); @@ -58,6 +62,10 @@ public async Task Scaffold() Directory.CreateDirectory(tasksDirectory); foreach (var taskDefinition in taskDefinitions) { + Console.WriteLine($"Scaffolding task {taskDefinition.Name}"); + if (_config.DryRun) + continue; + (var contents, var modelClassName) = CreateTaskClass(taskDefinition); if (contents != null) @@ -179,9 +187,6 @@ public async Task Scaffold() modelGenerator.AddXmlComment("ownerEmail", workflowDefinition.OwnerEmail); modelGenerator.AddXmlComment("note", note); - if (_config.Dryrun) - return (null, null); - return (modelGenerator.Build(), name); } @@ -247,8 +252,6 @@ private void DefinePropertyParams(TaskModelGenerator.PropertyData propData, stri _logger.LogWarning($"No owner app defined for task {taskDefinition.Name}"); modelGenerator.AddXmlComment("summary", description.Replace('\n', ',')); - if (_config.Dryrun) - return (null, null); return (modelGenerator.Build(), name); }