Skip to content
This repository was archived by the owner on Nov 8, 2018. It is now read-only.

Commit 616e4dd

Browse files
nat-hendersonjtarchie
authored andcommitted
Check whether a PR is mergeable.
1 parent a70a94b commit 616e4dd

File tree

4 files changed

+30
-1
lines changed

4 files changed

+30
-1
lines changed

README.md

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,12 @@ resource_types:
5858
* `disable_forks`: *Optional*, default false. If set to `true`, it will filter
5959
out pull requests that were created via users that forked from your repo.
6060

61+
* `only_mergeable`: *Optional*, default false. If set to `true`, it will filter
62+
out pull requests that are not mergeable. A pull request is mergeable if
63+
- It has no merge conflicts.
64+
- The current user has push permissions to the base repository.
65+
- It has at least one review and has been Approved.
66+
6167
* `label`: *Optional.* If set to a string it will only return pull requests that have been
6268
marked with that specific label. It is case insensitive.
6369

assets/lib/filters/mergeable.rb

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
module Filters
2+
class Mergeable
3+
def initialize(pull_requests:, input: Input.instance)
4+
@pull_requests = pull_requests
5+
@input = input
6+
end
7+
8+
def pull_requests
9+
if @input.source.only_mergeable
10+
@memoized ||= @pull_requests.delete_if {|x| !x.mergeable? }
11+
else
12+
@pull_requests
13+
end
14+
end
15+
end
16+
end

assets/lib/pull_request.rb

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,12 @@ def from_fork?
1616
base_repo != head_repo
1717
end
1818

19+
def mergeable?
20+
(@pr['mergeable'] &&
21+
@pr['base']['repo']['permissions']['push'] &&
22+
Octokit.pull_request_reviews(base_repo, id).any? {|r| r['state'] == 'APPROVED'})
23+
end
24+
1925
def equals?(id:, sha:)
2026
[self.sha, self.id.to_s] == [sha, id.to_s]
2127
end

assets/lib/repository.rb

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,11 +5,12 @@
55
require_relative 'filters/label'
66
require_relative 'filters/path'
77
require_relative 'filters/ci_skip'
8+
require_relative 'filters/mergeable'
89

910
class Repository
1011
attr_reader :name
1112

12-
def initialize(name:, input: Input.instance, filters: [Filters::All, Filters::Path, Filters::Fork, Filters::Label, Filters::CISkip])
13+
def initialize(name:, input: Input.instance, filters: [Filters::All, Filters::Path, Filters::Fork, Filters::Label, Filters::CISkip, Filters::Mergeable])
1314
@filters = filters
1415
@name = name
1516
@input = input

0 commit comments

Comments
 (0)