From 952f229ed513c5cddb1872d7bfaf6460588ddffa Mon Sep 17 00:00:00 2001 From: Ryosuke Ito Date: Fri, 2 Feb 2024 03:51:57 +0900 Subject: [PATCH] Fix compatibility issue with Octokit >= 8 --- lib/danger/request_sources/github/github.rb | 4 ++- .../lib/danger/request_sources/github_spec.rb | 36 +++++++++++++++++++ 2 files changed, 39 insertions(+), 1 deletion(-) diff --git a/lib/danger/request_sources/github/github.rb b/lib/danger/request_sources/github/github.rb index bd04a928..5bd91fe0 100644 --- a/lib/danger/request_sources/github/github.rb +++ b/lib/danger/request_sources/github/github.rb @@ -349,8 +349,10 @@ def submit_inline_comments_for_kind!(kind, messages, diff_lines, danger_comments if matching_comments.empty? begin + # Since Octokit v8, the signature of create_pull_request_comment has been changed. + # See https://github.com/danger/danger/issues/1475 for detailed information. client.create_pull_request_comment(ci_source.repo_slug, ci_source.pull_request_id, - body, head_ref, m.file, position) + body, head_ref, m.file, (Octokit::MAJOR >= 8 ? m.line : position)) rescue Octokit::UnprocessableEntity => e # Show more detail for UnprocessableEntity error message = [e, "body: #{body}", "head_ref: #{head_ref}", "filename: #{m.file}", "position: #{position}"].join("\n") diff --git a/spec/lib/danger/request_sources/github_spec.rb b/spec/lib/danger/request_sources/github_spec.rb index e9fc70c7..77edf20c 100644 --- a/spec/lib/danger/request_sources/github_spec.rb +++ b/spec/lib/danger/request_sources/github_spec.rb @@ -413,6 +413,42 @@ allow(@g).to receive(:submit_pull_request_status!) end + context "with Octokit v7" do + it "passes relative line number in the diff hunk to client.create_pull_request_comment" do + stub_const("Octokit::MAJOR", 7) + + allow(@g.client).to receive(:pull_request_comments).with("artsy/eigen", "800").and_return([]) + + allow(@g.client).to receive(:create_pull_request_comment) + + expect(@g.client).to receive(:delete_comment).with("artsy/eigen", inline_issue_id_1).and_return({}) + expect(@g.client).to receive(:delete_comment).with("artsy/eigen", inline_issue_id_2).and_return({}) + expect(@g.client).to receive(:delete_comment).with("artsy/eigen", main_issue_id).and_return({}) + + v = Danger::Violation.new("Sure thing", true, "Rakefile", 34) + @g.update_pull_request!(warnings: [], errors: [], messages: [v]) + expect(@g.client).to have_received(:create_pull_request_comment).with("artsy/eigen", "800", anything, "561827e46167077b5e53515b4b7349b8ae04610b", "Rakefile", 7) + end + end + + context "with Octokit v8" do + it "passes absolute line number in the file to client.create_pull_request_comment" do + stub_const("Octokit::MAJOR", 8) + + allow(@g.client).to receive(:pull_request_comments).with("artsy/eigen", "800").and_return([]) + + allow(@g.client).to receive(:create_pull_request_comment) + + expect(@g.client).to receive(:delete_comment).with("artsy/eigen", inline_issue_id_1).and_return({}) + expect(@g.client).to receive(:delete_comment).with("artsy/eigen", inline_issue_id_2).and_return({}) + expect(@g.client).to receive(:delete_comment).with("artsy/eigen", main_issue_id).and_return({}) + + v = Danger::Violation.new("Sure thing", true, "Rakefile", 34) + @g.update_pull_request!(warnings: [], errors: [], messages: [v]) + expect(@g.client).to have_received(:create_pull_request_comment).with("artsy/eigen", "800", anything, "561827e46167077b5e53515b4b7349b8ae04610b", "Rakefile", 34) + end + end + it "deletes all inline comments if there are no violations at all" do allow(@g.client).to receive(:pull_request_comments).with("artsy/eigen", "800").and_return([])