コード例 #1
0
        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);
        }
コード例 #2
0
        // 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);
            }
        }