tutter-sppuppet 0.0.18 → 0.0.19
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +8 -8
- data/lib/tutter/action/sppuppet.rb +48 -50
- data/tutter-sppuppet.gemspec +1 -1
- metadata +1 -1
checksums.yaml
CHANGED
@@ -1,15 +1,15 @@
|
|
1
1
|
---
|
2
2
|
!binary "U0hBMQ==":
|
3
3
|
metadata.gz: !binary |-
|
4
|
-
|
4
|
+
MjA4YjAxMWIwYjI2ZmJkZmE2YjljMTVjMzgxMDBiMDQxYzYyZTVjZQ==
|
5
5
|
data.tar.gz: !binary |-
|
6
|
-
|
6
|
+
Y2M5NGY1YzFlYjI0ZjA4MTM2OTFiYjdjN2M4Yjk1NTBkMzI1MmZkZg==
|
7
7
|
SHA512:
|
8
8
|
metadata.gz: !binary |-
|
9
|
-
|
10
|
-
|
11
|
-
|
9
|
+
ZmU2YmJlOGExNmFjZjVlMGE4ZWMzYzRmY2EwOTg1MmZmZGY5MjhjMzVhMTBk
|
10
|
+
YjBlYzkyZmZiZDZjYTYwNWE0ZTczYzIxODkyYzI4NDdmMmRkNmU5MmQ4NjVm
|
11
|
+
M2JiNmJlYTk5ZTE0ODdjNWRiZjZkNDMzN2Q1ZTRiZjVjNGMxMDA=
|
12
12
|
data.tar.gz: !binary |-
|
13
|
-
|
14
|
-
|
15
|
-
|
13
|
+
NjJmY2Q1OWM5ZDU5NGU0YWM3ZTJiNTljYjVmMzUzODZkMjA2MmIwNDc0OWI0
|
14
|
+
NGVmZGNhNzhmZmFmZjJlMWUxMzk5OGJjNzBhNmJlOTNiZGE4MzZiMDhkOTU4
|
15
|
+
Y2ZlOWY5ZTQwNDBjNWNkZWI1MDBkMTZkMWE1YWMxMGYxYjg0ODU=
|
@@ -23,14 +23,18 @@ class Sppuppet
|
|
23
23
|
|
24
24
|
pull_request_id = @data['issue']['number']
|
25
25
|
pr = @client.pull_request @project, pull_request_id
|
26
|
-
|
26
|
+
votes = {}
|
27
27
|
|
28
|
-
|
29
|
-
|
30
|
-
|
28
|
+
merge = (@data['comment']['body'] == '!merge' ||
|
29
|
+
@data['comment']['body'].start_with?(':shipit:'))
|
30
|
+
|
31
|
+
return 200, 'Not a merge comment' unless merge
|
31
32
|
|
32
|
-
|
33
|
-
|
33
|
+
unless pr.mergeable_state == 'clean'
|
34
|
+
msg = "Merge state for #{@project} #{pull_request_id} is not clean. Current state: #{pr.mergeable_state}"
|
35
|
+
@client.add_comment(@project, pull_request_id, msg)
|
36
|
+
return 200, msg
|
37
|
+
end
|
34
38
|
|
35
39
|
# We fetch the latest commit and it's date.
|
36
40
|
last_commit = @client.pull_request_commits(@project, pull_request_id).last
|
@@ -40,39 +44,38 @@ class Sppuppet
|
|
40
44
|
|
41
45
|
# Check each comment for +1 and merge comments
|
42
46
|
comments.each do |i|
|
43
|
-
|
44
|
-
#
|
47
|
+
# Comment is older than last commit.
|
48
|
+
# We only want to check for +1 in newer comments
|
45
49
|
next if last_commit_date > i.created_at
|
46
50
|
|
47
|
-
|
51
|
+
match = /^:?([+-])1:?/.match(i.body)
|
52
|
+
if match
|
53
|
+
score = match[1] == '+' ? 1 : -1
|
48
54
|
# pull request submitter cant +1
|
49
55
|
unless pr.user.login == i.attrs[:user].attrs[:login]
|
50
|
-
|
56
|
+
votes[i.attrs[:user].attrs[:login]] = score
|
51
57
|
end
|
52
58
|
end
|
53
|
-
|
54
|
-
# TODO it should calculate the +1's - the -1's
|
55
|
-
# Never merge if someone says -1
|
56
|
-
if /^(\-1|:\-1:)/.match i.body
|
57
|
-
return 200, "#{@project} #{pull_request_id} has a -1. I will not take the blame"
|
58
|
-
end
|
59
59
|
end
|
60
60
|
|
61
|
-
|
62
|
-
|
61
|
+
num_votes = votes.values.reduce(0) { |a, e| a + e }
|
62
|
+
if num_votes < @settings['plus_ones_required']
|
63
|
+
msg = "Not enough plus ones. #{@settings['plus_ones_required']} required, and only have #{num_votes}"
|
64
|
+
@client.add_comment(@project, pull_request_id, msg)
|
65
|
+
return 200, msg
|
66
|
+
end
|
63
67
|
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
merge_msg = <<MERGE_MSG
|
68
|
+
json = { url: pr.url,
|
69
|
+
title: pr.title,
|
70
|
+
author: pr.user.login,
|
71
|
+
description: pr.body,
|
72
|
+
commits: @client.pull_request_commits(@project, pr.number).map { |c| { author: c.author, message: c.commit.message, sha: c.commit.tree.sha } },
|
73
|
+
head_sha: pr.head.sha,
|
74
|
+
tests: @client.combined_status(@project, pr.head.sha).statuses.map { |s| {state: s.state, url: s.target_url, description: s.description } },
|
75
|
+
reviewers: plus_one.keys,
|
76
|
+
deployer: comments.last.user.login }
|
77
|
+
# TODO: Word wrap description
|
78
|
+
merge_msg = <<MERGE_MSG
|
76
79
|
Title: #{pr.title}
|
77
80
|
Description: #{pr.body}
|
78
81
|
Author: #{pr.user.login}
|
@@ -80,25 +83,20 @@ Reviewers: #{plus_one.keys.join ', '}
|
|
80
83
|
Deployer: #{comments.last.user.login}
|
81
84
|
URL: #{pr.url}
|
82
85
|
MERGE_MSG
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
end
|
96
|
-
return 200, "merging #{pull_request_id} #{@project}"
|
97
|
-
elsif plus_one.count >= @settings['plus_ones_required']
|
98
|
-
return 200, "have enough +1, but no merge command"
|
99
|
-
else
|
100
|
-
return 200, "not enough +1, have #{plus_one.count} but need #{@settings['plus_ones_required']}"
|
86
|
+
begin
|
87
|
+
merge_commit = @client.merge_pull_request(@project, pull_request_id, merge_msg)
|
88
|
+
rescue Octokit::MethodNotAllowed => e
|
89
|
+
return 200, "Pull request not mergeable: #{e.message}"
|
90
|
+
end
|
91
|
+
puts merge_commit.inspect
|
92
|
+
json[:merge_sha] = merge_commit.sha
|
93
|
+
report_directory = "#{@settings['reports_dir']}/#{merge_commit.sha[0..1]}/#{merge_commit.sha[2..3]}"
|
94
|
+
report_path = "#{report_directory}/#{merge_commit.sha}.json"
|
95
|
+
if @settings['generate_reports']
|
96
|
+
FileUtils.mkdir_p report_directory
|
97
|
+
File.open(report_path, 'w') { |f| f.write(JSON.pretty_generate(json)) }
|
101
98
|
end
|
99
|
+
return 200, "merging #{pull_request_id} #{@project}"
|
102
100
|
when 'pull_request'
|
103
101
|
# If a new pull request is opened, comment with instructions
|
104
102
|
if @data['action'] == 'opened' && @settings['post_instructions']
|
@@ -106,9 +104,9 @@ MERGE_MSG
|
|
106
104
|
comment = @settings['instructions'] || "To merge at least #{@settings['plus_ones_required']} person other than the submitter needs to write a comment with saying _+1_ or :+1:. Then write _!merge_ or :shipit: to trigger the merging."
|
107
105
|
begin
|
108
106
|
@client.add_comment(@project, issue, comment)
|
109
|
-
return 200,
|
107
|
+
return 200, 'Commented!'
|
110
108
|
rescue Octokit::NotFound
|
111
|
-
return 404,
|
109
|
+
return 404, 'Octokit returned 404, this could be an issue with your access token'
|
112
110
|
rescue Octokit::Unauthorized
|
113
111
|
return 401, "Authorization to #{@project} failed, please verify your access token"
|
114
112
|
rescue Octokit::TooManyLoginAttempts
|
data/tutter-sppuppet.gemspec
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
# -*- encoding: utf-8 -*-
|
2
2
|
Gem::Specification.new do |s|
|
3
3
|
s.name = 'tutter-sppuppet'
|
4
|
-
s.version = '0.0.
|
4
|
+
s.version = '0.0.19'
|
5
5
|
s.author = ['Johan Haals', 'Erik Dalén', 'Alexey Lapitsky']
|
6
6
|
s.email = ['johan.haals@gmail.com', 'dalen@spotify.com', 'alexey@spotify.com']
|
7
7
|
s.homepage = 'https://github.com/jhaals/tutter-sppuppet'
|