public async Task <RegiConfig> GetConfigurationAsync(CommandOptions options) { DirectoryInfo directory; if (!string.IsNullOrWhiteSpace(options?.ConfigurationPath)) { string configDirectory = _fileSystem.GetDirectoryPath(options.ConfigurationPath, true, "directory"); _fileSystem.WorkingDirectory = configDirectory; directory = new DirectoryInfo(configDirectory); } else { directory = new DirectoryInfo(_fileSystem.WorkingDirectory); } if (directory?.Exists == false) { throw new DirectoryNotFoundException($"Could not find directory: {directory.FullName}"); } FileInfo startupFile = directory.GetOneOfFiles("regi.json", "startup.json"); if (startupFile == null || !startupFile.Exists) { throw new RegiException($"Could not find regi.json or startup.json in directory: {directory.FullName}"); } using var stream = startupFile.OpenRead(); try { RegiConfig config = await JsonSerializer.DeserializeAsync <RegiConfig>(stream, Constants.DefaultSerializerOptions); config.Path = startupFile.FullName; return(config); } catch (Exception e) { string relativePath = Path.GetRelativePath(_fileSystem.WorkingDirectory, startupFile.FullName); throw new RegiException($"Configuration file was not properly formatted: {relativePath}{Environment.NewLine}{ExceptionUtility.GetMessage(e)}", e); } }
public async ValueTask <FileInfo> CreateConfigFileAsync(RegiConfig config) { string configFilePath = Path.Combine(WorkingDirectory, "regi.json"); if (File.Exists(configFilePath)) { throw new RegiException($"There is already a {nameof(Regi)} configuration file at path: {configFilePath}"); } _console.WriteEmphasizedLine($"Creating config file: {configFilePath}"); FileInfo configFile = new FileInfo(configFilePath); using var fileStream = configFile.Create(); await JsonSerializer.SerializeAsync(fileStream, config, Constants.DefaultSerializerOptions); _console.WriteEmphasizedLine($"Job's done."); return(configFile); }
public static void LinkProjectRequirements(IEnumerable<Project> projects, CommandOptions options, RegiConfig config) { foreach (var project in projects) { project.TryAddSource(options, config); foreach (var r in project.Requires) { var requiredProject = config.Projects.FirstOrDefault(p => p.Name.Contains(r, StringComparison.InvariantCultureIgnoreCase)); if (requiredProject == null) requiredProject = config.Services.FirstOrDefault(p => p.Name.Contains(r, StringComparison.InvariantCultureIgnoreCase)); if (requiredProject == null) throw new Exception($"Could not find requirement \"{r}\" defined in project {project.Name}"); requiredProject.TryAddSource(options, config); project.RequiredProjects.Add(requiredProject); } } }