lita-gitlab2jenkins_ghp 0.0.1 → 1.0.0

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: 0908ce7f7863a694a3c39bb3259f8cfcccf42351
4
- data.tar.gz: 17ba6f9d09848dfbca5316d81352a5e733866d67
3
+ metadata.gz: 6bba63e1a106fd9ebd7b3774b0bd2d5e05c8a49b
4
+ data.tar.gz: ae494b139b17f091b0f37378c679064424576948
5
5
  SHA512:
6
- metadata.gz: c61e93f9e8cbbc44df5ffb918f26eeb25dfdf2b69d4ec34c798f61f763c13acd92a29d293a30102cd5d8a25bc064cd6f9c7dc58aa997201482651e6fa8886ae1
7
- data.tar.gz: 895512be891ee28d08d326ec0a14b2ee2c28af861ea3921d9454d59a9f725939bf3f0ec8d2598566db956472b45ea6c38e1f6eb0b8450b088f9f37eec158356c
6
+ metadata.gz: b00508be370616f56cc348b8db4b5201b33e30fe2bad98ace1a4e729b8c5888f5cbd050da066862ab604a78a2de36e4aca4b58e243d0deb8f0b1ac14c75d717a
7
+ data.tar.gz: da05910f3094061400fb98614b4b4096681b7291667af966fed84624b48e203a952904a7fb592c13750d175b76262b1c6b038820725f69a012fe1696eccbc5e9
data/.ruby-version CHANGED
@@ -1 +1 @@
1
- 2.1.0
1
+ 2.0.0-p451
data/README.md CHANGED
@@ -1,6 +1,12 @@
1
1
  # lita-gitlab2jenkins_ghp
2
2
 
