Browse Source

Merge pull request #8168 from abpframework/cli-template-build-symbols

Partial implemented: CLI template build symbols
pull/8198/head
Yunus Emre Kalkan 6 years ago
committed by GitHub
parent
commit
f95ceb476d
No known key found for this signature in database GPG Key ID: 4AEE18F83AFDEB23
  1. 8
      framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectBuilding/Building/ProjectBuildContext.cs
  2. 22
      framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectBuilding/Building/Steps/RemoveCmsKitStep.cs
  3. 19
      framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectBuilding/Building/Steps/RemoveEfCoreRelatedCodeStep.cs
  4. 21
      framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectBuilding/Building/Steps/RemoveGlobalFeaturesPackageStep.cs
  5. 20
      framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectBuilding/Building/Steps/RemovePublicRedisStep.cs
  6. 2
      framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectBuilding/Building/Steps/TemplateCodeDeleteStep.cs
  7. 117
      framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectBuilding/Files/FileEntryExtensions.cs
  8. 45
      framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectBuilding/Templates/App/AppTemplateBase.cs

8
framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectBuilding/Building/ProjectBuildContext.cs

@ -1,4 +1,5 @@
using JetBrains.Annotations; using System.Collections.Generic;
using JetBrains.Annotations;
using Volo.Abp.Cli.ProjectBuilding.Files; using Volo.Abp.Cli.ProjectBuilding.Files;
using Volo.Abp.Cli.ProjectModification; using Volo.Abp.Cli.ProjectModification;
@ -21,7 +22,9 @@ namespace Volo.Abp.Cli.ProjectBuilding.Building
public FileEntryList Files { get; set; } public FileEntryList Files { get; set; }
public ProjectResult Result { get; set; } public ProjectResult Result { get; set; }
public List<string> Symbols { get; } //TODO: Fill the symbols, like "UI-Angular", "CMS-KIT"!
public ProjectBuildContext( public ProjectBuildContext(
TemplateInfo template, TemplateInfo template,
ModuleInfo module, ModuleInfo module,
@ -34,6 +37,7 @@ namespace Volo.Abp.Cli.ProjectBuilding.Building
Package = package; Package = package;
TemplateFile = Check.NotNull(templateFile, nameof(templateFile)); TemplateFile = Check.NotNull(templateFile, nameof(templateFile));
BuildArgs = Check.NotNull(buildArgs, nameof(buildArgs)); BuildArgs = Check.NotNull(buildArgs, nameof(buildArgs));
Symbols = new List<string>();
Result = new ProjectResult(); Result = new ProjectResult();
} }

22
framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectBuilding/Building/Steps/RemoveCmsKitStep.cs

@ -1,22 +0,0 @@
using System.Linq;
using Volo.Abp.Cli.ProjectBuilding.Files;
namespace Volo.Abp.Cli.ProjectBuilding.Building.Steps
{
public class RemoveCmsKitStep : ProjectBuildPipelineStep
{
public override void Execute(ProjectBuildContext context)
{
var commonFiles = context.Files.Where(f =>
f.Name.EndsWith(".csproj") ||
f.Name.EndsWith(".cs") ||
f.Name.EndsWith(".json") ||
f.Name.EndsWith(".cshtml"));
foreach (var file in commonFiles)
{
file.RemoveTemplateCodeIfNot("CMS-KIT");
}
}
}
}

19
framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectBuilding/Building/Steps/RemoveEfCoreRelatedCodeStep.cs

@ -1,19 +0,0 @@
using System.Linq;
using Volo.Abp.Cli.ProjectBuilding.Files;
namespace Volo.Abp.Cli.ProjectBuilding.Building.Steps
{
public class RemoveEfCoreRelatedCodeStep : ProjectBuildPipelineStep
{
public override void Execute(ProjectBuildContext context)
{
foreach (var file in context.Files)
{
if (file.Name.EndsWith(".cs") || file.Name.EndsWith(".csproj") || file.Name.EndsWith(".json"))
{
file.RemoveTemplateCodeIfNot("EFCORE");
}
}
}
}
}

21
framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectBuilding/Building/Steps/RemoveGlobalFeaturesPackageStep.cs

