Browse Source

Merge pull request #11292 from abpframework/cli-add-module-events

CLI: Publish events for module installing steps
pull/11300/head
albert 4 years ago
committed by GitHub
parent
commit
53d5b331d6
No known key found for this signature in database GPG Key ID: 4AEE18F83AFDEB23
  1. 8
      framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectModification/Events/ModuleInstallingProgressEvent.cs
  2. 43
      framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectModification/SolutionModuleAdder.cs

8
framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectModification/Events/ModuleInstallingProgressEvent.cs

@ -0,0 +1,8 @@
namespace Volo.Abp.Cli.ProjectModification.Events;
public class ModuleInstallingProgressEvent
{
public int CurrentStep { get; set; }
public string Message { get; set; }
}

43
framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectModification/SolutionModuleAdder.cs

@ -17,8 +17,10 @@ using Volo.Abp.Cli.Http;
using Volo.Abp.Cli.ProjectBuilding; using Volo.Abp.Cli.ProjectBuilding;
using Volo.Abp.Cli.ProjectBuilding.Files; using Volo.Abp.Cli.ProjectBuilding.Files;
using Volo.Abp.Cli.ProjectBuilding.Templates.MvcModule; using Volo.Abp.Cli.ProjectBuilding.Templates.MvcModule;
using Volo.Abp.Cli.ProjectModification.Events;
using Volo.Abp.Cli.Utils; using Volo.Abp.Cli.Utils;
using Volo.Abp.DependencyInjection; using Volo.Abp.DependencyInjection;
using Volo.Abp.EventBus.Local;
using Volo.Abp.Json; using Volo.Abp.Json;
namespace Volo.Abp.Cli.ProjectModification; namespace Volo.Abp.Cli.ProjectModification;
@ -33,6 +35,7 @@ public class SolutionModuleAdder : ITransientDependency
public NewCommand NewCommand { get; } public NewCommand NewCommand { get; }
public BundleCommand BundleCommand { get; } public BundleCommand BundleCommand { get; }
public ICmdHelper CmdHelper { get; } public ICmdHelper CmdHelper { get; }
public ILocalEventBus LocalEventBus { get; }
protected IJsonSerializer JsonSerializer { get; } protected IJsonSerializer JsonSerializer { get; }
protected ProjectNugetPackageAdder ProjectNugetPackageAdder { get; } protected ProjectNugetPackageAdder ProjectNugetPackageAdder { get; }
@ -62,7 +65,8 @@ public class SolutionModuleAdder : ITransientDependency
NewCommand newCommand, NewCommand newCommand,
BundleCommand bundleCommand, BundleCommand bundleCommand,
CliHttpClientFactory cliHttpClientFactory, CliHttpClientFactory cliHttpClientFactory,
ICmdHelper cmdHelper) ICmdHelper cmdHelper,
ILocalEventBus localEventBus)
{ {
JsonSerializer = jsonSerializer; JsonSerializer = jsonSerializer;
ProjectNugetPackageAdder = projectNugetPackageAdder; ProjectNugetPackageAdder = projectNugetPackageAdder;
@ -79,6 +83,7 @@ public class SolutionModuleAdder : ITransientDependency
NewCommand = newCommand; NewCommand = newCommand;
BundleCommand = bundleCommand; BundleCommand = bundleCommand;
CmdHelper = cmdHelper; CmdHelper = cmdHelper;
LocalEventBus = localEventBus;
_cliHttpClientFactory = cliHttpClientFactory; _cliHttpClientFactory = cliHttpClientFactory;
Logger = NullLogger<SolutionModuleAdder>.Instance; Logger = NullLogger<SolutionModuleAdder>.Instance;
} }
@ -95,7 +100,11 @@ public class SolutionModuleAdder : ITransientDependency
Check.NotNull(solutionFile, nameof(solutionFile)); Check.NotNull(solutionFile, nameof(solutionFile));
Check.NotNull(moduleName, nameof(moduleName)); Check.NotNull(moduleName, nameof(moduleName));
await PublishEventAsync(1, "Retriving module info...");
var module = await GetModuleInfoAsync(moduleName, newTemplate, newProTemplate); var module = await GetModuleInfoAsync(moduleName, newTemplate, newProTemplate);
await PublishEventAsync(2, "Removing incompatible packages from module...");
module = RemoveIncompatiblePackages(module, version); module = RemoveIncompatiblePackages(module, version);
Logger.LogInformation($"Installing module '{module.Name}' to the solution '{Path.GetFileNameWithoutExtension(solutionFile)}'"); Logger.LogInformation($"Installing module '{module.Name}' to the solution '{Path.GetFileNameWithoutExtension(solutionFile)}'");
@ -107,14 +116,20 @@ public class SolutionModuleAdder : ITransientDependency
if (withSourceCode || newTemplate || newProTemplate) if (withSourceCode || newTemplate || newProTemplate)
{ {
var modulesFolderInSolution = Path.Combine(Path.GetDirectoryName(solutionFile), "modules"); var modulesFolderInSolution = Path.Combine(Path.GetDirectoryName(solutionFile), "modules");
await PublishEventAsync(5, $"Downloading source code of {moduleName}");
await DownloadSourceCodesToSolutionFolder(module, modulesFolderInSolution, version, newTemplate, newProTemplate); await DownloadSourceCodesToSolutionFolder(module, modulesFolderInSolution, version, newTemplate, newProTemplate);
await PublishEventAsync(6, $"Deleting incompatible projects from the module source code");
await RemoveUnnecessaryProjectsAsync(Path.GetDirectoryName(solutionFile), module, projectFiles); await RemoveUnnecessaryProjectsAsync(Path.GetDirectoryName(solutionFile), module, projectFiles);
if (addSourceCodeToSolutionFile) if (addSourceCodeToSolutionFile)
{ {
await PublishEventAsync(7, $"Adding module to solution file");
await SolutionFileModifier.AddModuleToSolutionFileAsync(module, solutionFile); await SolutionFileModifier.AddModuleToSolutionFileAsync(module, solutionFile);
} }
await PublishEventAsync(8, $"Changing nuget references to local references");
if (newTemplate || newProTemplate) if (newTemplate || newProTemplate)
{ {
await NugetPackageToLocalReferenceConverter.Convert(module, solutionFile, $"{module.Name}."); await NugetPackageToLocalReferenceConverter.Convert(module, solutionFile, $"{module.Name}.");
@ -133,7 +148,7 @@ public class SolutionModuleAdder : ITransientDependency
await RunBundleForBlazorAsync(projectFiles, module); await RunBundleForBlazorAsync(projectFiles, module);
ModifyDbContext(projectFiles, module, skipDbMigrations); await ModifyDbContext(projectFiles, module, skipDbMigrations);
var documentationLink = module.GetFirstDocumentationLinkOrNull(); var documentationLink = module.GetFirstDocumentationLinkOrNull();
if (documentationLink != null) if (documentationLink != null)
@ -144,6 +159,14 @@ public class SolutionModuleAdder : ITransientDependency
return module; return module;
} }
private async Task PublishEventAsync(int currentStep, string message)
{
await LocalEventBus.PublishAsync(new ModuleInstallingProgressEvent {
CurrentStep = currentStep,
Message = message
}, false);
}
private ModuleWithMastersInfo RemoveIncompatiblePackages(ModuleWithMastersInfo module, string version) private ModuleWithMastersInfo RemoveIncompatiblePackages(ModuleWithMastersInfo module, string version)
{ {
module.NugetPackages.RemoveAll(np => IsPackageInCompatible(np.MinVersion, np.MaxVersion, version)); module.NugetPackages.RemoveAll(np => IsPackageInCompatible(np.MinVersion, np.MaxVersion, version));
@ -195,6 +218,8 @@ public class SolutionModuleAdder : ITransientDependency
return; return;
} }
await PublishEventAsync(10, $"Running bundle command for Blazor");
var args = new CommandLineArgs("bundle"); var args = new CommandLineArgs("bundle");
args.Options.Add(BundleCommand.Options.WorkingDirectory.Short, Path.GetDirectoryName(blazorProject)); args.Options.Add(BundleCommand.Options.WorkingDirectory.Short, Path.GetDirectoryName(blazorProject));
@ -381,6 +406,8 @@ public class SolutionModuleAdder : ITransientDependency
if (!angularPackages.IsNullOrEmpty()) if (!angularPackages.IsNullOrEmpty())
{ {
await PublishEventAsync(5, $"Adding angular package reference");
foreach (var npmPackage in angularPackages) foreach (var npmPackage in angularPackages)
{ {
await ProjectNpmPackageAdder.AddAngularPackageAsync(angularPath, npmPackage); await ProjectNpmPackageAdder.AddAngularPackageAsync(angularPath, npmPackage);
@ -398,6 +425,8 @@ public class SolutionModuleAdder : ITransientDependency
return; return;
} }
await PublishEventAsync(9, $"Adding angular source code");
if (newTemplate) if (newTemplate)
{ {
MoveAngularFolderInNewTemplate(modulesFolderInSolution, moduleName); MoveAngularFolderInNewTemplate(modulesFolderInSolution, moduleName);
@ -517,6 +546,7 @@ public class SolutionModuleAdder : ITransientDependency
{ {
var webPackagesWillBeAddedToBlazorServerProject = SouldWebPackagesBeAddedToBlazorServerProject(module, projectFiles); var webPackagesWillBeAddedToBlazorServerProject = SouldWebPackagesBeAddedToBlazorServerProject(module, projectFiles);
await PublishEventAsync(3, "Adding nuget package references");
foreach (var nugetPackage in module.NugetPackages) foreach (var nugetPackage in module.NugetPackages)
{ {
var isProjectTiered = await IsProjectTiered(projectFiles); var isProjectTiered = await IsProjectTiered(projectFiles);
@ -553,9 +583,12 @@ public class SolutionModuleAdder : ITransientDependency
if (!mvcNpmPackages.IsNullOrEmpty()) if (!mvcNpmPackages.IsNullOrEmpty())
{ {
var targetProjects = ProjectFinder.FindNpmTargetProjectFile(projectFiles); var targetProjects = ProjectFinder.FindNpmTargetProjectFile(projectFiles);
if (targetProjects.Any()) if (targetProjects.Any())
{ {
await PublishEventAsync(4, "Adding npm package references for MVC");
NpmGlobalPackagesChecker.Check(); NpmGlobalPackagesChecker.Check();
foreach (var targetProject in targetProjects) foreach (var targetProject in targetProjects)
@ -586,7 +619,7 @@ public class SolutionModuleAdder : ITransientDependency
return isBlazorServerProject && module.NugetPackages.All(np => np.Target != NuGetPackageTarget.BlazorServer && np.TieredTarget != NuGetPackageTarget.BlazorServer); return isBlazorServerProject && module.NugetPackages.All(np => np.Target != NuGetPackageTarget.BlazorServer && np.TieredTarget != NuGetPackageTarget.BlazorServer);
} }
protected void ModifyDbContext(string[] projectFiles, ModuleInfo module, bool skipDbMigrations = false) protected async Task ModifyDbContext(string[] projectFiles, ModuleInfo module, bool skipDbMigrations = false)
{ {
if (string.IsNullOrWhiteSpace(module.EfCoreConfigureMethodName)) if (string.IsNullOrWhiteSpace(module.EfCoreConfigureMethodName))
{ {
@ -622,6 +655,8 @@ public class SolutionModuleAdder : ITransientDependency
return; return;
} }
await PublishEventAsync(10, $"Adding Configuration to EfCore DbContext");
var addedNewBuilder = var addedNewBuilder =
DbContextFileBuilderConfigureAdder.Add(dbContextFile, module.EfCoreConfigureMethodName); DbContextFileBuilderConfigureAdder.Add(dbContextFile, module.EfCoreConfigureMethodName);
@ -629,9 +664,11 @@ public class SolutionModuleAdder : ITransientDependency
{ {
if (addedNewBuilder) if (addedNewBuilder)
{ {
await PublishEventAsync(11, $"Creating a new migration");
EfCoreMigrationManager.AddMigration(dbMigrationsProject, module.Name); EfCoreMigrationManager.AddMigration(dbMigrationsProject, module.Name);
} }
await PublishEventAsync(12, $"Running migrator");
RunMigrator(projectFiles); RunMigrator(projectFiles);
} }
} }

Loading…
Cancel
Save