lita-gerrit 0.0.2 → 0.1.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: 67b03451be7c4f9b02a9918c28150d316349a208
4
- data.tar.gz: dd4ce8c6c1a8db621ef707922286ef3be66f03b7
3
+ metadata.gz: 3b203e85230aa8bad7bba1b02adc97fe69462fb3
4
+ data.tar.gz: d58f748675e6055d824dfa4dfef42e5fcd9ffe33
5
5
  SHA512:
6
- metadata.gz: cfaa0fce79d0d2f1026d25dfbf2ebc15bf24bf2293a9ba40d88310cb2889a3df20a90d9695b63df16ed4eeb02918797bc36e2011ec822218f63f4e722a500825
7
- data.tar.gz: d3f5d01f1b65d4c530d6e26b36ac231b93604702bd919b8b021c3bca39c849f18c21a5ba829a7062c73ffd90a043a9f35a675473843308e73d9ebcae6e9ac4af
6
+ metadata.gz: 8a68658534cf347da6a1fa4695bfd941b4e938f261461de172f152f0accbd921e843e9ca7bbcc1ea410175f631718f2410b6e6c8cf2bd4be0b624d04f1ef6097
7
+ data.tar.gz: 9f395162979bc89a2b7ec4c5d2d8dfdbc69d6e7054550f2b3d75996701fe4cf59a9bba7a36b74684a95b9a9c59bb6c83740395fdb3c4658f93cb63efc967eebf
@@ -35,7 +35,7 @@ options = {
35
35
 
36
36
  opts.each do |opt, arg|
37
37
  key = opt.gsub(/^--/, "")
38
- options[key] = URI.encode(arg)
38
+ options[key] = arg
39
39
  end
40
40
 
41
41
  request = Net::HTTP.post_form(URI.parse(lita_url), options)
@@ -28,11 +28,11 @@ module Lita
28
28
  case http_resp.code
29
29
  when 200
30
30
  change = MultiJson.load(http_resp.body.lines.to_a[1..-1].join)
31
- message = "gerrit: #{change["subject"]} by #{change["owner"]["name"]} in #{change["project"]}. #{change_link}"
31
+ message = "[gerrit] [#{change["project"]}] \"#{change["subject"]}\" by #{change["owner"]["name"]}. #{change_link}"
32
32
  when 404
33
- message = "Change ##{change_id} does not exist"
33
+ message = "[gerrit] Change ##{change_id} does not exist"
34
34
  else
35
- raise "Failed to fetch #{change_uri} (#{http_resp.code})"
35
+ raise "[gerrit] Failed to fetch #{change_uri} (#{http_resp.code})"
36
36
  end
37
37
 
38
38
  response.reply(message)
@@ -74,24 +74,56 @@ module Lita
74
74
  Lita.logger.error(e.message)
75
75
  end
76
76
 
77
+ #
78
+ # Notification from Jenkins build
79
+ #
80
+
81
+ http.post "/gerrit/build/:room", :build_notification
82
+
83
+ def build_notification(request, response)
84
+ target = Source.new(room: request.env["router.params"][:room])
85
+ notification = MultiJson.load(request.body.read)
86
+ build = notification["build"]
87
+ params = build["parameters"]
88
+
89
+ message = "[jenkins] [#{params["GERRIT_PROJECT"]}] Build %s for \"#{params["GERRIT_CHANGE_SUBJECT"]}\" by #{params["GERRIT_PATCHSET_UPLOADER_NAME"]}"
90
+
91
+ if build["phase"] == "FINALIZED"
92
+ case build["status"]
93
+ when "FAILURE"
94
+ message = message % "FAILED"
95
+ message += " (#{build["full_url"]})"
96
+ when "SUCCESS"
97
+ message = message % "OK"
98
+ else
99
+ message = message % "UNKNOWN"
100
+ end
101
+
102
+ robot.send_message(target, message)
103
+ end
104
+
105
+ rescue Exception => e
106
+ robot.send_message(target, "[jenkins] failed to process Gerrit build event (#{e.message})")
107
+ end
108
+
77
109
  private
78
110
 
79
111
  # List of supported hooks
80
112
  # (https://gerrit-review.googlesource.com/Documentation/config-hooks.html#_supported_hooks)
81
113
 
82
114
  def patchset_created(params)
83
- message = "gerrit: patchset %s has been uploaded by %s in %s. %s"
84
- message % [params["patchset"], params["uploader"], params["project"], params["change-url"]]
115
+ message = "[gerrit] [%s] %s uploaded patchset %s. %s"
116
+ message % [params["project"], params["uploader"], params["patchset"], params["change-url"]]
85
117
  end
86
118
 
87
119
  def comment_added(params)
88
- message = "gerrit(%s): %s commented %s (V:%s/CR:%s)"
120
+ message = "[gerrit] [%s]: %s commented %s (V:%s/CR:%s)"
89
121
  message % [params["project"], params["author"], params["change-url"], params["verified"], params["reviewed"]]
90
122
  end
91
123
 
92
124
  def change_merged(params)
93
- message = "gerrit: Merge of %s by %s in %s"
94
- message % [params["change-url"], params["submitted"], params["project"]]
125
+ message = "[gerrit] [%s] %s merged %s"
126
+ message % [params["project"], params["submitter"], params["change-url"]]
95
127
  end
96
128
  end
97
129
 
@@ -1,6 +1,6 @@
1
1
  Gem::Specification.new do |spec|
2
2
  spec.name = "lita-gerrit"
3
- spec.version = "0.0.2"
3
+ spec.version = "0.1.0"
4
4
  spec.authors = ["Jonathan Amiez"]
5
5
  spec.email = ["jonathan.amiez@gmail.com"]
6
6
  spec.description = "Gerrit API client and hook events handler"
@@ -0,0 +1,47 @@
1
+ {
2
+ "name": "chef-gerrit_tests",
3
+ "url": "job/chef-gerrit_tests/",
4
+ "build": {
5
+ "full_url": "http://jenkins.example.loc/job/chef-gerrit_tests/315/",
6
+ "number": 315,
7
+ "phase": "FINALIZED",
8
+ "status": "SUCCESS",
9
+ "url": "job/chef-gerrit_tests/315/",
10
+ "scm": {
11
+ "url": "ssh://gerrit.example.loc:29418/sysadmin/chef.git",
12
+ "branch": "detached",
13
+ "commit": "f97200b5d5bbf5bd242f645f29e089e47fa51ff3"
14
+ },
15
+ "parameters": {
16
+ "GERRIT_HOST": "gerrit.example.loc",
17
+ "GERRIT_PATCHSET_UPLOADER": "\"Hervé\" <herve@example.com>",
18
+ "GERRIT_EVENT_ACCOUNT_NAME": "Hervé",
19
+ "GERRIT_EVENT_TYPE": "patchset-created",
20
+ "GERRIT_CHANGE_ID": "I29a79eae813c7662736dd1a1f9074cc316301918",
21
+ "GERRIT_TOPIC": "es_http_compress",
22
+ "GERRIT_CHANGE_NUMBER": "3705",
23
+ "GERRIT_VERSION": "2.8.1",
24
+ "GERRIT_PATCHSET_UPLOADER_NAME": "Hervé",
25
+ "GERRIT_CHANGE_COMMIT_MESSAGE": "aGFwcm94eTogZW5hYmxlIEhUVFAgY29tcHJlc3Npb24gb24ga2liYW5hIGZyb250ZW5kCgpDaGFuZ2UtSWQ6IEkyOWE3OWVhZTgxM2M3NjYyNzM2ZGQxYTFmOTA3NGNjMzE2MzAxOTE4Cg==",
26
+ "GERRIT_PATCHSET_UPLOADER_EMAIL": "herve@example.com",
27
+ "GERRIT_PORT": "29418",
28
+ "GERRIT_EVENT_HASH": "-108092174",
29
+ "GERRIT_BRANCH": "master",
30
+ "GERRIT_NAME": "gerrit.example.loc",
31
+ "GERRIT_CHANGE_OWNER_NAME": "Hervé",
32
+ "GERRIT_EVENT_ACCOUNT": "\"Hervé\" <herve@example.com>",
33
+ "GERRIT_EVENT_ACCOUNT_EMAIL": "herve@example.com",
34
+ "GERRIT_CHANGE_OWNER": "\"Hervé\" <herve@example.com>",
35
+ "GERRIT_CHANGE_URL": "http://gerrit.example.loc:8080/3705",
36
+ "GERRIT_SCHEME": "ssh",
37
+ "GERRIT_CHANGE_SUBJECT": "haproxy: enable HTTP compression on kibana frontend",
38
+ "GERRIT_REFSPEC": "refs/changes/05/3705/2",
39
+ "GERRIT_PATCHSET_NUMBER": "2",
40
+ "GERRIT_PATCHSET_REVISION": "f97200b5d5bbf5bd242f645f29e089e47fa51ff3",
41
+ "GERRIT_PROJECT": "sysadmin/chef",
42
+ "GERRIT_CHANGE_OWNER_EMAIL": "herve@example.com"
43
+ },
44
+ "artifacts": {
45
+ }
46
+ }
47
+ }
@@ -0,0 +1,18 @@
1
+ )]}'
2
+ {
3
+ "kind": "gerritcodereview#change",
4
+ "id": "chef~master~Ib0b61ed3eebb8e22596a8401bf976949d798826a",
5
+ "project": "chef",
6
+ "branch": "master",
7
+ "topic": "beanstalk",
8
+ "change_id": "Ib0b61ed3eebb8e22596a8401bf976949d798826a",
9
+ "subject": "haproxy : migrate beanstalk frontend",
10
+ "status": "MERGED",
11
+ "created": "2014-03-14 12:42:15.320000000",
12
+ "updated": "2014-03-17 10:32:21.311000000",
13
+ "_sortkey": "002bcd180000096b",
14
+ "_number": 42,
15
+ "owner": {
16
+ "name": "John Doe"
17
+ }
18
+ }
@@ -1,4 +1,5 @@
1
1
  require "spec_helper"
2
+ require "stringio"
2
3
 
3
4
  describe Lita::Handlers::Gerrit, lita_handler: true do
4
5
 
@@ -13,12 +14,9 @@ describe Lita::Handlers::Gerrit, lita_handler: true do
13
14
  it { routes("get me gerrit 123, please").to(:change_details) }
14
15
  it { doesnt_route("gerrit foo").to(:change_details) }
15
16
 
16
- it { routes_http(:post, "/gerrit/hooks").to(:hook) }
17
-
18
17
  describe "#change_details" do
19
- let(:response) do
20
- double("HTTParty::Response")
21
- end
18
+ let(:response) { double("HTTParty::Response") }
19
+ let(:body) { File.read("spec/fixtures/change_details.json") }
22
20
 
23
21
  before do
24
22
  allow(HTTParty).to receive(:get).and_return(response)
@@ -26,31 +24,9 @@ describe Lita::Handlers::Gerrit, lita_handler: true do
26
24
 
27
25
  it "replies with the title and URL for the issue" do
28
26
  allow(response).to receive(:code).and_return(200)
29
-
30
- allow(response).to receive(:body).and_return(<<-JSON.chomp
31
- )]}'
32
- {
33
- "kind": "gerritcodereview#change",
34
- "id": "chef~master~Ib0b61ed3eebb8e22596a8401bf976949d798826a",
35
- "project": "chef",
36
- "branch": "master",
37
- "topic": "beanstalk",
38
- "change_id": "Ib0b61ed3eebb8e22596a8401bf976949d798826a",
39
- "subject": "haproxy : migrate beanstalk frontend",
40
- "status": "MERGED",
41
- "created": "2014-03-14 12:42:15.320000000",
42
- "updated": "2014-03-17 10:32:21.311000000",
43
- "_sortkey": "002bcd180000096b",
44
- "_number": 42,
45
- "owner": {
46
- "name": "John Doe"
47
- }
48
- }
49
- JSON
50
- )
27
+ allow(response).to receive(:body).and_return(body)
51
28
 