@ -1,21 +0,0 @@
using System.Linq;
using Volo.Abp.Cli.ProjectBuilding.Files;
namespace Volo.Abp.Cli.ProjectBuilding.Building.Steps
{
public class RemoveGlobalFeaturesPackageStep : ProjectBuildPipelineStep
{
public override void Execute(ProjectBuildContext context)
{
var commonFiles = context.Files.Where(f =>
f.Name.EndsWith(".csproj") ||
f.Name.EndsWith(".cs") ||
f.Name.EndsWith(".cshtml"));
foreach (var file in commonFiles)
{
file.RemoveTemplateCodeIf("CMS-KIT");
}
}
}
}

20
framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectBuilding/Building/Steps/RemovePublicRedisStep.cs

@ -1,20 +0,0 @@
using System;
using System.Linq;
using Volo.Abp.Cli.ProjectBuilding.Files;
namespace Volo.Abp.Cli.ProjectBuilding.Building.Steps
{
public class RemovePublicRedisStep : ProjectBuildPipelineStep
{
public override void Execute(ProjectBuildContext context)
{
foreach (var file in context.Files)
{
if (file.Name.EndsWith(".cs") || file.Name.EndsWith(".csproj") || file.Name.EndsWith(".json"))
{
file.RemoveTemplateCodeIfNot("PUBLIC-REDIS");
}
}
}
}
}

2
framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectBuilding/Building/Steps/TemplateCodeDeleteStep.cs

@ -10,7 +10,7 @@ namespace Volo.Abp.Cli.ProjectBuilding.Building.Steps
{ {
if (file.Name.EndsWith(".cs") || file.Name.EndsWith(".csproj") || file.Name.EndsWith(".cshtml") || file.Name.EndsWith(".json")) if (file.Name.EndsWith(".cs") || file.Name.EndsWith(".csproj") || file.Name.EndsWith(".cshtml") || file.Name.EndsWith(".json"))
{ {
file.RemoveTemplateCode(); file.RemoveTemplateCode(context.Symbols);
file.RemoveTemplateCodeMarkers(); file.RemoveTemplateCodeMarkers();
} }
} }

117
framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectBuilding/Files/FileEntryExtensions.cs

