private async Task <PullRequestModel> GetPullRequestModel(int prNumber, string repoName, string packageName, string originalFile, string language) { var pullRequestModel = await _pullRequestsRepository.GetPullRequestAsync(prNumber, repoName, packageName, language); if (pullRequestModel == null) { string[] repoInfo = repoName.Split("/"); var pullRequest = await _githubClient.PullRequest.Get(repoInfo[0], repoInfo[1], prNumber); pullRequestModel = new PullRequestModel() { RepoName = repoName, PullRequestNumber = prNumber, FilePath = originalFile, Author = pullRequest.User.Login, PackageName = packageName, Language = language }; } return(pullRequestModel); }
// API change detection for PR will pull artifact from devops artifact public async Task DetectApiChanges(string buildId, string artifactName, string originalFileName, string commitSha, string repoName, string packageName, int prNumber, string codeFileName = "") { var requestTelemetry = new RequestTelemetry { Name = "Detecting API changes for PR: " + prNumber }; var operation = _telemetryClient.StartOperation(requestTelemetry); try { string[] repoInfo = repoName.Split("/"); var pullRequestModel = await _pullRequestsRepository.GetPullRequestAsync(prNumber, repoName, packageName); if (pullRequestModel == null) { var issue = await _githubClient.Issue.Get(repoInfo[0], repoInfo[1], prNumber); pullRequestModel = new PullRequestModel() { RepoName = repoName, PullRequestNumber = prNumber, FilePath = originalFileName, Author = issue.User.Login, PackageName = packageName }; } else { if (pullRequestModel.Commits.Any(c => c == commitSha)) { // PR commit is already processed. No need to reprocess it again. return; } } pullRequestModel.Commits.Add(commitSha); await AssertPullRequestCreatorPermission(pullRequestModel); using var memoryStream = new MemoryStream(); var codeFile = await _reviewManager.GetCodeFile(repoName, buildId, artifactName, packageName, originalFileName, codeFileName, memoryStream); if (codeFile != null) { var apiDiff = await GetApiDiffFromAutomaticReview(codeFile, prNumber, originalFileName, memoryStream, pullRequestModel); if (apiDiff != "") { await _githubClient.Issue.Comment.Create(repoInfo[0], repoInfo[1], prNumber, apiDiff); } } else { _telemetryClient.TrackTrace("Failed to download artifact. Please recheck build id and artifact path values in API change detection request."); } } catch (Exception ex) { _telemetryClient.TrackException(ex); } finally { _telemetryClient.StopOperation(operation); } }