private async Task <int> HandleAndReturnExitCodeAsync(CreateOptions options) { if (options.UnitTest) { options.ProjectType += "UnitTest"; } if (!(await _projectGeneratorFactory.SupportsProjectType(options.ProjectType))) { _logger.Warn("Project type {ProjectType} not supported.", options.ProjectType); return(-1); } _projectDirectoryProvider.SolutionDirectory = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, options.Name); _logger.Info($"Generating solution directory \"{options.Name}\"."); _directoryManipulator.CreateDirectory(_projectDirectoryProvider.SolutionDirectory); IProjectGenerator projectGenerator = _projectGeneratorFactory.CreateGeneratorFor(options.ProjectType); try { await projectGenerator.GenerateProject(options.Name); if (options.InitGit) { projectGenerator.InitGit(); if (options.UseGitMetadata) { await projectGenerator.AddGitMetadata(); } if (options.ReadmeDescription != null) { projectGenerator.AddReadme(options.Name, options.ReadmeDescription); } if (options.CommitMessage != null) { projectGenerator.Commit(options.CommitMessage); } if (options.GitRemote != null) { projectGenerator.AddRemote(options.GitRemote); if (options.Push) { projectGenerator.Push(); } } } } catch (Exception) { _logger.Error("An error ocurred during project generation."); } return(0); }
public ActionResult GetProjectArchive([FromQuery] ProjectSpec spec) { var config = _configService.GetInitializrConfig(); var defaults = config.ProjectMetadata; var normalizedSpec = new ProjectSpec() { Name = spec.Name ?? defaults?.Name?.Default, Description = spec.Description ?? defaults?.Description?.Default, Namespace = spec.Namespace ?? defaults?.Namespace?.Default, SteeltoeVersion = spec.SteeltoeVersion ?? defaults?.SteeltoeVersion?.Default, DotNetFramework = spec.DotNetFramework ?? defaults?.DotNetFramework?.Default, DotNetTemplate = spec.DotNetTemplate ?? defaults?.DotNetTemplate?.Default, Language = spec.Language ?? defaults?.Language?.Default, Packaging = spec.Packaging ?? defaults?.Packaging?.Default, Dependencies = spec.Dependencies ?? defaults?.Dependencies?.Default, }; if (normalizedSpec.Packaging is null) { return(StatusCode( StatusCodes.Status500InternalServerError, "Default packaging not configured.")); } var archiver = _archiverRegistry.Lookup(normalizedSpec.Packaging); if (archiver is null) { return(NotFound($"Packaging '{normalizedSpec.Packaging}' not found.")); } if (normalizedSpec.Dependencies != null) { var caseSensitiveDeps = new List <string>(); if (config.ProjectMetadata?.Dependencies?.Values != null) { foreach (var group in config.ProjectMetadata.Dependencies.Values) { foreach (var dep in group.Values) { caseSensitiveDeps.Add(dep.Id); } } } var deps = normalizedSpec.Dependencies.Split(','); for (int i = 0; i < deps.Length; ++i) { var found = false; foreach (var caseSensitiveDep in caseSensitiveDeps) { if (caseSensitiveDep.Equals(deps[i], StringComparison.OrdinalIgnoreCase)) { deps[i] = caseSensitiveDep; found = true; } } if (!found) { return(NotFound($"Dependency '{deps[i]}' not found.")); } } normalizedSpec.Dependencies = string.Join(',', deps); } Logger.LogDebug("Project specification: {ProjectSpec}", normalizedSpec); var project = _projectGenerator.GenerateProject(normalizedSpec); if (project is null) { return(NotFound($"No project template for spec: {normalizedSpec}")); } var archiveBytes = archiver.ToBytes(project.FileEntries); return(File( archiveBytes, $"application/{normalizedSpec.Packaging}", $"{normalizedSpec.Name}{archiver.GetFileExtension()}")); }