/// <summary> /// Adapt the project. /// </summary> public async Task <FdaStatsDTO> AdoptAsync(ProjectInfo projectInfo, string inputDocUrl) { _logger.LogInformation($"Adopt project '{projectInfo.Name}'"); var projectStorage = await _userResolver.GetProjectStorageAsync(projectInfo.Name); var adoptionData = await _arranger.ForAdoptionAsync(inputDocUrl, projectInfo.TopLevelAssembly); ProcessingResult result = await _fdaClient.AdoptAsync(adoptionData); if (!result.Success) { var message = $"Failed to process '{projectInfo.Name}' project."; _logger.LogError(message); throw new FdaProcessingException(message, result.ReportUrl); } // rearrange generated data according to the parameters hash await _arranger.MoveProjectAsync(projectStorage.Project, projectInfo.TopLevelAssembly); _logger.LogInformation("Cache the project locally"); var bucket = await _userResolver.GetBucketAsync(); await projectStorage.EnsureLocalAsync(bucket); // save adoption statistics var ossNames = projectStorage.GetOssNames(); await bucket.UploadAsJsonAsync(ossNames.StatsAdopt, result.Stats); await bucket.CopyAsync(ossNames.StatsAdopt, ossNames.StatsUpdate); return(FdaStatsDTO.All(result.Stats)); }
/// <summary> /// Adopt the project. /// </summary> public async Task <(FdaStatsDTO stats, string reportUrl)> AdoptAsync(ProjectInfo projectInfo, string inputDocUrl) { _logger.LogInformation($"Adopt project '{projectInfo.Name}'"); var projectStorage = await _userResolver.GetProjectStorageAsync(projectInfo.Name); var adoptionData = await _arranger.ForAdoptionAsync(inputDocUrl, projectInfo.TopLevelAssembly); ProcessingResult result = await _fdaClient.AdoptAsync(adoptionData); if (!result.Success) { var message = $"Failed to process '{projectInfo.Name}' project."; _logger.LogError(message); throw new FdaProcessingException(message, result.ReportUrl); } // rearrange generated data according to the parameters hash await _arranger.MoveProjectAsync(projectStorage.Project, projectInfo.TopLevelAssembly); _logger.LogInformation("Cache the project locally"); var bucket = await _userResolver.GetBucketAsync(); // check for adoption errors // TECHDEBT: this should be done before `MoveProjectAsync`, but it will leave "garbage" at OSS. Solve it someday. var messages = await bucket.DeserializeAsync <Message[]>(projectStorage.Project.OssAttributes.AdoptMessages); var errors = messages.Where(m => m.Severity == Severity.Error).Select(m => m.Text).ToArray(); if (errors.Length > 0) { throw new ProcessingException("Adoption failed", errors); } await projectStorage.EnsureLocalAsync(bucket); // save adoption statistics var ossNames = projectStorage.GetOssNames(); await bucket.UploadAsJsonAsync(ossNames.StatsAdopt, result.Stats); await bucket.CopyAsync(ossNames.StatsAdopt, ossNames.StatsUpdate); return(FdaStatsDTO.All(result.Stats), result.ReportUrl); }
/// <summary> /// Adapt the project. /// </summary> public async Task AdoptAsync(ProjectInfo projectInfo, string inputDocUrl) { _logger.LogInformation("Adopt the project"); var projectStorage = await _userResolver.GetProjectStorageAsync(projectInfo.Name); var adoptionData = await _arranger.ForAdoptionAsync(inputDocUrl, projectInfo.TopLevelAssembly); ProcessingResult result = await _fdaClient.AdoptAsync(adoptionData); if (!result.Success) { _logger.LogError($"Failed to process '{projectInfo.Name}' project."); throw new FdaProcessingException($"Failed to process '{projectInfo.Name}' project.", result.ReportUrl); } // rearrange generated data according to the parameters hash await _arranger.MoveProjectAsync(projectStorage.Project, projectInfo.TopLevelAssembly); _logger.LogInformation("Cache the project locally"); var bucket = await _userResolver.GetBucketAsync(); await projectStorage.EnsureLocalAsync(bucket); }