@ -1,4 +1,6 @@
using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Linq;
namespace Volo.Abp.Cli.ProjectBuilding.Files namespace Volo.Abp.Cli.ProjectBuilding.Files
{ {
@ -11,19 +13,9 @@ namespace Volo.Abp.Cli.ProjectBuilding.Files
return file; return file;
} }
public static void RemoveTemplateCode(this FileEntry file) public static void RemoveTemplateCode(this FileEntry file, List<string> symbols)
{ {
RemoveMarkedTemplateCode(file, "<TEMPLATE-REMOVE>"); RemoveMarkedTemplateCode(file, symbols);
}
public static void RemoveTemplateCodeIf(this FileEntry file, string condition)
{
RemoveByCondition(file, "IF", condition);
}
public static void RemoveTemplateCodeIfNot(this FileEntry file, string condition)
{
RemoveByCondition(file, "IF-NOT", condition);
} }
public static void RemoveTemplateCodeMarkers(this FileEntry file) public static void RemoveTemplateCodeMarkers(this FileEntry file)
@ -57,12 +49,7 @@ namespace Volo.Abp.Cli.ProjectBuilding.Files
file.SetLines(newLines); file.SetLines(newLines);
} }
private static void RemoveByCondition(this FileEntry file, string conditionName, string condition) private static void RemoveMarkedTemplateCode(this FileEntry file, List<string> symbols)
{
RemoveMarkedTemplateCode(file, $"<TEMPLATE-REMOVE {conditionName}='{condition}'>");
}
private static void RemoveMarkedTemplateCode(this FileEntry file, string beginMark)
{ {
if (!file.Content.Contains("</TEMPLATE-REMOVE>")) if (!file.Content.Contains("</TEMPLATE-REMOVE>"))
{ {
@ -76,8 +63,40 @@ namespace Volo.Abp.Cli.ProjectBuilding.Files
for (int i = 0; i < lines.Length; i++) for (int i = 0; i < lines.Length; i++)
{ {
if (lines[i].Contains(beginMark)) if (lines[i].Contains("<TEMPLATE-REMOVE"))
{ {
var parsedMarker = ParseTemplateRemoveMarker(lines[i]);
bool sectionShouldBeRemoved = false;
if (!parsedMarker.Symbols.Any())
{
sectionShouldBeRemoved = true;
}
else if(parsedMarker.Symbols.Count == 1)
{
sectionShouldBeRemoved = !parsedMarker.IsNegativeCondition
? symbols.Contains(parsedMarker.Symbols[0], StringComparer.InvariantCultureIgnoreCase)
: !symbols.Contains(parsedMarker.Symbols[0], StringComparer.InvariantCultureIgnoreCase);
}
else if (parsedMarker.Operator == Operator.And)
{
sectionShouldBeRemoved = parsedMarker.Symbols.Any(s => !parsedMarker.IsNegativeCondition
? symbols.Contains(s, StringComparer.InvariantCultureIgnoreCase)
: !symbols.Contains(s, StringComparer.InvariantCultureIgnoreCase));
}
else if (parsedMarker.Operator == Operator.Or)
{
sectionShouldBeRemoved = !parsedMarker.Symbols.All(s => !parsedMarker.IsNegativeCondition
? symbols.Contains(s, StringComparer.InvariantCultureIgnoreCase)
: !symbols.Contains(s, StringComparer.InvariantCultureIgnoreCase) == false);
}
if (!sectionShouldBeRemoved)
{
continue;
}
while (i < lines.Length && !lines[i].Contains("</TEMPLATE-REMOVE>")) while (i < lines.Length && !lines[i].Contains("</TEMPLATE-REMOVE>"))
{ {
++i; ++i;
@ -94,5 +113,65 @@ namespace Volo.Abp.Cli.ProjectBuilding.Files
file.SetLines(newLines); file.SetLines(newLines);
} }
private static TemplateRemoveMarkerParseResult ParseTemplateRemoveMarker(string marker)
{
var result = new TemplateRemoveMarkerParseResult();
var condition = marker.Trim()
.RemovePreFix("//").Trim()
.RemovePreFix("@*").Trim()
.RemovePreFix("<!--").Trim()
.RemovePreFix("<TEMPLATE-REMOVE").Trim()
.RemovePostFix("*@").Trim()
.RemovePostFix("-->").Trim()
.RemovePostFix(">").Trim();
if (string.IsNullOrWhiteSpace(condition))
{
return result;
}
var conditionSplitted = condition.Split("=");
result.IsNegativeCondition = conditionSplitted[0] == "IF-NOT";
var conditionContent = string.Join("=", conditionSplitted.Skip(1))
.RemovePostFix("\"").RemovePreFix("\"")
.RemovePostFix("'").RemovePreFix("'");
if (conditionContent.Contains("&&"))
{
result.Operator = Operator.And;
result.Symbols = conditionContent.Split("&&").ToList();
}
else if(conditionContent.Contains("||"))
{
result.Operator = Operator.Or;
result.Symbols = conditionContent.Split("||").ToList();
}
else
{
result.Symbols.Add(conditionContent);
}
return result;
}
private class TemplateRemoveMarkerParseResult
{
public List<string> Symbols { get; set; } = new List<string>();
public Operator Operator { get; set; } = Operator.None;
public bool IsNegativeCondition { get; set; }
}
private enum Operator
{
None,
And,
Or
}
} }
} }

45
framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectBuilding/Templates/App/AppTemplateBase.cs

@ -28,6 +28,7 @@ namespace Volo.Abp.Cli.ProjectBuilding.Templates.App
SwitchDatabaseProvider(context, steps); SwitchDatabaseProvider(context, steps);
DeleteUnrelatedProjects(context, steps); DeleteUnrelatedProjects(context, steps);
RemoveMigrations(context, steps); RemoveMigrations(context, steps);
ConfigureTieredArchitecture(context, steps);
ConfigurePublicWebSite(context, steps); ConfigurePublicWebSite(context, steps);
RemoveUnnecessaryPorts(context, steps); RemoveUnnecessaryPorts(context, steps);
RandomizeSslPorts(context, steps); RandomizeSslPorts(context, steps);
@ -64,7 +65,10 @@ namespace Volo.Abp.Cli.ProjectBuilding.Templates.App
steps.Add(new RemoveProjectFromSolutionStep("MyCompanyName.MyProjectName.EntityFrameworkCore")); steps.Add(new RemoveProjectFromSolutionStep("MyCompanyName.MyProjectName.EntityFrameworkCore"));
steps.Add(new RemoveProjectFromSolutionStep("MyCompanyName.MyProjectName.EntityFrameworkCore.DbMigrations")); steps.Add(new RemoveProjectFromSolutionStep("MyCompanyName.MyProjectName.EntityFrameworkCore.DbMigrations"));
steps.Add(new RemoveProjectFromSolutionStep("MyCompanyName.MyProjectName.EntityFrameworkCore.Tests", projectFolderPath: "/aspnet-core/test/MyCompanyName.MyProjectName.EntityFrameworkCore.Tests")); steps.Add(new RemoveProjectFromSolutionStep("MyCompanyName.MyProjectName.EntityFrameworkCore.Tests", projectFolderPath: "/aspnet-core/test/MyCompanyName.MyProjectName.EntityFrameworkCore.Tests"));
steps.Add(new RemoveEfCoreRelatedCodeStep()); }
else
{
context.Symbols.Add("EFCORE");
} }
if (context.BuildArgs.DatabaseProvider != DatabaseProvider.MongoDb) if (context.BuildArgs.DatabaseProvider != DatabaseProvider.MongoDb)
@ -144,14 +148,15 @@ namespace Volo.Abp.Cli.ProjectBuilding.Templates.App
{ {
if (!context.BuildArgs.PublicWebSite) if (!context.BuildArgs.PublicWebSite)
{ {
if (!context.BuildArgs.ExtraProperties.ContainsKey(NewCommand.Options.Tiered.Long) && if (context.BuildArgs.ExtraProperties.ContainsKey(NewCommand.Options.Tiered.Long) ||
!context.BuildArgs.ExtraProperties.ContainsKey("separate-identity-server")) context.BuildArgs.ExtraProperties.ContainsKey("separate-identity-server"))
{ {
steps.Add(new RemovePublicRedisStep()); context.Symbols.Add("PUBLIC-REDIS");
} }
}
steps.Add(new RemoveCmsKitStep()); else
return; {
context.Symbols.Add("public-website");
} }
if (context.BuildArgs.ExtraProperties.ContainsKey(NewCommand.Options.Tiered.Long) || context.BuildArgs.ExtraProperties.ContainsKey("separate-identity-server")) if (context.BuildArgs.ExtraProperties.ContainsKey(NewCommand.Options.Tiered.Long) || context.BuildArgs.ExtraProperties.ContainsKey("separate-identity-server"))
@ -164,14 +169,9 @@ namespace Volo.Abp.Cli.ProjectBuilding.Templates.App
steps.Add(new ChangePublicAuthPortStep()); steps.Add(new ChangePublicAuthPortStep());
} }
// We disabled cms-kit for v4.2 release. if (!context.BuildArgs.ExtraProperties.ContainsKey("without-cms-kit"))
if (true || context.BuildArgs.ExtraProperties.ContainsKey("without-cms-kit"))
{
steps.Add(new RemoveCmsKitStep());
}
else
{ {
steps.Add(new RemoveGlobalFeaturesPackageStep()); context.Symbols.Add("CMS-KIT");
} }
} }
@ -197,6 +197,8 @@ namespace Volo.Abp.Cli.ProjectBuilding.Templates.App
private static void ConfigureWithBlazorUi(ProjectBuildContext context, List<ProjectBuildPipelineStep> steps) private static void ConfigureWithBlazorUi(ProjectBuildContext context, List<ProjectBuildPipelineStep> steps)
{ {
context.Symbols.Add("ui:blazor");
steps.Add(new RemoveProjectFromSolutionStep("MyCompanyName.MyProjectName.Web")); steps.Add(new RemoveProjectFromSolutionStep("MyCompanyName.MyProjectName.Web"));
steps.Add(new RemoveProjectFromSolutionStep("MyCompanyName.MyProjectName.Web.Host")); steps.Add(new RemoveProjectFromSolutionStep("MyCompanyName.MyProjectName.Web.Host"));
steps.Add(new RemoveProjectFromSolutionStep("MyCompanyName.MyProjectName.Web.Tests", projectFolderPath: "/aspnet-core/test/MyCompanyName.MyProjectName.Web.Tests")); steps.Add(new RemoveProjectFromSolutionStep("MyCompanyName.MyProjectName.Web.Tests", projectFolderPath: "/aspnet-core/test/MyCompanyName.MyProjectName.Web.Tests"));
@ -218,6 +220,8 @@ namespace Volo.Abp.Cli.ProjectBuilding.Templates.App
private static void ConfigureWithBlazorServerUi(ProjectBuildContext context, List<ProjectBuildPipelineStep> steps) private static void ConfigureWithBlazorServerUi(ProjectBuildContext context, List<ProjectBuildPipelineStep> steps)
{ {
context.Symbols.Add("ui:blazor-server");
steps.Add(new RemoveProjectFromSolutionStep("MyCompanyName.MyProjectName.Blazor")); steps.Add(new RemoveProjectFromSolutionStep("MyCompanyName.MyProjectName.Blazor"));
steps.Add(new RemoveProjectFromSolutionStep("MyCompanyName.MyProjectName.Web")); steps.Add(new RemoveProjectFromSolutionStep("MyCompanyName.MyProjectName.Web"));
steps.Add(new RemoveProjectFromSolutionStep("MyCompanyName.MyProjectName.Web.Host")); steps.Add(new RemoveProjectFromSolutionStep("MyCompanyName.MyProjectName.Web.Host"));
@ -242,6 +246,8 @@ namespace Volo.Abp.Cli.ProjectBuilding.Templates.App
private static void ConfigureWithMvcUi(ProjectBuildContext context, List<ProjectBuildPipelineStep> steps) private static void ConfigureWithMvcUi(ProjectBuildContext context, List<ProjectBuildPipelineStep> steps)
{ {
context.Symbols.Add("ui:mvc");
if (context.BuildArgs.ExtraProperties.ContainsKey("tiered")) if (context.BuildArgs.ExtraProperties.ContainsKey("tiered"))
{ {
steps.Add(new RemoveProjectFromSolutionStep("MyCompanyName.MyProjectName.Web")); steps.Add(new RemoveProjectFromSolutionStep("MyCompanyName.MyProjectName.Web"));
@ -262,6 +268,8 @@ namespace Volo.Abp.Cli.ProjectBuilding.Templates.App
private static void ConfigureWithAngularUi(ProjectBuildContext context, List<ProjectBuildPipelineStep> steps) private static void ConfigureWithAngularUi(ProjectBuildContext context, List<ProjectBuildPipelineStep> steps)
{ {
context.Symbols.Add("ui:angular");
steps.Add(new RemoveProjectFromSolutionStep("MyCompanyName.MyProjectName.Web")); steps.Add(new RemoveProjectFromSolutionStep("MyCompanyName.MyProjectName.Web"));
steps.Add(new RemoveProjectFromSolutionStep("MyCompanyName.MyProjectName.Web.Host")); steps.Add(new RemoveProjectFromSolutionStep("MyCompanyName.MyProjectName.Web.Host"));
steps.Add(new RemoveProjectFromSolutionStep("MyCompanyName.MyProjectName.Web.Tests", projectFolderPath: "/aspnet-core/test/MyCompanyName.MyProjectName.Web.Tests")); steps.Add(new RemoveProjectFromSolutionStep("MyCompanyName.MyProjectName.Web.Tests", projectFolderPath: "/aspnet-core/test/MyCompanyName.MyProjectName.Web.Tests"));
@ -312,6 +320,15 @@ namespace Volo.Abp.Cli.ProjectBuilding.Templates.App
); );
} }
private void ConfigureTieredArchitecture(ProjectBuildContext context, List<ProjectBuildPipelineStep> steps)
{
if (context.BuildArgs.ExtraProperties.ContainsKey(NewCommand.Options.Tiered.Long) ||
context.BuildArgs.ExtraProperties.ContainsKey("separate-identity-server"))
{
context.Symbols.Add("tiered");
}
}
private static void RandomizeStringEncryption(ProjectBuildContext context, List<ProjectBuildPipelineStep> steps) private static void RandomizeStringEncryption(ProjectBuildContext context, List<ProjectBuildPipelineStep> steps)
{ {
steps.Add(new RandomizeStringEncryptionStep()); steps.Add(new RandomizeStringEncryptionStep());

Loading…
Cancel
Save