mirror of https://github.com/abpframework/abp.git
committed by
GitHub
2 changed files with 84 additions and 0 deletions
@ -0,0 +1,78 @@ |
|||
using System; |
|||
using System.IO; |
|||
using System.Linq; |
|||
using Volo.Abp.Cli.Commands; |
|||
|
|||
namespace Volo.Abp.Cli.ProjectBuilding.Building.Steps |
|||
{ |
|||
public class MicroserviceServiceRandomPortStep : ProjectBuildPipelineStep |
|||
{ |
|||
private readonly string _defaultPort = string.Empty; |
|||
private string _tyeFileContent = null; |
|||
|
|||
public MicroserviceServiceRandomPortStep(string defaultPort) |
|||
{ |
|||
_defaultPort = defaultPort; |
|||
} |
|||
|
|||
public override void Execute(ProjectBuildContext context) |
|||
{ |
|||
var newPort = GetNewRandomPort(context); |
|||
|
|||
var targetFiles = context.Files.Where(f=> f.Name.EndsWith("launchSettings.json") || f.Name.EndsWith("appsettings.json")).ToList(); |
|||
|
|||
foreach (var file in targetFiles) |
|||
{ |
|||
file.SetContent(file.Content.Replace(_defaultPort, newPort)); |
|||
} |
|||
} |
|||
|
|||
private string GetNewRandomPort(ProjectBuildContext context) |
|||
{ |
|||
string newPort; |
|||
var rnd = new Random(); |
|||
var tryCount = 0; |
|||
|
|||
do |
|||
{ |
|||
newPort = rnd.Next(44350, 45350).ToString(); |
|||
|
|||
if (tryCount++ > 2000) |
|||
{ |
|||
break; |
|||
} |
|||
|
|||
} while (PortExistsForAnotherService(context, newPort)); |
|||
|
|||
return newPort; |
|||
} |
|||
|
|||
private bool PortExistsForAnotherService(ProjectBuildContext context, string newPort) |
|||
{ |
|||
return ReadTyeFileContent(context).SplitToLines().Any(l => l.Contains("port") && l.Contains(newPort)); |
|||
} |
|||
|
|||
private string ReadTyeFileContent(ProjectBuildContext context) |
|||
{ |
|||
if (_tyeFileContent != null) |
|||
{ |
|||
return _tyeFileContent; |
|||
} |
|||
|
|||
var solutionFolderPath = context.BuildArgs.ExtraProperties[NewCommand.Options.OutputFolder.Short] ?? |
|||
context.BuildArgs.ExtraProperties[NewCommand.Options.OutputFolder.Long] ?? |
|||
Directory.GetCurrentDirectory(); |
|||
|
|||
var tyeFilePath = Path.Combine(solutionFolderPath, "tye.yaml"); |
|||
|
|||
if (!File.Exists(tyeFilePath)) |
|||
{ |
|||
return String.Empty; |
|||
} |
|||
|
|||
_tyeFileContent = File.ReadAllText(tyeFilePath); |
|||
|
|||
return _tyeFileContent; |
|||
} |
|||
} |
|||
} |
|||
Loading…
Reference in new issue