diff --git a/src/EAVFW.Extensions.Docs.Extractor/DocumentLogic.cs b/src/EAVFW.Extensions.Docs.Extractor/DocumentLogic.cs
index 289e801..452e6b8 100644
--- a/src/EAVFW.Extensions.Docs.Extractor/DocumentLogic.cs
+++ b/src/EAVFW.Extensions.Docs.Extractor/DocumentLogic.cs
@@ -7,7 +7,6 @@
using System.Text.Json;
using EAVFramework.Plugins;
using EAVFW.Extensions.Manifest.SDK;
-using Microsoft.Extensions.FileSystemGlobbing;
using WorkflowEngine.Core;
namespace EAVFW.Extensions.Docs.Extractor
@@ -15,9 +14,9 @@ namespace EAVFW.Extensions.Docs.Extractor
public class DocumentLogic : IDocumentLogic
{
///
- public IEnumerable ExtractPluginDocumentation(PluginInfo pluginInfo)
+ public IEnumerable ExtractPluginDocumentation(FileInfo assemblyInfo, string[] assemblies)
{
- var assembly = LoadAssembly(pluginInfo);
+ var assembly = LoadAssembly(assemblyInfo, assemblies);
var implementingTypes = assembly.GetTypes()
.Where(t => typeof(IPlugin).IsAssignableFrom(t) && !t.IsInterface && !t.IsAbstract);
@@ -40,13 +39,10 @@ from implementingType in implementingTypes
return plugins;
}
- private static Assembly LoadAssembly(PluginInfo pluginInfo)
+ private static Assembly LoadAssembly(FileInfo assemblyInfo, string [] assemblies)
{
- var matcher = new Matcher();
- matcher.AddInclude(pluginInfo.Search);
-
var dictionary = new Dictionary();
- foreach (var file in matcher.GetResultsInFullPath(pluginInfo.RootPath.FullName))
+ foreach (var file in assemblies)
{
var assemblyName = AssemblyName.GetAssemblyName(file);
@@ -63,15 +59,15 @@ private static Assembly LoadAssembly(PluginInfo pluginInfo)
var currentDomain = AppDomain.CurrentDomain;
currentDomain.AssemblyResolve += CustomAssemblyResolver.CustomAssemblyResolverEventHandler;
- var assembly = AssemblyLoadContext.Default.LoadFromAssemblyPath(pluginInfo.AssemblyPath.FullName);
+ var assembly = AssemblyLoadContext.Default.LoadFromAssemblyPath(assemblyInfo.FullName);
return assembly;
}
///
public Dictionary ExtractWizardDocumentation(FileInfo manifestFile,
- PluginInfo pluginInfo)
+ FileInfo assemblyInfo, string[] assemblies)
{
- var assembly = LoadAssembly(pluginInfo);
+ var assembly = LoadAssembly(assemblyInfo, assemblies);
// Preloading types to easily query for documentation
var workflows = assembly.GetTypes()
diff --git a/src/EAVFW.Extensions.Docs.Extractor/IDocumentLogic.cs b/src/EAVFW.Extensions.Docs.Extractor/IDocumentLogic.cs
index e74952c..6263a3f 100644
--- a/src/EAVFW.Extensions.Docs.Extractor/IDocumentLogic.cs
+++ b/src/EAVFW.Extensions.Docs.Extractor/IDocumentLogic.cs
@@ -13,7 +13,7 @@ public interface IDocumentLogic
/// Remember to enable GenerateDocumentationFile for the project.
///
///
- IEnumerable ExtractPluginDocumentation(PluginInfo pluginInfo);
+ IEnumerable ExtractPluginDocumentation(FileInfo assemblyInfo, string[] assemblies);
///
/// Extract Wizards from the given Manifest and generate documentation based on manifest metadata and workflow
@@ -22,6 +22,6 @@ public interface IDocumentLogic
///
///
///
- Dictionary ExtractWizardDocumentation(FileInfo manifestFile, PluginInfo pluginInfo);
+ Dictionary ExtractWizardDocumentation(FileInfo manifestFile, FileInfo assemblyInfo, string[] assemblies);
}
}
diff --git a/src/EAVFW.Extensions.Manifest.ManifestEnricherTool/Commands/Documentation/DocumentationSourceExtractorCommand.cs b/src/EAVFW.Extensions.Manifest.ManifestEnricherTool/Commands/Documentation/DocumentationSourceExtractorCommand.cs
index 3769c3a..0d80c74 100644
--- a/src/EAVFW.Extensions.Manifest.ManifestEnricherTool/Commands/Documentation/DocumentationSourceExtractorCommand.cs
+++ b/src/EAVFW.Extensions.Manifest.ManifestEnricherTool/Commands/Documentation/DocumentationSourceExtractorCommand.cs
@@ -8,15 +8,16 @@
using System.Text.Json;
using System.Threading.Tasks;
using EAVFW.Extensions.Docs.Extractor;
+using Microsoft.Extensions.FileSystemGlobbing;
namespace EAVFW.Extensions.Manifest.ManifestEnricherTool.Commands.Documentation
{
/*
* There are many parameters to the command and generating source for both plugin and wizard requires the tool to be
* executed twice. Alternatively, the "configuration" could be done using a configuration, which would provide all
- * necessary parameters. Both it would be more rigid and could not easily be changed in a pipeline or other.
+ * necessary parameters. Both it would be more rigid and could not easily be changed in a pipeline or other.
*/
-
+
public class DocumentationSourceExtractorCommand : Command
{
private readonly IDocumentLogic _documentLogic;
@@ -34,7 +35,7 @@ public class DocumentationSourceExtractorCommand : Command
[Alias("-p")]
[Alias("--probing-pattern")]
[Description("Path pattern used to probe for assemblies, supporting glob patterns")]
- public DirectoryInfo ProbePathOption { get; set; }
+ public IEnumerable ProbePathOption { get; set; }
[Alias("-o")]
[Alias("--output")]
@@ -46,13 +47,19 @@ public class DocumentationSourceExtractorCommand : Command
[Description("What kind of documentation source should be extracted")]
public Targets Target { get; set; }
+ [Alias("-d")]
+ [Alias("--debug")]
+ [Description("Enable debug output")]
+ public bool Debug { get; set; } = false;
+
public enum Targets
{
Plugins,
Wizards
}
- public DocumentationSourceExtractorCommand(IDocumentLogic documentLogic) : base("extract", "Extract documentation source")
+ public DocumentationSourceExtractorCommand(IDocumentLogic documentLogic) : base("extract",
+ "Extract documentation source")
{
_documentLogic = documentLogic ?? throw new ArgumentNullException(nameof(documentLogic));
Handler = COmmandExtensions.Create(this, Array.Empty(), Run);
@@ -72,6 +79,37 @@ private async Task Run(ParseResult parseResult, IConsole console)
return 1;
}
+ if (ProbePathOption.Count() == 1 && ProbePathOption.First().Contains('*'))
+ {
+ DebugMsg("No assemblies in list, probing...");
+
+ var probePath = new DirectoryInfo(ProbePathOption.First());
+
+ var matcher = new Matcher();
+ var basePath = probePath.Parent;
+
+ if (probePath.FullName.Contains("**"))
+ {
+ basePath = new DirectoryInfo(probePath.FullName.Split("**").First());
+ matcher.AddInclude(probePath.FullName[basePath.FullName.Length..]);
+ }
+ else if (probePath.Name.Contains("."))
+ {
+ matcher.AddInclude(probePath.Name);
+ }
+
+ ProbePathOption = matcher.GetResultsInFullPath(basePath.FullName).ToList();
+
+ }
+
+ DebugMsg($"Found {ProbePathOption.Count()} assemblies");
+
+ if (!ProbePathOption.Any())
+ {
+ Console.WriteLine("Did not find any assemblies");
+ return 1;
+ }
+
switch (Target)
{
case Targets.Plugins:
@@ -92,15 +130,13 @@ private async Task GenerateWizardSource()
}
var entityDefinitions = _documentLogic.ExtractWizardDocumentation(
- ManifestPathOption,
- new PluginInfo(ProbePathOption,
- AssemblyPathOption));
+ ManifestPathOption, AssemblyPathOption, ProbePathOption.ToArray());
var basePath = new DirectoryInfo(CalculateFullPath("wizards"));
- if(!basePath.Exists)
+ if (!basePath.Exists)
basePath.Create();
-
+
foreach (var (key, value) in entityDefinitions)
{
var fileName = Path.Combine(basePath.FullName, $"{key}.json");
@@ -119,9 +155,9 @@ private async Task GenerateWizardSource()
private async Task GeneratePluginSource()
{
var plugins = _documentLogic
- .ExtractPluginDocumentation(new PluginInfo(ProbePathOption, AssemblyPathOption))
+ .ExtractPluginDocumentation(AssemblyPathOption, ProbePathOption.ToArray())
.ToArray();
-
+
var jsonString = JsonSerializer.Serialize(plugins, new JsonSerializerOptions
{
WriteIndented = true
@@ -155,5 +191,11 @@ private bool IsMissingOptions(out List missing)
return false;
}
+
+ private void DebugMsg(string msg)
+ {
+ if (Debug)
+ Console.WriteLine(msg);
+ }
}
}
diff --git a/src/EAVFW.Extensions.Manifest.ManifestEnricherTool/EAVFW.Extensions.Manifest.ManifestEnricherTool.csproj b/src/EAVFW.Extensions.Manifest.ManifestEnricherTool/EAVFW.Extensions.Manifest.ManifestEnricherTool.csproj
index c50eb0f..dfa4622 100644
--- a/src/EAVFW.Extensions.Manifest.ManifestEnricherTool/EAVFW.Extensions.Manifest.ManifestEnricherTool.csproj
+++ b/src/EAVFW.Extensions.Manifest.ManifestEnricherTool/EAVFW.Extensions.Manifest.ManifestEnricherTool.csproj
@@ -1,62 +1,62 @@
-
- Exe
- net6.0;net8.0
- true
- eavfw-manifest
- ./../../artifacts
- ManifestEnricherTool
- Poul Kjeldager
- A tool to enrich and transform manifest.json to manifest.g.json
- README.md
- https://github.com/EAVFW/EAVFW.Extensions.Manifest.ManifestEnricherTool
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 3.1.31
-
-
-
-
- 6.0.11
-
-
-
-
- 7.0.13
-
-
+
+ Exe
+ net6.0;net8.0
+ true
+ eavfw-manifest
+ ./../../artifacts
+ ManifestEnricherTool
+ Poul Kjeldager
+ A tool to enrich and transform manifest.json to manifest.g.json
+ README.md
+ https://github.com/EAVFW/EAVFW.Extensions.Manifest.ManifestEnricherTool
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 3.1.31
+
+
+
+
+ 6.0.11
+
+
+
+
+ 7.0.13
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+