xambassador 0.0.1 → 0.0.3

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 46e81dff0f6815d97e5af8c3c461765caa64ed56
4
- data.tar.gz: 08c5131cca09907be47e21a44e86d2184a99aa77
3
+ metadata.gz: 9b4ff6cc5126ea0b156dec8a3884a1ad19d0c76a
4
+ data.tar.gz: 59ae4468f603a71ba1954a3bd8bf4b01db7f33cb
5
5
  SHA512:
6
- metadata.gz: 4f7ae5827be99be09858b8efb6d6b6fc93270f0fe34c52640f39df75858e8fc6789f29ccc5c93b8e39bf4592f146fd9b4ecdde2a5a903db68bcae1f941ddba4e
7
- data.tar.gz: 3340053d31ac59e31a339f37e73f05dda935520d27091e984daba1e28fdbd6f787c302be379d62ab1f15f64162d5e17bcba520e2b648d6954fbaf91549fb0e65
6
+ metadata.gz: 7abdb23e562f666284c188b7e67b5a870da3f028d25021f652b94a653221389f04689b935bed43cdded263eaa69113a830e5b6d1cbf36729f27d53c3a036cf62
7
+ data.tar.gz: 0980927e527c23becdf82d5e85558bf348c1f64d586fb8cad64570b9a49968dbd469c756f1048c37dc1110d498f1d9009987cede8f79b7479a57a5d8b1be790f
data/lib/xambassador.rb CHANGED
@@ -1,5 +1,5 @@
1
- require 'xambassador/version'
1
+ require "xambassador/version"
2
2
 
3
- # Renegade module
3
+ # Xambassador module
4
4
  module Xambassador
5
5
  end
