lita-gitlab2jenkins_ghp 0.0.1 → 1.0.0
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 +4 -4
- data/.ruby-version +1 -1
- data/README.md +33 -7
- data/lib/lita/handlers/gitlab2jenkins_ghp.rb +105 -55
- data/lita-gitlab2jenkins_ghp.gemspec +1 -3
- data/spec/fixtures/gitlab/merge_request_event_closed.json +21 -0
- data/spec/fixtures/gitlab/merge_request_event_open.json +21 -0
- data/spec/fixtures/gitlab/merge_request_event_reopened.json +21 -0
- data/spec/fixtures/gitlab/push_event_commit.json +27 -0
- data/spec/fixtures/jenkins/job_finished.json +16 -0
- data/spec/fixtures/jenkins/job_started.json +15 -0
- data/spec/lita/handlers/gitlab2jenkins_ghp_spec.rb +149 -0
- data/spec/spec_helper.rb +11 -4
- metadata +34 -50
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 6bba63e1a106fd9ebd7b3774b0bd2d5e05c8a49b
|
4
|
+
data.tar.gz: ae494b139b17f091b0f37378c679064424576948
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: b00508be370616f56cc348b8db4b5201b33e30fe2bad98ace1a4e729b8c5888f5cbd050da066862ab604a78a2de36e4aca4b58e243d0deb8f0b1ac14c75d717a
|
7
|
+
data.tar.gz: da05910f3094061400fb98614b4b4096681b7291667af966fed84624b48e203a952904a7fb592c13750d175b76262b1c6b038820725f69a012fe1696eccbc5e9
|
data/.ruby-version
CHANGED
@@ -1 +1 @@
|
|
1
|
-
2.
|
1
|
+
2.0.0-p451
|
data/README.md
CHANGED
@@ -1,6 +1,12 @@
|
|
1
1
|
# lita-gitlab2jenkins_ghp
|
2
2
|
|
3
|
-
|
3
|
+
[](https://travis-ci.org/jcalonsoh/lita-gitlab2jenkins_ghp)
|
4
|
+
[](https://codeclimate.com/github/jcalonsoh/lita-gitlab2jenkins_ghp)
|
5
|
+
[](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
|
-
|
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
|
-
|
29
|
+
### Example usage YML
|
23
30
|
|
24
|
-
|
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 = '#
|
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', :
|
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/
|
16
|
+
http.get '/lita/gitlab2jenkinsghp/*to_route/*id_project/builds/*sha_commit', :receive
|
21
17
|
|
22
|
-
|
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
|
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
|
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
|
-
|
49
|
-
|
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("
|
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
|
-
|
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
|
151
|
+
def do_mr(json_body, data, project_name_target, project_source_id_commit)
|
107
152
|
if data.key? :before
|
108
|
-
build_branch_hook(
|
153
|
+
build_branch_hook(json_body, data)
|
109
154
|
elsif data.key? :object_kind
|
110
|
-
build_merge_hook(data,
|
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(
|
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,
|
160
|
-
redis.set("mr:#{
|
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:#{
|
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:#{
|
170
|
-
|
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
|
-
|
187
|
-
|
188
|
-
|
189
|
-
|
190
|
-
|
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
|
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
|
-
|
5
|
-
|
7
|
+
SimpleCov::Formatter::HTMLFormatter,
|
8
|
+
Coveralls::SimpleCov::Formatter
|
6
9
|
]
|
10
|
+
|
7
11
|
SimpleCov.start { add_filter '/spec/' }
|
8
12
|
|
9
|
-
|
10
|
-
|
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
|
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-
|
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
|
-
-
|
148
|
-
-
|
149
|
-
-
|
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.
|
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
|