in src/AWS.Deploy.Orchestration/Utilities/CloudApplicationNameGenerator.cs [46:80]
public string GenerateValidName(ProjectDefinition target, List<CloudApplication> existingApplications)
{
// 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 suffix = 1;
while (suffix < 100)
{
if (existingApplications.All(x => x.StackName != recommendation) && IsValidName(recommendation))
return recommendation;
recommendation = $"{recommendedPrefix}{suffix++}";
}
throw new ArgumentException("Failed to generate a valid and unique name.");
}