@@ -0,0 +1,16 @@
1
+ require "octokit"
2
+
3
+ module Xambassador
4
+ # Connection helpers
5
+ class Connection
6
+ attr_reader :client
7
+
8
+ def initialize
9
+ @client ||= Octokit::Client.new(access_token: token)
10
+ end
11
+
12
+ def token
13
+ ENV["GITHUB_AUTH_TOKEN"]
14
+ end
15
+ end
16
+ end
@@ -0,0 +1,34 @@
1
+ require "json"
2
+ require "octokit"
3
+ require "net/https"
4
+ require "uri"
5
+
6
+ require_relative "connection"
7
+ require_relative "status_checks/peer_review"
8
+ require_relative "status_checks/branch_name"
9
+ require_relative "status_checks/protected_files"
10
+
11
+ module Xambassador
12
+ # Pull Request helpers
13
+ class PullRequest
14
+ def initialize(payload)
15
+ action = payload["action"]
16
+
17
+ if action == "labeled" || action == "unlabeled"
18
+ handle_opened_pull_request(payload["pull_request"])
19
+ elsif action == "opened" ||
20
+ action == "synchronize" ||
21
+ action == "reopened"
22
+ handle_opened_pull_request(payload["pull_request"])
23
+ end
24
+ end
25
+
26
+ def handle_opened_pull_request(pull_request)
27
+ @connection = Xambassador::Connection.new
28
+
29
+ Xambassador::PeerReview.new(@connection, pull_request)
30
+ Xambassador::BranchName.new(@connection, pull_request)
31
+ Xambassador::ProtectedFiles.new(@connection, pull_request)
32
+ end
33
+ end
34
+ end
@@ -0,0 +1,43 @@
1
+ module Xambassador
2
+ # Status Check class
3
+ class StatusCheck
4
+ def initialize(connection, pull_request, context)
5
+ @name = pull_request["base"]["repo"]["full_name"]
6
+ @sha = pull_request["head"]["sha"]
7
+
8
+ @connection = connection
9
+ @context = context
10
+
11
+ @description_pending = "Pending"
12
+ @description_success = ""
13
+ @description_failure = "Failure"
14
+ end
15
+
16
+ def pending
17
+ options = {
18
+ context: @context,
19
+ description: @description_pending
20
+ }
21
+
22
+ @connection.client.create_status(@name, @sha, "pending", options)
23
+ end
24
+
25
+ def success
26
+ options = {
27
+ context: @context,
28
+ description: @description_success
29
+ }
30
+
31
+ @connection.client.create_status(@name, @sha, "success", options)
32
+ end
33
+
34
+ def failure
35
+ options = {
36
+ context: @context,
37
+ description: @description_failure
38
+ }
39
+
40
+ @connection.client.create_status(@name, @sha, "failure", options)
41
+ end
42
+ end
43
+ end
@@ -0,0 +1,26 @@
1
+ require "json"
2
+ require "net/https"
3
+ require "uri"
4
+ require "renegade/branch_name"
5
+
6
+ require_relative "../status_check"
7
+
8
+ module Xambassador
9
+ # Check peer review status
10
+ class BranchName < StatusCheck
11
+ def initialize(connection, pull_request)
12
+ super(connection, pull_request, "Branch Name")
13
+
14
+ branch_check = Renegade::BranchName.new
15
+ @description_failure = branch_check.warning
16
+
17
+ branch_name = pull_request['head']['ref']
18
+
19
+ if branch_check.check_branch_name(branch_name)
20
+ success
21
+ else
22
+ failure
23
+ end
24
+ end
25
+ end
26
+ end
@@ -0,0 +1,61 @@
1
+ require "json"
2
+ require "net/https"
3
+ require "uri"
4
+
5
+ require_relative "../status_check"
6
+
7
+ module Xambassador
8
+ # Check peer review status
9
+ class PeerReview < StatusCheck
10
+ BACKEND_OK = "backend approved".freeze
11
+ FRONTEND_OK = "frontend approved".freeze
12
+ NEEDS_WORK = "needs work".freeze
13
+
14
+ def initialize(connection, pull_request)
15
+ super(connection, pull_request, "Peer Review")
16
+
17
+ @description_pending = "Labels '#{BACKEND_OK}'"\
18
+ " and '#{FRONTEND_OK}' are required"
19
+ @description_failure = "Needs work"
20
+
21
+ fetch_labels(pull_request["issue_url"])
22
+ end
23
+
24
+ def fetch_labels(url)
25
+ uri = URI.parse(url)
26
+
27
+ http = Net::HTTP.new(uri.host, uri.port)
28
+ http.use_ssl = true
29
+ http.verify_mode = OpenSSL::SSL::VERIFY_NONE
30
+ response = http.request(Net::HTTP::Get.new(url))
31
+
32
+ body = JSON.parse(response.body)
33
+ check_labels(body["labels"])
34
+ end
35
+
36
+ def check_labels(labels)
37
+ count = 0
38
+ needs_work = false
39
+
40
+ labels.each do |label|
41
+ if label["name"] == BACKEND_OK || label["name"] == FRONTEND_OK
42
+ count += 1
43
+ elsif label["name"] == NEEDS_WORK
44
+ needs_work = true
45
+ end
46
+ end
47
+
48
+ report_status(count, needs_work)
49
+ end
50
+
51
+ def report_status(count, needs_work)
52
+ if needs_work == true
53
+ failure
54
+ elsif count == 2
55
+ success
56
+ else
57
+ pending
58
+ end
59
+ end
60
+ end
61
+ end
@@ -0,0 +1,60 @@
1
+ require "json"
2
+ require "net/https"
3
+ require "uri"
4
+ require "renegade/branch_name"
5
+ require "uri_template"
6
+
7
+ require_relative "../status_check"
8
+
9
+ module Xambassador
10
+ # Check peer review status
11
+ class ProtectedFiles < StatusCheck
12
+ def initialize(connection, pull_request)
13
+ super(connection, pull_request, "No Protected Files")
14
+
15
+ @description_success = ""
16
+ @description_failure = "Edited protected files"
17
+
18
+ url = pull_request['head']['repo']['trees_url']
19
+
20
+ url_template = URITemplate.new(url)
21
+ fetch_changed_files(url_template.expand('sha' => @sha))
22
+ end
23
+
24
+ def fetch_changed_files(url)
25
+ uri = URI.parse(url)
26
+
27
+ http = Net::HTTP.new(uri.host, uri.port)
28
+ http.use_ssl = true
29
+ http.verify_mode = OpenSSL::SSL::VERIFY_NONE
30
+ response = http.request(Net::HTTP::Get.new(url))
31
+
32
+ body = JSON.parse(response.body)
33
+ check_files(body['tree'])
34
+ end
35
+
36
+ def check_files(files)
37
+ protected_files = ['app.config', 'web.config']
38
+ changed_protected_files = []
39
+
40
+ unless files.empty?
41
+ files.each do |file|
42
+ if protected_files.include?(File.basename(file['path']).downcase)
43
+ changed_protected_files.push(file['path'])
44
+ end
45
+ end
46
+ end
47
+
48
+ report_status(changed_protected_files)
49
+ end
50
+
51
+ def report_status(files)
52
+ if files.empty?
53
+ success
54
+ else
55
+ @description_failure = "You edited #{files}"
56
+ failure
57
+ end
58
+ end
59
+ end
60
+ end
@@ -1,4 +1,4 @@
1
- # Renegade version
1
+ # Xambassador version
2
2
  module Xambassador
