xambassador 0.0.1 → 0.0.3

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 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: