tutter-sppuppet 0.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/.gemspec +16 -0
- data/README.md +23 -0
- data/lib/tutter/action/sppuppet.rb +52 -0
- metadata +48 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: fb3374056a2601ef388af3b3119d6fc236e00030
|
4
|
+
data.tar.gz: acc0ca1594ca46c7ef6bb4e701311f1d41a4d616
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: df26292e971f810911aec4f64885f177d59057374ec707afae0f299c272f2e57fbda41d2f0b3d08b7a252d92681fcd0062534ec898562f302aa2b733d53d88e3
|
7
|
+
data.tar.gz: ed4f4058f138b80b8fb86d9946450ad21fd4b03b65f67631858271043c7d7b8931308fe38d4352dfd59bc3b4070b0bcbd2bb752b07381b0bbe2cff5e6c073939
|
data/.gemspec
ADDED
@@ -0,0 +1,16 @@
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
2
|
+
Gem::Specification.new do |s|
|
3
|
+
s.name = 'tutter-sppuppet'
|
4
|
+
s.version = '0.0.1'
|
5
|
+
s.author = 'Johan Haals'
|
6
|
+
s.email = ['johan.haals@gmail.com']
|
7
|
+
s.homepage = 'https://github.com/jhaals/tutter-sppuppet'
|
8
|
+
s.summary = 'Github code review without collaborator access'
|
9
|
+
s.description = 'This tutter action let non collaborators review and merge code without having more then read access to the project'
|
10
|
+
s.license = 'Apache 2.0'
|
11
|
+
|
12
|
+
s.files = `git ls-files`.split("\n")
|
13
|
+
s.require_paths = ['lib']
|
14
|
+
|
15
|
+
s.required_ruby_version = '>= 1.8.7'
|
16
|
+
end
|
data/README.md
ADDED
@@ -0,0 +1,23 @@
|
|
1
|
+
# tutter-sppuppet
|
2
|
+
|
3
|
+
This action let non collaborators review
|
4
|
+
and merge code without having more then read access to the project.
|
5
|
+
|
6
|
+
1. A pull request get submitted
|
7
|
+
2. Someone thinks it looks good and adds a _+1_ comment
|
8
|
+
3. Another person comment _+1_
|
9
|
+
4. The pull request can be merged by commenting _!merge_ when it has the
|
10
|
+
desired amount of +1's(configurable)
|
11
|
+
|
12
|
+
A pull request will be blocked if it has a _-1_ comment
|
13
|
+
|
14
|
+
|
15
|
+
### tutter.yaml sppuppet specific settings
|
16
|
+
|
17
|
+
action: 'sppuppet'
|
18
|
+
action_settings:
|
19
|
+
plus_ones_required: 3
|
20
|
+
|
21
|
+
### TODO
|
22
|
+
* whitelist
|
23
|
+
* blacklist
|
@@ -0,0 +1,52 @@
|
|
1
|
+
class Sppuppet
|
2
|
+
|
3
|
+
def initialize(settings, client, project, data)
|
4
|
+
@settings = settings
|
5
|
+
@client = client
|
6
|
+
@project = project
|
7
|
+
@data = data
|
8
|
+
end
|
9
|
+
|
10
|
+
def run
|
11
|
+
pull_request_id = @data['issue']['number']
|
12
|
+
pr = @client.pull_request @project, pull_request_id
|
13
|
+
plus_one = {}
|
14
|
+
merge = false
|
15
|
+
|
16
|
+
if pr.mergeable_state != 'clean'
|
17
|
+
puts "merge state for #{@project} #{pull_request_id} is not clean. Current state: #{pr.mergeable_state}"
|
18
|
+
return false
|
19
|
+
end
|
20
|
+
|
21
|
+
# Don't care about code we can't merge
|
22
|
+
return false unless pr.mergeable
|
23
|
+
|
24
|
+
comments = @client.issue_comments(@project, pull_request_id)
|
25
|
+
|
26
|
+
# Check each comment for +1 and merge comments
|
27
|
+
comments.each do |i|
|
28
|
+
|
29
|
+
if /^(\+1|:\+1)/.match i.body
|
30
|
+
# pull request submitter cant +1
|
31
|
+
|
32
|
+
unless pr.user.login == i.attrs[:user].attrs[:login]
|
33
|
+
plus_one[i.attrs[:user].attrs[:login]] = 1
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
37
|
+
# TODO it should calculate the +1's - the -1's
|
38
|
+
# Never merge if someone says -1
|
39
|
+
if /^(\-1|:\-1:)/.match i.body
|
40
|
+
puts "#{@project} #{pull_request_id} has a -1. I will not take the blame"
|
41
|
+
return false
|
42
|
+
end
|
43
|
+
end
|
44
|
+
|
45
|
+
merge = true if comments.last.body == '!merge'
|
46
|
+
|
47
|
+
if plus_one.count >= @settings['plus_ones_required'] and merge
|
48
|
+
puts "merging #{pull_request_id} #{@project}"
|
49
|
+
@client.merge_pull_request(@project, pull_request_id, 'SHIPPING!!')
|
50
|
+
end
|
51
|
+
end
|
52
|
+
end
|
metadata
ADDED
@@ -0,0 +1,48 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: tutter-sppuppet
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.1
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Johan Haals
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2014-02-03 00:00:00.000000000 Z
|
12
|
+
dependencies: []
|
13
|
+
description: This tutter action let non collaborators review and merge code without
|
14
|
+
having more then read access to the project
|
15
|
+
email:
|
16
|
+
- johan.haals@gmail.com
|
17
|
+
executables: []
|
18
|
+
extensions: []
|
19
|
+
extra_rdoc_files: []
|
20
|
+
files:
|
21
|
+
- .gemspec
|
22
|
+
- README.md
|
23
|
+
- lib/tutter/action/sppuppet.rb
|
24
|
+
homepage: https://github.com/jhaals/tutter-sppuppet
|
25
|
+
licenses:
|
26
|
+
- Apache 2.0
|
27
|
+
metadata: {}
|
28
|
+
post_install_message:
|
29
|
+
rdoc_options: []
|
30
|
+
require_paths:
|
31
|
+
- lib
|
32
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
33
|
+
requirements:
|
34
|
+
- - '>='
|
35
|
+
- !ruby/object:Gem::Version
|
36
|
+
version: 1.8.7
|
37
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
38
|
+
requirements:
|
39
|
+
- - '>='
|
40
|
+
- !ruby/object:Gem::Version
|
41
|
+
version: '0'
|
42
|
+
requirements: []
|
43
|
+
rubyforge_project:
|
44
|
+
rubygems_version: 2.0.3
|
45
|
+
signing_key:
|
46
|
+
specification_version: 4
|
47
|
+
summary: Github code review without collaborator access
|
48
|
+
test_files: []
|