3
- VERSION = '0.0.1'.freeze
3
+ VERSION = "0.0.3".freeze
4
4
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: xambassador
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.1
4
+ version: 0.0.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Rather Blue
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2016-03-08 00:00:00.000000000 Z
11
+ date: 2016-03-14 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rake
@@ -42,14 +42,14 @@ dependencies:
42
42
  name: minitest-reporters
43
43
  requirement: !ruby/object:Gem::Requirement
44
44
  requirements:
45
- - - "~>"
45
+ - - '='
46
46
  - !ruby/object:Gem::Version
47
47
  version: 1.1.7
48
48
  type: :development
49
49
  prerelease: false
50
50
  version_requirements: !ruby/object:Gem::Requirement
51
51
  requirements:
52
- - - "~>"
52
+ - - '='
53
53
  - !ruby/object:Gem::Version
54
54
  version: 1.1.7
55
55
  - !ruby/object:Gem::Dependency
@@ -66,6 +66,20 @@ dependencies:
66
66
  - - "~>"
67
67
  - !ruby/object:Gem::Version
68
68
  version: 0.37.2
69
+ - !ruby/object:Gem::Dependency
70
+ name: webmock
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - "~>"
74
+ - !ruby/object:Gem::Version
75
+ version: 1.24.2
76
+ type: :development
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - "~>"
81
+ - !ruby/object:Gem::Version
82
+ version: 1.24.2
69
83
  - !ruby/object:Gem::Dependency
70
84
  name: octokit
71
85
  requirement: !ruby/object:Gem::Requirement
@@ -73,13 +87,41 @@ dependencies:
73
87
  - - "~>"
74
88
  - !ruby/object:Gem::Version
75
89
  version: 4.3.0
76
- type: :development
90
+ type: :runtime
77
91
  prerelease: false
78
92
  version_requirements: !ruby/object:Gem::Requirement
79
93
  requirements:
80
94
  - - "~>"
81
95
  - !ruby/object:Gem::Version
82
96
  version: 4.3.0
97
+ - !ruby/object:Gem::Dependency
98
+ name: renegade
99
+ requirement: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - '='
102
+ - !ruby/object:Gem::Version
103
+ version: 0.1.49
104
+ type: :runtime
105
+ prerelease: false
106
+ version_requirements: !ruby/object:Gem::Requirement
107
+ requirements:
108
+ - - '='
109
+ - !ruby/object:Gem::Version
110
+ version: 0.1.49
111
+ - !ruby/object:Gem::Dependency
112
+ name: uri_template
113
+ requirement: !ruby/object:Gem::Requirement
114
+ requirements:
115
+ - - '='
116
+ - !ruby/object:Gem::Version
117
+ version: 0.7.0
118
+ type: :runtime
119
+ prerelease: false
120
+ version_requirements: !ruby/object:Gem::Requirement
121
+ requirements:
122
+ - - '='
123
+ - !ruby/object:Gem::Version
124
+ version: 0.7.0
83
125
  description: Gem description
84
126
  email: ratherblue@gmail.com
85
127
  executables: []
@@ -87,6 +129,12 @@ extensions: []
87
129
  extra_rdoc_files: []
88
130
  files:
89
131
  - lib/xambassador.rb
132
+ - lib/xambassador/connection.rb
133
+ - lib/xambassador/pull_request.rb
134
+ - lib/xambassador/status_check.rb
135
+ - lib/xambassador/status_checks/branch_name.rb
136
+ - lib/xambassador/status_checks/peer_review.rb
137
+ - lib/xambassador/status_checks/protected_files.rb
90
138
  - lib/xambassador/version.rb
91
139
  homepage: http://github.com/ratherblue/xambassador
92
140
  licenses: