From 89cca059e7bff0dc2cbd6be213ea5d4ac699ef4c Mon Sep 17 00:00:00 2001 From: Miguel Canavidez Date: Fri, 15 Apr 2022 13:03:00 +0200 Subject: [PATCH] Decoration issue fails due invalid project id when branch is in fork --- .../almclient/gitlab/model/MergeRequest.java | 7 +++++++ .../gitlab/GitlabMergeRequestDecorator.java | 16 ++++++++-------- ...tlabMergeRequestDecoratorIntegrationTest.java | 1 + .../gitlab/GitlabMergeRequestDecoratorTest.java | 1 + 4 files changed, 17 insertions(+), 8 deletions(-) diff --git a/src/main/java/com/github/mc1arke/sonarqube/plugin/almclient/gitlab/model/MergeRequest.java b/src/main/java/com/github/mc1arke/sonarqube/plugin/almclient/gitlab/model/MergeRequest.java index 30c7d3d89..c37f53c64 100644 --- a/src/main/java/com/github/mc1arke/sonarqube/plugin/almclient/gitlab/model/MergeRequest.java +++ b/src/main/java/com/github/mc1arke/sonarqube/plugin/almclient/gitlab/model/MergeRequest.java @@ -24,15 +24,18 @@ public class MergeRequest { private final long iid; private final DiffRefs diffRefs; private final long sourceProjectId; + private final long targetProjectId; private final String webUrl; public MergeRequest(@JsonProperty("iid") long iid, @JsonProperty("diff_refs") DiffRefs diffRefs, @JsonProperty("source_project_id") long sourceProjectId, + @JsonProperty("target_project_id") long targetProjectId, @JsonProperty("web_url") String webUrl) { this.iid = iid; this.diffRefs = diffRefs; this.sourceProjectId = sourceProjectId; this.webUrl = webUrl; + this.targetProjectId = targetProjectId; } public long getIid() { @@ -47,6 +50,10 @@ public long getSourceProjectId() { return sourceProjectId; } + public long getTargetProjectId() { + return targetProjectId; + } + public String getWebUrl() { return webUrl; } diff --git a/src/main/java/com/github/mc1arke/sonarqube/plugin/ce/pullrequest/gitlab/GitlabMergeRequestDecorator.java b/src/main/java/com/github/mc1arke/sonarqube/plugin/ce/pullrequest/gitlab/GitlabMergeRequestDecorator.java index 72a9212c2..37a22f6fc 100644 --- a/src/main/java/com/github/mc1arke/sonarqube/plugin/ce/pullrequest/gitlab/GitlabMergeRequestDecorator.java +++ b/src/main/java/com/github/mc1arke/sonarqube/plugin/ce/pullrequest/gitlab/GitlabMergeRequestDecorator.java @@ -107,7 +107,7 @@ protected User getCurrentUser(GitlabClient gitlabClient) { @Override protected List getCommitIdsForPullRequest(GitlabClient gitlabClient, MergeRequest mergeRequest) { try { - return gitlabClient.getMergeRequestCommits(mergeRequest.getSourceProjectId(), mergeRequest.getIid()).stream() + return gitlabClient.getMergeRequestCommits(mergeRequest.getTargetProjectId(), mergeRequest.getIid()).stream() .map(Commit::getId) .collect(Collectors.toList()); } catch (IOException ex) { @@ -130,7 +130,7 @@ protected void submitPipelineStatus(GitlabClient gitlabClient, MergeRequest merg analysisSummary.getNewCoverage(), pipelineId); - gitlabClient.setMergeRequestPipelineStatus(mergeRequest.getSourceProjectId(), analysis.getCommitSha(), pipelineStatus); + gitlabClient.setMergeRequestPipelineStatus(mergeRequest.getTargetProjectId(), analysis.getCommitSha(), pipelineStatus); } catch (IOException ex) { throw new IllegalStateException("Could not update pipeline status in Gitlab", ex); } @@ -141,7 +141,7 @@ protected void submitCommitNoteForIssue(GitlabClient client, MergeRequest mergeR Integer line = Optional.ofNullable(issue.getIssue().getLine()).orElseThrow(() -> new IllegalStateException("No line is associated with this issue")); try { - client.addMergeRequestDiscussion(mergeRequest.getSourceProjectId(), mergeRequest.getIid(), + client.addMergeRequestDiscussion(mergeRequest.getTargetProjectId(), mergeRequest.getIid(), new CommitNote(analysisIssueSummary.format(formatterFactory), mergeRequest.getDiffRefs().getBaseSha(), mergeRequest.getDiffRefs().getStartSha(), @@ -157,11 +157,11 @@ protected void submitCommitNoteForIssue(GitlabClient client, MergeRequest mergeR @Override protected void submitSummaryNote(GitlabClient client, MergeRequest mergeRequest, AnalysisDetails analysis, AnalysisSummary analysisSummary) { try { - Discussion summaryComment = client.addMergeRequestDiscussion(mergeRequest.getSourceProjectId(), + Discussion summaryComment = client.addMergeRequestDiscussion(mergeRequest.getTargetProjectId(), mergeRequest.getIid(), new MergeRequestNote(analysisSummary.format(formatterFactory))); if (analysis.getQualityGateStatus() == QualityGate.Status.OK) { - client.resolveMergeRequestDiscussion(mergeRequest.getSourceProjectId(), mergeRequest.getIid(), summaryComment.getId()); + client.resolveMergeRequestDiscussion(mergeRequest.getTargetProjectId(), mergeRequest.getIid(), summaryComment.getId()); } } catch (IOException ex) { throw new IllegalStateException("Could not submit summary comment to Gitlab", ex); @@ -172,7 +172,7 @@ protected void submitSummaryNote(GitlabClient client, MergeRequest mergeRequest, @Override protected List getDiscussions(GitlabClient client, MergeRequest pullRequest) { try { - return client.getMergeRequestDiscussions(pullRequest.getSourceProjectId(), pullRequest.getIid()); + return client.getMergeRequestDiscussions(pullRequest.getTargetProjectId(), pullRequest.getIid()); } catch (IOException ex) { throw new IllegalStateException("Could not retrieve Merge Request discussions", ex); } @@ -209,7 +209,7 @@ protected boolean isUserNote(Note note) { @Override protected void addNoteToDiscussion(GitlabClient client, Discussion discussion, MergeRequest pullRequest, String note) { try { - client.addMergeRequestDiscussionNote(pullRequest.getSourceProjectId(), pullRequest.getIid(), discussion.getId(), note); + client.addMergeRequestDiscussionNote(pullRequest.getTargetProjectId(), pullRequest.getIid(), discussion.getId(), note); } catch (IOException ex) { throw new IllegalStateException("Could not add note to Merge Request discussion", ex); } @@ -218,7 +218,7 @@ protected void addNoteToDiscussion(GitlabClient client, Discussion discussion, M @Override protected void resolveDiscussion(GitlabClient client, Discussion discussion, MergeRequest pullRequest) { try { - client.resolveMergeRequestDiscussion(pullRequest.getSourceProjectId(), pullRequest.getIid(), discussion.getId()); + client.resolveMergeRequestDiscussion(pullRequest.getTargetProjectId(), pullRequest.getIid(), discussion.getId()); } catch (IOException ex) { throw new IllegalStateException("Could not resolve Merge Request discussion", ex); } diff --git a/src/test/java/com/github/mc1arke/sonarqube/plugin/ce/pullrequest/gitlab/GitlabMergeRequestDecoratorIntegrationTest.java b/src/test/java/com/github/mc1arke/sonarqube/plugin/ce/pullrequest/gitlab/GitlabMergeRequestDecoratorIntegrationTest.java index a6c78e022..9d53ffe81 100644 --- a/src/test/java/com/github/mc1arke/sonarqube/plugin/ce/pullrequest/gitlab/GitlabMergeRequestDecoratorIntegrationTest.java +++ b/src/test/java/com/github/mc1arke/sonarqube/plugin/ce/pullrequest/gitlab/GitlabMergeRequestDecoratorIntegrationTest.java @@ -149,6 +149,7 @@ private void decorateQualityGateStatus(QualityGate.Status status) { wireMockRule.stubFor(get(urlPathEqualTo("/api/v4/projects/" + urlEncode(repositorySlug) + "/merge_requests/" + mergeRequestIid)).willReturn(okJson("{\n" + " \"id\": 15235,\n" + " \"iid\": " + mergeRequestIid + ",\n" + + " \"target_project_id\": " + sourceProjectId + ",\n" + " \"web_url\": \"http://gitlab.example.com/my-group/my-project/merge_requests/1\",\n" + " \"diff_refs\": {\n" + " \"base_sha\":\"d6a420d043dfe85e7c240fd136fc6e197998b10a\",\n" + diff --git a/src/test/java/com/github/mc1arke/sonarqube/plugin/ce/pullrequest/gitlab/GitlabMergeRequestDecoratorTest.java b/src/test/java/com/github/mc1arke/sonarqube/plugin/ce/pullrequest/gitlab/GitlabMergeRequestDecoratorTest.java index 942f1bfd9..009e7dab8 100644 --- a/src/test/java/com/github/mc1arke/sonarqube/plugin/ce/pullrequest/gitlab/GitlabMergeRequestDecoratorTest.java +++ b/src/test/java/com/github/mc1arke/sonarqube/plugin/ce/pullrequest/gitlab/GitlabMergeRequestDecoratorTest.java @@ -114,6 +114,7 @@ public void setUp() throws IOException { when(analysisDetails.getPullRequestId()).thenReturn(Long.toString(MERGE_REQUEST_IID)); when(mergeRequest.getIid()).thenReturn(MERGE_REQUEST_IID); when(mergeRequest.getSourceProjectId()).thenReturn(PROJECT_ID); + when(mergeRequest.getTargetProjectId()).thenReturn(PROJECT_ID); when(mergeRequest.getDiffRefs()).thenReturn(diffRefs); when(mergeRequest.getWebUrl()).thenReturn(MERGE_REQUEST_WEB_URL); when(diffRefs.getBaseSha()).thenReturn(BASE_SHA);