3
- TODO: Add a description of the plugin.
3
+ [![Build Status](https://travis-ci.org/jcalonsoh/lita-gitlab2jenkins_ghp.svg)](https://travis-ci.org/jcalonsoh/lita-gitlab2jenkins_ghp)
4
+ [![Code Climate](https://codeclimate.com/github/jcalonsoh/lita-gitlab2jenkins_ghp.png)](https://codeclimate.com/github/jcalonsoh/lita-gitlab2jenkins_ghp)
5
+ [![Coverage Status](https://coveralls.io/repos/jcalonsoh/lita-gitlab2jenkins_ghp/badge.png)](https://coveralls.io/r/jcalonsoh/lita-gitlab2jenkins_ghp)
6
+
7
+ **lita-fitlab2jenkins_ghp** is a [Lita](https://github.com/jimmycuadra/lita) that uses [GitLab](https://www.gitlab.com/gitlab-ce/)
8
+ webhooks and ci-status to be build with [Jenkins](http://jenkins-ci.org/).
9
+
4
10
 
5
11
  ## Installation
6
12
 
@@ -12,17 +18,37 @@ gem "lita-gitlab2jenkins_ghp"
12
18
 
13
19
  ## Configuration
14
20
 
15
- REQUERIMENTS:
21
+ ### REQUERIMENTS:
16
22
 
17
- from Jenkins =>
18
- Gitlab Hook Plugin 1.0.0
19
- Embeddable Build Status 1.4.0
23
+ You will need to install on Jenkins the next plugins =>
20
24
 
25
+ [Gitlab Hook Plugin 1.0.0](https://wiki.jenkins-ci.org/display/JENKINS/Gitlab+Hook+Plugin),
26
+ [Embeddable Build Status 1.4](https://wiki.jenkins-ci.org/display/JENKINS/Embeddable+Build+Status+Plugin),
27
+ [Notification Plugin 1.5](https://wiki.jenkins-ci.org/display/JENKINS/Notification+Plugin)
21
28
 
22
- ## Usage
29
+ ### Example usage YML
23
30
 
24
- TODO: Describe the plugin's features and how to use them.
31
+ ``` ruby
32
+ Lita.configure do |config|
33
+ config.handlers.gitlab2jenkins_ghp.room = '#error_channel'
34
+ config.handlers.gitlab2jenkins_ghp.url_gitlab = 'http://gitlab.example.com'
35
+ config.handlers.gitlab2jenkins_ghp.url_jenkins = 'http://jenkins.example.com'
36
+ config.handlers.gitlab2jenkins_ghp.url_jenkins_hook = '/gitlab/build_now'
37
+ config.handlers.gitlab2jenkins_ghp.url_jenkins_img = '/buildStatus/icon?job='
38
+ config.handlers.gitlab2jenkins_ghp.url_jenkins_icon = '/static/843013a3/images/jenkins.png'
39
+ config.handlers.gitlab2jenkins_ghp.private_token_gitlab = 'some_gitlab_token_from_admin_user'
40
+ config.redis.host = 'redis.example.com'
41
+ end
42
+ ```
43
+
44
+ For more understanding please read [wiki](https://github.com/jcalonsoh/lita-gitlab2jenkins_ghp/wiki)
25
45
 
26
46
  ## License
27
47
 
28
48
  [MIT](http://opensource.org/licenses/MIT)
49
+
50
+ ## TODO:
51
+
52
+ * Make tests for GET scenarios when GitLab queries ci status
53
+ * Refactoring gem to nit loggic flow
54
+ * Add scenario for "Tag push events" on next version
@@ -1,41 +1,67 @@
1
1
  module Lita
2
2
  module Handlers
3
3
  class Gitlab2jenkinsGhp < Handler
4
+
4
5
  def self.default_config(config)
5
- config.room = '#test2'
6
+ config.room = '#test'
6
7
  config.group = 'group_name'
7
8
  config.gitlab_url = 'http://example.gitlab'
8
9
  config.private_token = 'orwejnweuf'
9
10
  config.jenkins_url = 'http://example.jenkins'
10
11
  config.jenkins_hook = '/gitlab/build'
11
- config.saved_request = ''
12
12
  end
13
13
 
14
- http.post '/lita/gitlab2jenkinsghp', :do_mr
15
-
16
- http.post '/lita/gitlab2jenkinsghp_mr_status', :do_mr_change_status
17
-
18
- http.get '/lita/gitlab2jenkinsghp_ci_status/*id_project/builds/*sha_commit', :do_ci_change_status
14
+ http.post '/lita/gitlab2jenkinsghp/*to_route', :receive
19
15
 
20
- http.get '/lita/gitlab2jenkinsghp_ci_status/*id_project', :do_img_jenkins
16
+ http.get '/lita/gitlab2jenkinsghp/*to_route/*id_project/builds/*sha_commit', :receive
21
17
 
22
- def do_mr(request, response)
23
- json_body = extract_json_from_request(request)
24
- Lita.logger.info("Payload: #{json_body}")
25
- data = symbolize parse_payload(json_body)
26
- message = format_message(data, json_body)
18
+ http.get '/lita/gitlab2jenkinsghp/*to_route/*id_project', :receive
27
19
 
20
+ def receive(request, response)
21
+ routing_to = request.params['to_route'] || request.env['router.params'][:to_route][0].to_s
22
+ routing_to_request_method = request.params['request_method'] || request.request_method
23
+ if routing_to_request_method =='POST'
24
+ json_body = request.params['payload'] || extract_json_from_request(request)
25
+ data = symbolize parse_payload(json_body)
26
+ if data.key? :object_attributes
27
+ project_name_target = request.params['project_name_target'] || git_lab_data_project_info(data[:object_attributes][:target_project_id])['name']
28
+ project_source_id_commit = request.params['project_source_id_commit'] || git_lab_data_branch_info(data[:object_attributes][:source_project_id], data[:object_attributes][:source_branch])['commit']['id']
29
+ else
30
+ project_name_target = ''
31
+ project_source_id_commit = ''
32
+ end
33
+ if routing_to == 'gitlab' #receive hook from gitlab to report commits and merge request event
34
+ do_mr(json_body, data, project_name_target, project_source_id_commit)
35
+ elsif routing_to == 'jenkins' #receive hook from jenkins to report job status build
36
+ project_name_params = request.params['project_name_params']
37
+ do_mr_change_status(request, response, json_body, data, project_name_params)
38
+ end
39
+ elsif routing_to_request_method =='GET'
40
+ if routing_to == 'ci_status'
41
+ if request.params['ref'] == 'master'
42
+ # if request.env['router.params'][:sha_commit][0].nil? false
43
+ # do_ci_change_status(request, response)
44
+ do_img_jenkins(request, response)
45
+ else
46
+ message = do_ci_change_status(request, response)
47
+ if message.to_s != 'true'
48
+ response['status'] = message
49
+ Lita.logger.info "CI Final Status: #{message.to_s}"
50
+ end
51
+ # do_img_jenkins(request, response)
52
+ end
53
+ end
54
+ end
55
+ # robot.send_message(target, message)
28
56
  rescue Exception => e
29
- Lita.logger.error "Could not domr: #{e.inspect}"
57
+ Lita.logger.error "Could not receive: #{e.inspect}"
30
58
  end
31
59
 
32
- def do_mr_change_status(request, response)
33
- json_body = extract_json_from_request(request)
60
+ def do_mr_change_status(request, response, json_body, data, project_name_params) # do_mr_change_status(request, response, json_body, data, project_name_params)
34
61
  id_project = request.params['id_project'].to_s
35
62
  Lita.logger.info "Jenkins Proyect: #{id_project}"
36
63
  Lita.logger.info("Payload: #{json_body}")
37
- data = symbolize parse_payload(json_body)
38
- message = format_message_mr(data, json_body, id_project)
64
+ ci_status_setter(data, json_body, id_project, project_name_params)
39
65
 
40
66
  rescue Exception => e
41
67
  Lita.logger.error "Could not domr_change_status: #{e.inspect}"
@@ -45,13 +71,8 @@ module Lita
45
71
  Lita.logger.info "GitLab CI Project ID: #{request.env['router.params'][:id_project]}"
46
72
  Lita.logger.info "GitLab CI Commit SHA: #{request.env['router.params'][:sha_commit]}"
47
73
  Lita.logger.info "GitLab CI Token: #{request.params['token']}"
48
- message = format_message_ci(request.env['router.params'][:id_project][0], request.env['router.params'][:sha_commit][0])
49
- room = Lita.config.handlers.gitlab2jenkins_ghp.room
50
- target = Source.new(room: room)
51
- if message.to_s != 'true'
52
- response['status'] = message
53
- Lita.logger.info "CI Final Status: #{message.to_s}"
54
- end
74
+ format_message_ci(request.env['router.params'][:id_project][0], request.env['router.params'][:sha_commit][0])
75
+
55
76
  rescue Exception => e
56
77
  Lita.logger.error "Could not domr_change_status: #{e.inspect}"
57
78
  end
@@ -59,9 +80,17 @@ module Lita
59
80
  def do_img_jenkins(request, response)
60
81
  project_name = git_lab_data_project_info(request.env['router.params'][:id_project][0])['name']
61
82
 
62
- gkeys = @redis.keys("mr:#{project_name}:*")
83
+ gkeys = @redis.keys("jenkins:#{project_name}:*")
84
+ gkeys.each do |key|
85
+ json_off = redis.get(key)
86
+ jdata = symbolize parse_payload(json_off)
87
+ job = jdata[:name]
88
+ code_climate(job, response)
89
+ end
63
90
 
64
- code_climate('QA-API', response)
91
+ if gkeys.empty?
92
+ nocode_climate(response)
93
+ end
65
94
 
66
95
  rescue Exception => e
67
96
  Lita.logger.error "Could not do_img_jenkins: #{e.inspect}"
@@ -85,6 +114,22 @@ module Lita
85
114
  Lita.logger.error "Could not do_img_jenkins: #{e.inspect}"
86
115
  end
87
116
 
117
+ def nocode_climate(response)
118
+ url = "#{Lita.config.handlers.gitlab2jenkins_ghp.url_jenkins.to_s}"<<"#{Lita.config.handlers.gitlab2jenkins_ghp.url_jenkins_icon.to_s}"
119
+ uri = URI(url)
120
+ res = Net::HTTP.get_response(uri)
121
+
122
+ if res.is_a?(Net::HTTPSuccess)
123
+ response.body << res.body
124
+ response['Content-Type'] = res['Content-Type']
125
+ end
126
+
127
+ Lita.logger.info "Sending Jenkins to Gitlab Code Climate #{url}"
128
+
129
+ rescue Exception => e
130
+ Lita.logger.error "Could not do_img_jenkins: #{e.inspect}"
131
+ end
132
+
88
133
  def extract_json_from_request(request)
89
134
  request.body.rewind
90
135
  request.body.read
@@ -103,21 +148,20 @@ module Lita
103
148
  obj
104
149
  end
105
150
 
106
- def format_message(data, json)
151
+ def do_mr(json_body, data, project_name_target, project_source_id_commit)
107
152
  if data.key? :before
108
- build_branch_hook(data, json)
153
+ build_branch_hook(json_body, data)
109
154
  elsif data.key? :object_kind
110
- build_merge_hook(data, json)
155
+ build_merge_hook(json_body, data, project_name_target, project_source_id_commit)
111
156
  end
112
157
 
113
158
  rescue => e
114
159
  Lita.logger.error "Could not format message: #{e.inspect}"
115
160
  end
116
161
 
117
- def build_branch_hook(data, json)
118
- data[:link] = "<#{data[:repository][:homepage]}|#{data[:repository][:name]}>"
162
+ def build_branch_hook(json, data)
119
163
  redis.set("commit:#{data[:commits][0][:id]}", json.to_s)
120
- "Commit Stored: #{data[:commits][0][:id]}"
164
+ return "Commit Stored: #{data[:commits][0][:id]}"
121
165
  end
122
166
 
123
167
  def gitlab_rescue_commit(project_id, branch)
@@ -156,19 +200,21 @@ module Lita
156
200
  parse_payload((((rescue_gitlab_project_name(id)).to_hash)[:body]))
157
201
  end
158
202
 
159
- def build_merge_hook(data, json)
160
- redis.set("mr:#{git_lab_data_project_info(data[:object_attributes][:target_project_id])['name']}:#{data[:object_attributes][:id]}", json.to_s)
203
+ def build_merge_hook(json, data, project_name_target, project_source_id_commit)
204
+ redis.set("mr:#{project_name_target}:#{data[:object_attributes][:id]}", json.to_s)
161
205
  if ['reopened', 'opened'].include? data[:object_attributes][:state]
162
- Lita.logger.info "It's a merge request"
163
- payload_rescue = redis.get("commit:#{git_lab_data_branch_info(data[:object_attributes][:source_project_id], data[:object_attributes][:source_branch])['commit']['id']}")
206
+ Lita.logger.info "It's a merge request for #{project_source_id_commit}"
207
+ payload_rescue = redis.get("commit:#{project_source_id_commit}")
164
208
  if (payload_rescue).size > 0
165
209
  Lita.logger.info "Merge request found"
166
210
  jenkins_hook_ghp(payload_rescue)
211
+ "Merge Request found to play #{payload_rescue}"
212
+ else
213
+ "No commit found"
167
214
  end
168
215
  else
169
- redis.del("mr:#{git_lab_data_project_info(data[:object_attributes][:target_project_id])['name']}:#{data[:object_attributes][:id]}")
170
- jproject_name = git_lab_data_project_info(data[:object_attributes][:target_project_id])['name']
171
- gkeys = @redis.keys("jenkins:#{jproject_name}:*")
216
+ redis.del("mr:#{project_name_target}:#{data[:object_attributes][:id]}")
217
+ gkeys = @redis.keys("jenkins:#{project_name_target}:*")
172
218
  gkeys.each do |key|
173
219
  Lita.logger.info "Jenkins Key for Delete: #{key}"
174
220
  json_off = redis.get(key)
@@ -176,29 +222,33 @@ module Lita
176
222
  Lita.logger.info "Branch found for delete: #{jdata[:build][:parameters][:ANY_BRANCH_PATTERN]}"
177
223
  redis.del(key) if data[:object_attributes][:source_branch] == jdata[:build][:parameters][:ANY_BRANCH_PATTERN]
178
224
  end
225
+ "Merge request for delete"
179
226
  end
180
227
 
181
228
  rescue Exception => e
182
229
  Lita.logger.error "Could not make Build Merge Reques #{e.inspect}"
183
230
  end
184
231
 
185
- def key_value_source_project_finder_mr(source_project, project_name)
186
- gkeys = @redis.keys("mr:#{project_name}:*")
187
- gkeys.each do |key|
188
- json = redis.get(key)
189
- data = symbolize parse_payload(json)
190
- source_project_id = data[:object_attributes][:source_project_id] if data[:object_attributes][:source_branch] == source_project
232
+ # def key_value_source_project_finder_mr(source_project, project_name)
233
+ # gkeys = @redis.keys("mr:#{project_name}:*")
234
+ # gkeys.each do |key|
235
+ # json = redis.get(key)
236
+ # data = symbolize parse_payload(json)
237
+ # source_project_id = data[:object_attributes][:source_project_id] if data[:object_attributes][:source_branch] == source_project
238
+ # end
239
+ #
240
+ # rescue Exception => e
241
+ # Lita.logger.error "Could not key_value_source_project_finder_mr #{e.inspect}"
242
+ # end
243
+
244
+ def ci_status_setter(data, json, project_id, project_name_params) # ci_status_setter(data, json_body, id_project, project_name_params)
245
+ if project_name_params.nil?
246
+ project_name = git_lab_data_project_info(project_id)['name']
247
+ redis.set("jenkins:#{project_name}:#{data[:build][:number]}", json)
248
+ else
249
+ redis.set("jenkins:#{project_name_params}:#{data[:build][:number]}", json)
191
250
  end
192
251
 
193
- rescue Exception => e
194
- Lita.logger.error "Could not key_value_source_project_finder_mr #{e.inspect}"
195
- end
196
-
197
- def format_message_mr(data, json, id)
198
- project_name = git_lab_data_project_info(id)['name']
199
- source_project_id = key_value_source_project_finder_mr(data[:build][:parameters]['ANY_BRANCH_PATTERN'],project_name)
200
- redis.set("jenkins:#{project_name}:#{data[:build][:number]}", json)
201
-
202
252
  rescue Exception => e
203
253
  Lita.logger.error "Could not format_message_mr #{e.inspect}"
204
254
  end
@@ -1,6 +1,6 @@
1
1
  Gem::Specification.new do |spec|
2
2
  spec.name = 'lita-gitlab2jenkins_ghp'
3
- spec.version = '0.0.1'
3
+ spec.version = '1.0.0'
4
4
  spec.authors = ['Juan Carlos Alonso Holmstron']
5
5
  spec.email = ['j.carlos.alonso.h@gmail.com']
6
6
  spec.description = %q{A Lita Handler for storing gitlabs's pushed events for after send them in a merge request trigger}
@@ -15,8 +15,6 @@ Gem::Specification.new do |spec|
15
15
  spec.require_paths = ['lib']
16
16
 
17
17
  spec.add_runtime_dependency 'lita', '>= 3.0'
18
- spec.add_runtime_dependency 'redis', '~> 3.0.7'
19
- spec.add_runtime_dependency 'gitlab', '~> 3.0.0'
20
18
 
21
19
  spec.add_development_dependency 'bundler', '~> 1.3'
22
20
  spec.add_development_dependency 'rake'
@@ -0,0 +1,21 @@
1
+ {
2
+ "object_kind":"merge_request",
3
+ "object_attributes":
4
+ {
5
+ "id":82,
6
+ "target_branch":"master",
7
+ "source_branch":"testing_hooking_lita",
8
+ "source_project_id":36,
9
+ "author_id":2,
10
+ "assignee_id":null,
11
+ "title":"Testing Hooking Lita",
12
+ "created_at":"2014-04-08T15:44:37.038Z",
13
+ "updated_at":"2014-04-08T17:01:06.705Z",
14
+ "milestone_id":null,
15
+ "state":"closed",
16
+ "merge_status":"can_be_merged",
17
+ "target_project_id":7,
18
+ "iid":37,
19
+ "description":""
20
+ }
21
+ }
@@ -0,0 +1,21 @@
1
+ {
2
+ "object_kind":"merge_request",
3
+ "object_attributes":
4
+ {
5
+ "id":82,
6
+ "target_branch":"master",
7
+ "source_branch":"testing_hooking_lita",
8
+ "source_project_id":36,
9
+ "author_id":2,
10
+ "assignee_id":null,
11
+ "title":"Testing Hooking Lita",
12
+ "created_at":"2014-04-08T15:44:37.038Z",
13
+ "updated_at":"2014-04-08T17:01:06.705Z",
14
+ "milestone_id":null,
15
+ "state":"opened",
16
+ "merge_status":"can_be_merged",
17
+ "target_project_id":7,
18
+ "iid":37,
19
+ "description":""
20
+ }
21
+ }
@@ -0,0 +1,21 @@
1
+ {
2
+ "object_kind":"merge_request",
3
+ "object_attributes":
4
+ {
5
+ "id":82,
6
+ "target_branch":"master",
7
+ "source_branch":"testing_hooking_lita",
8
+ "source_project_id":36,
9
+ "author_id":2,
10
+ "assignee_id":null,
11
+ "title":"Testing Hooking Lita",
12
+ "created_at":"2014-04-08T15:44:37.038Z",
13
+ "updated_at":"2014-04-08T17:01:06.705Z",
14
+ "milestone_id":null,
15
+ "state":"reopened",
16
+ "merge_status":"can_be_merged",
17
+ "target_project_id":7,
18
+ "iid":37,
19
+ "description":""
20
+ }
21
+ }
@@ -0,0 +1,27 @@
1
+ {
2
+ "before":"a21ad2af8142546d837d8b811b8c60c60746147e",
3
+ "after":"cfa9e9a8421e45407d03dc8d2e0ac0e80ea9dba1",
4
+ "ref":"refs/heads/testing_hooking_lita",
5
+ "user_id":2,
6
+ "user_name":"jcalonsoh",
7
+ "project_id":36,
8
+ "repository":
9
+ {
10
+ "name":"api",
11
+ "url":"git@gitlab.bbrmobile.me:jcalonso/api.git",
12
+ "description":"",
13
+ "homepage":"http://gitlab.bbrmobile.me/jcalonso/api"},
14
+ "commits":
15
+ [{
16
+ "id":"cfa9e9a8421e45407d03dc8d2e0ac0e80ea9dba1",
17
+ "message":"setting database.yml.sample pool to 12",
18
+ "timestamp":"2014-04-09T16:00:54-03:00",
19
+ "url":"http://gitlab.bbrmobile.me/jcalonso/api/commit/cfa9e9a8421e45407d03dc8d2e0ac0e80ea9dba1",
20
+ "author":
21
+ {
22
+ "name":"Juan Carlos Alonso Holmstron",
23
+ "email":"jcalonso@bbr.cl"
24
+ }
25
+ }],
26
+ "total_commits_count":1
27
+ }
@@ -0,0 +1,16 @@
1
+ {
2
+ "name":"QA-API",
3
+ "url":"job/QA-API/",
4
+ "build":
5
+ {
6
+ "full_url":"http://jenkins.bbrmobile.me/job/QA-API/130/",
7
+ "number":130,
8
+ "phase":"COMPLETED",
9
+ "status":"SUCCESS",
10
+ "url":"job/QA-API/130/",
11
+ "parameters":
12
+ {
13
+ "ANY_BRANCH_PATTERN":"master"
14
+ }
15
+ }
16
+ }
@@ -0,0 +1,15 @@
1
+ {
2
+ "name":"QA-API",
3
+ "url":"job/QA-API/",
4
+ "build":
5
+ {
6
+ "full_url":"http://jenkins.bbrmobile.me/job/QA-API/130/",
7
+ "number":130,
8
+ "phase":"STARTED",
9
+ "url":"job/QA-API/130/",
10
+ "parameters":
11
+ {
12
+ "ANY_BRANCH_PATTERN":"master"
13
+ }
14
+ }
15
+ }
@@ -1,4 +1,153 @@
1
1
  require 'spec_helper'
2
2
 
3
3
  describe Lita::Handlers::Gitlab2jenkinsGhp, lita_handler: true do
4
+
5
+ http_route_path = '/lita/gitlab2jenkinsghp'
6
+
7
+ it 'registers with Lita' do
8
+ expect(Lita.handlers).to include(described_class)
9
+ end
10
+
11
+ let(:request) do
12
+ request = double('Rack::Request')
13
+ allow(request).to receive(:params).and_return(params)
14
+ request
15
+ end
16
+ let(:response) { Rack::Response.new }
17
+ let(:params) { {} }
18
+ let(:id_project) { '7' }
19
+ let(:commit_id) {'cfa9e9a8421e45407d03dc8d2e0ac0e80ea9dba1'}
20
+ let(:redis_key_commit) {"commit:#{commit_id}"}
21
+ let(:merge_request) { '82' }
22
+ let(:to_route_gitlab) { 'gitlab' }
23
+ let(:request_method_post) { 'POST' }
24
+ let(:request_method_get) { 'GET' }
25
+ let(:project_name_target) { 'api' }
26
+ let(:redis_key_merge_request) {"mr:#{project_name_target}:#{merge_request}"}
27
+
28
+ let(:to_route_jenkins) { 'jenkins' }
29
+ let(:jenkins_id_project) { '7' }
30
+ let(:redis_key_jenkins_job) { 'jenkins:api:130' }
31
+ let(:project_name_params) { 'api' }
32
+ let(:to_route_ci_status) { 'ci_status' }
33
+
34
+ describe '#receive' do
35
+
36
+ context 'Using POST endpoint for gitlab' do
37
+
38
+ it "route gitlab push event POST #{http_route_path}/gitlab to :receive" do
39
+ routes_http(:post, "#{http_route_path}/#{to_route_gitlab}").to(:receive)
40
+ end
41
+
42
+ context 'when is push event commit hook' do
43
+ let(:push_event_commit_payload) { fixture_file('gitlab/push_event_commit') }
44
+ before do
45
+ allow(params).to receive(:[]).with('payload').and_return(push_event_commit_payload)
46
+ allow(params).to receive(:[]).with('request_method').and_return(request_method_post)
47
+ allow(params).to receive(:[]).with('to_route').and_return(to_route_gitlab)
48
+ Lita::Handlers::Gitlab2jenkinsGhp.new(robot).receive(request, response)
49
+ end
50
+ it 'notifies what commit its stored' do
51
+ expect(Lita.redis.redis.get("lita.test:handlers:gitlab2jenkins_ghp:#{redis_key_commit}")).to eq push_event_commit_payload
52
+ end
53
+ end
54
+
55
+ context 'when is a open merge request hook' do
56
+ let(:merge_request_event_open_payload) { fixture_file('gitlab/merge_request_event_open') }
57
+ before do
58
+ allow(params).to receive(:[]).with('payload').and_return(merge_request_event_open_payload)
59
+ allow(params).to receive(:[]).with('request_method').and_return(request_method_post)
60
+ allow(params).to receive(:[]).with('to_route').and_return(to_route_gitlab)
61
+ allow(params).to receive(:[]).with('project_name_target').and_return(project_name_target)
62
+ allow(params).to receive(:[]).with('project_source_id_commit').and_return(commit_id)
63
+ Lita::Handlers::Gitlab2jenkinsGhp.new(robot).receive(request, response)
64
+ end
65
+ it 'notifies what merge request its stored' do
66
+ expect(Lita.redis.redis.get("lita.test:handlers:gitlab2jenkins_ghp:#{redis_key_merge_request}")).to eq merge_request_event_open_payload
67
+ end
68
+ end
69
+
70
+ context 'when is a reopened merge request hook' do
71
+ let(:merge_request_event_reopened_payload) { fixture_file('gitlab/merge_request_event_reopened') }
72
+ before do
73
+ allow(params).to receive(:[]).with('payload').and_return(merge_request_event_reopened_payload)
74
+ allow(params).to receive(:[]).with('request_method').and_return(request_method_post)
75
+ allow(params).to receive(:[]).with('to_route').and_return(to_route_gitlab)
76
+ allow(params).to receive(:[]).with('project_name_target').and_return(project_name_target)
77
+ allow(params).to receive(:[]).with('project_source_id_commit').and_return(commit_id)
78
+ Lita::Handlers::Gitlab2jenkinsGhp.new(robot).receive(request, response)
79
+ end
80
+ it 'notifies what merge request its stored' do
81
+ expect(Lita.redis.redis.get("lita.test:handlers:gitlab2jenkins_ghp:#{redis_key_merge_request}")).to eq merge_request_event_reopened_payload
82
+ end
83
+ end
84
+
85
+ context 'when is a closed merge request hook' do
86
+ let(:merge_request_event_closed_payload) { fixture_file('gitlab/merge_request_event_closed') }
87
+ before do
88
+ allow(params).to receive(:[]).with('payload').and_return(merge_request_event_closed_payload)
89
+ allow(params).to receive(:[]).with('request_method').and_return(request_method_post)
90
+ allow(params).to receive(:[]).with('to_route').and_return(to_route_gitlab)
91
+ allow(params).to receive(:[]).with('project_name_target').and_return(project_name_target)
92
+ allow(params).to receive(:[]).with('project_source_id_commit').and_return(commit_id)
93
+ Lita::Handlers::Gitlab2jenkinsGhp.new(robot).receive(request, response)
94
+ end
95
+ it 'notifies what merge request its stored' do
96
+ expect(Lita.redis.redis.get("lita.test:handlers:gitlab2jenkins_ghp:#{redis_key_merge_request}")).to be_nil
97
+ end
98
+ end
99
+ end
100
+
101
+ context 'Using POST endpoint for jenkins' do
102
+ it "route gitlab push event POST #{http_route_path}/jenkins to :receive" do
103
+ routes_http(:post, "#{http_route_path}/#{to_route_jenkins}").to(:receive)
104
+ end
105
+
106
+ context 'when jenkins post status job when is STARTED' do
107
+ let(:jenkins_started_payload) { fixture_file('jenkins/job_started') }
108
+ before do
109
+ allow(params).to receive(:[]).with('payload').and_return(jenkins_started_payload)
110
+ allow(params).to receive(:[]).with('request_method').and_return(request_method_post)
111
+ allow(params).to receive(:[]).with('to_route').and_return(to_route_jenkins)
112
+ allow(params).to receive(:[]).with('id_project').and_return(jenkins_id_project)
113
+ allow(params).to receive(:[]).with('project_name_params').and_return(project_name_params)
114
+ Lita::Handlers::Gitlab2jenkinsGhp.new(robot).receive(request, response)
115
+ end
116
+ it 'notifies what merge request its stored' do
117
+ expect(Lita.redis.redis.get("lita.test:handlers:gitlab2jenkins_ghp:#{redis_key_jenkins_job}")).to eq jenkins_started_payload
118
+ end
119
+ end
120
+
121
+ context 'when jenkins post status job when is FINISHED' do
122
+ let(:jenkins_finished_payload) { fixture_file('jenkins/job_finished') }
123
+ before do
124
+ allow(params).to receive(:[]).with('payload').and_return(jenkins_finished_payload)
125
+ allow(params).to receive(:[]).with('request_method').and_return(request_method_post)
126
+ allow(params).to receive(:[]).with('to_route').and_return(to_route_jenkins)
127
+ allow(params).to receive(:[]).with('id_project').and_return(jenkins_id_project)
128
+ allow(params).to receive(:[]).with('project_name_params').and_return(project_name_params)
129
+ Lita::Handlers::Gitlab2jenkinsGhp.new(robot).receive(request, response)
130
+ end
131
+ it 'notifies what merge request its stored' do
132
+ expect(Lita.redis.redis.get("lita.test:handlers:gitlab2jenkins_ghp:#{redis_key_jenkins_job}")).to eq jenkins_finished_payload
133
+ end
134
+ end
135
+ end
136
+
137
+ context 'Using GET endpoint from gitlab' do
138
+ it "route gitlab fetch data of a GET #{http_route_path}/ci_status to :receive" do
139
+ routes_http(:post, "#{http_route_path}/#{to_route_ci_status}").to(:receive)
140
+ end
141
+
142
+ context 'when gitlab get de ci status from commit' do
143
+ # TODO: Add tests for the case when Gitlab requests the status
144
+ end
145
+
146
+ context 'when gitlab get de ci status from master' do
147
+ # TODO: Add tests for the case when Gitlab requests the status
148
+ end
149
+
150
+ end
151
+ end
152
+
4
153
  end
data/spec/spec_helper.rb CHANGED
@@ -1,10 +1,17 @@
1
1
  require 'simplecov'
2
2
  require 'coveralls'
3
+ require 'lita-gitlab2jenkins_ghp'
4
+ require 'lita/rspec'
5
+
3
6
  SimpleCov.formatter = SimpleCov::Formatter::MultiFormatter[
4
- SimpleCov::Formatter::HTMLFormatter,
5
- Coveralls::SimpleCov::Formatter
7
+ SimpleCov::Formatter::HTMLFormatter,
8
+ Coveralls::SimpleCov::Formatter
6
9
  ]
10
+
7
11
  SimpleCov.start { add_filter '/spec/' }
8
12
 
9
- require 'lita-gitlab2jenkins_ghp'
10
- require 'lita/rspec'
13
+ def fixture_file(filename)
14
+ return '' if filename == ''
15
+ file_path = File.expand_path("#{File.dirname(__FILE__)}/fixtures/#{filename}.json")
16
+ File.read(file_path)
17
+ end
metadata CHANGED
@@ -1,139 +1,111 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: lita-gitlab2jenkins_ghp
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.1
4
+ version: 1.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Juan Carlos Alonso Holmstron
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-04-21 00:00:00.000000000 Z
11
+ date: 2014-05-05 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: lita
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
- - - ">="
17
+ - - '>='
18
18
  - !ruby/object:Gem::Version
19
19
  version: '3.0'
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
- - - ">="
24
+ - - '>='
25
25
  - !ruby/object:Gem::Version
26
26
  version: '3.0'
27
- - !ruby/object:Gem::Dependency
28
- name: redis
29
- requirement: !ruby/object:Gem::Requirement
30
- requirements:
31
- - - "~>"
32
- - !ruby/object:Gem::Version
33
- version: 3.0.7
34
- type: :runtime
35
- prerelease: false
36
- version_requirements: !ruby/object:Gem::Requirement
37
- requirements:
38
- - - "~>"
39
- - !ruby/object:Gem::Version
40
- version: 3.0.7
41
- - !ruby/object:Gem::Dependency
42
- name: gitlab
43
- requirement: !ruby/object:Gem::Requirement
44
- requirements:
45
- - - "~>"
46
- - !ruby/object:Gem::Version
47
- version: 3.0.0
48
- type: :runtime
49
- prerelease: false
50
- version_requirements: !ruby/object:Gem::Requirement
51
- requirements:
52
- - - "~>"
53
- - !ruby/object:Gem::Version
54
- version: 3.0.0
55
27
  - !ruby/object:Gem::Dependency
56
28
  name: bundler
57
29
  requirement: !ruby/object:Gem::Requirement
58
30
  requirements:
59
- - - "~>"
31
+ - - ~>
60
32
  - !ruby/object:Gem::Version
61
33
  version: '1.3'
62
34
  type: :development
63
35
  prerelease: false
64
36
  version_requirements: !ruby/object:Gem::Requirement
65
37
  requirements:
66
- - - "~>"
38
+ - - ~>
67
39
  - !ruby/object:Gem::Version
68
40
  version: '1.3'
69
41
  - !ruby/object:Gem::Dependency
70
42
  name: rake
71
43
  requirement: !ruby/object:Gem::Requirement
72
44
  requirements:
73
- - - ">="
45
+ - - '>='
74
46
  - !ruby/object:Gem::Version
75
47
  version: '0'
76
48
  type: :development
77
49
  prerelease: false
78
50
  version_requirements: !ruby/object:Gem::Requirement
79
51
  requirements:
80
- - - ">="
52
+ - - '>='
81
53
  - !ruby/object:Gem::Version
82
54
  version: '0'
83
55
  - !ruby/object:Gem::Dependency
84
56
  name: rspec
85
57
  requirement: !ruby/object:Gem::Requirement
86
58
  requirements:
87
- - - ">="
59
+ - - '>='
88
60
  - !ruby/object:Gem::Version
89
61
  version: 3.0.0.beta2
90
62
  type: :development
91
63
  prerelease: false
92
64
  version_requirements: !ruby/object:Gem::Requirement
93
65
  requirements:
94
- - - ">="
66
+ - - '>='
95
67
  - !ruby/object:Gem::Version
96
68
  version: 3.0.0.beta2
97
69
  - !ruby/object:Gem::Dependency
98
70
  name: shoulda
99
71
  requirement: !ruby/object:Gem::Requirement
100
72
  requirements:
101
- - - ">="
73
+ - - '>='
102
74
  - !ruby/object:Gem::Version
103
75
  version: 3.5.0
104
76
  type: :development
105
77
  prerelease: false
106
78
  version_requirements: !ruby/object:Gem::Requirement
107
79
  requirements:
108
- - - ">="
80
+ - - '>='
109
81
  - !ruby/object:Gem::Version
110
82
  version: 3.5.0
111
83
  - !ruby/object:Gem::Dependency
112
84
  name: simplecov
113
85
  requirement: !ruby/object:Gem::Requirement
114
86
  requirements:
115
- - - ">="
87
+ - - '>='
116
88
  - !ruby/object:Gem::Version
117
89
  version: '0'
118
90
  type: :development
119
91
  prerelease: false
120
92
  version_requirements: !ruby/object:Gem::Requirement
121
93
  requirements:
122
- - - ">="
94
+ - - '>='
123
95
  - !ruby/object:Gem::Version
124
96
  version: '0'
125
97
  - !ruby/object:Gem::Dependency
126
98
  name: coveralls
127
99
  requirement: !ruby/object:Gem::Requirement
128
100
  requirements:
129
- - - ">="
101
+ - - '>='
130
102
  - !ruby/object:Gem::Version
131
103
  version: '0'
132
104
  type: :development
133
105
  prerelease: false
134
106
  version_requirements: !ruby/object:Gem::Requirement
135
107
  requirements:
136
- - - ">="
108
+ - - '>='
137
109
  - !ruby/object:Gem::Version
138
110
  version: '0'
139
111
  description: A Lita Handler for storing gitlabs's pushed events for after send them
@@ -144,9 +116,9 @@ executables: []
144
116
  extensions: []
145
117
  extra_rdoc_files: []
146
118
  files:
147
- - ".gitignore"
148
- - ".ruby-version"
149
- - ".travis.yml"
119
+ - .gitignore
120
+ - .ruby-version
121
+ - .travis.yml
150
122
  - Gemfile
151
123
  - LICENSE
152
124
  - README.md
@@ -155,6 +127,12 @@ files:
155
127
  - lib/lita/handlers/gitlab2jenkins_ghp.rb
156
128
  - lita-gitlab2jenkins_ghp.gemspec
157
129
  - locales/en.yml
130
+ - spec/fixtures/gitlab/merge_request_event_closed.json
131
+ - spec/fixtures/gitlab/merge_request_event_open.json
132
+ - spec/fixtures/gitlab/merge_request_event_reopened.json
133
+ - spec/fixtures/gitlab/push_event_commit.json
134
+ - spec/fixtures/jenkins/job_finished.json
135
+ - spec/fixtures/jenkins/job_started.json
158
136
  - spec/lita/handlers/gitlab2jenkins_ghp_spec.rb
159
137
  - spec/spec_helper.rb
160
138
  homepage: https://github.com/jcalonsoh/lita-gitlab2jenkins_ghp
@@ -168,21 +146,27 @@ require_paths:
168
146
  - lib
169
147
  required_ruby_version: !ruby/object:Gem::Requirement
170
148
  requirements:
171
- - - ">="
149
+ - - '>='
172
150
  - !ruby/object:Gem::Version
173
151
  version: '0'
174
152
  required_rubygems_version: !ruby/object:Gem::Requirement
175
153
  requirements:
176
- - - ">="
154
+ - - '>='
177
155
  - !ruby/object:Gem::Version
178
156
  version: '0'
179
157
  requirements: []
180
158
  rubyforge_project:
181
- rubygems_version: 2.2.2
159
+ rubygems_version: 2.0.14
182
160
  signing_key:
183
161
  specification_version: 4
184
162
  summary: A Lita Handler for storing gitlabs's pushed events for after send them in
185
163
  a merge request trigger
186
164
  test_files:
165
+ - spec/fixtures/gitlab/merge_request_event_closed.json
166
+ - spec/fixtures/gitlab/merge_request_event_open.json
167
+ - spec/fixtures/gitlab/merge_request_event_reopened.json
168
+ - spec/fixtures/gitlab/push_event_commit.json
169
+ - spec/fixtures/jenkins/job_finished.json
170
+ - spec/fixtures/jenkins/job_started.json
187
171
  - spec/lita/handlers/gitlab2jenkins_ghp_spec.rb
188
172
  - spec/spec_helper.rb