52
29
  send_command("gerrit 42")
53
-
54
30
  expect(replies.last).to eq("gerrit: haproxy : migrate beanstalk frontend by John Doe in chef. https://gerrit.example.com/42")
55
31
  end
56
32
 
@@ -70,4 +46,43 @@ JSON
70
46
  expect(replies.last).to match("Error: Failed to fetch https://gerrit.example.com/a/changes/42 (500)")
71
47
  end
72
48
  end
49
+
50
+ it { routes_http(:post, "/gerrit/hooks").to(:hook) }
51
+
52
+ describe "#hook" do
53
+ let(:request) do
54
+ request = double("Rack::Request")
55
+ allow(request).to receive(:params).and_return(params)
56
+ request
57
+ end
58
+
59
+ let(:response) { Rack::Response.new }
60
+
61
+ let(:params) { double("Hash") }
62
+ end
63
+
64
+ it { routes_http(:post, "/gerrit/build/myroom").to(:build_notification) }
65
+ it { doesnt_route_http(:post, "/gerrit/build/").to(:build_notification) }
66
+
67
+ describe "#build_notification" do
68
+ let(:request) { double("Rack::Request") }
69
+ let(:response) { Rack::Response.new }
70
+ let(:env) { {"router.params" => { :room => "myroom" }} }
71
+ let(:body) { File.read("spec/fixtures/build_notification.json") }
72
+
73
+ context "build finalized" do
74
+ before do
75
+ allow(request).to receive(:env).and_return(env)
76
+ allow(request).to receive(:body).and_return(StringIO.new(body))
77
+ end
78
+
79
+ it "notifies the applicable room" do
80
+ expect(robot).to receive(:send_message) do |target, message|
81
+ expect(target.room).to eq("myroom")
82
+ expect(message).to eq('jenkins: Build "haproxy: enable HTTP compression on kibana frontend" by Hervé in sysadmin/chef OK')
83
+ end
84
+ subject.build_notification(request, response)
85
+ end
86
+ end
87
+ end
73
88
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: lita-gerrit
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.2
4
+ version: 0.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Jonathan Amiez
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-03-19 00:00:00.000000000 Z
11
+ date: 2014-11-26 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: lita
@@ -125,6 +125,8 @@ files:
125
125
  - lib/lita-gerrit.rb
126
126
  - lib/lita/handlers/gerrit.rb
127
127
  - lita-gerrit.gemspec
128
+ - spec/fixtures/build_notification.json
129
+ - spec/fixtures/change_details.json
128
130
  - spec/lita/handlers/gerrit_spec.rb
129
131
  - spec/spec_helper.rb
130
132
  homepage: https://github.com/josqu4red/lita-gerrit
@@ -153,5 +155,7 @@ signing_key:
153
155
  specification_version: 4
154
156
  summary: Retrieve change status from chat and display events
155
157
  test_files:
158
+ - spec/fixtures/build_notification.json
159
+ - spec/fixtures/change_details.json
156
160
  - spec/lita/handlers/gerrit_spec.rb
157
161
  - spec/spec_helper.rb