in src/AWS.Deploy.Orchestration/Utilities/CloudApplicationNameGenerator.cs [67:114]
public string GenerateValidName(ProjectDefinition target, List<CloudApplication> existingApplications, DeploymentTypes? deploymentType = null)
{
// generate recommendation
var recommendedPrefix = "deployment";
if (_fileManager.Exists(target.ProjectPath))
recommendedPrefix = Path.GetFileNameWithoutExtension(target.ProjectPath) ?? "";
else if (_directoryManager.Exists(target.ProjectPath))
recommendedPrefix = Path.GetDirectoryName(target.ProjectPath) ?? "";
// sanitize recommendation
recommendedPrefix =
new string(
recommendedPrefix
.ToCharArray()
.SkipWhile(c => !char.IsLetter(c) && ((int)c) < 127)
.Where(c =>
char.IsNumber(c) ||
char.IsLetter(c) && ((int)c) < 127 ||
c == '-')
.ToArray());
// make sure the recommendation doesn't exist already in existingApplications
var recommendation = recommendedPrefix;
var suffixString = "";
var recommendationCharArray = recommendation.ToCharArray();
for (var i = recommendationCharArray.Length - 1; i >= 0; i--)
{
if (char.IsDigit(recommendationCharArray[i]))
suffixString = $"{recommendationCharArray[i]}{suffixString}";
else
break;
}
var prefix = !string.IsNullOrEmpty(suffixString) ? recommendation[..^suffixString.Length] : recommendedPrefix;
var suffix = !string.IsNullOrEmpty(suffixString) ? int.Parse(suffixString): 0;
while (suffix < int.MaxValue)
{
var validationResult = IsValidName(recommendation, existingApplications, deploymentType);
if (validationResult.IsValid)
return recommendation;
recommendation = $"{prefix}{++suffix}";
}
throw new ArgumentException("Failed to generate a valid and unique name.");
}