lita-jenkins 0.0.2 → 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: f1a54f7b723546940928e9bef5ce8c5dfa1d94da
4
- data.tar.gz: 632b837dece082dd95c84e04d7946813f5db6370
3
+ metadata.gz: dcffef9c4fb103a261e3c90e6fdfa19274cf6efc
4
+ data.tar.gz: 60a9bbe4ef16289c48a21756418a72fec9ea6a6f
5
5
  SHA512:
6
- metadata.gz: 96f618e1cd4d601018fd51542958a23d31a65445a5b44d3b6269c1f781146c0d1d586f4eec2170a40474c0ed9956a6db978f108a8bc2324d2b3f64fe0fa0968c
7
- data.tar.gz: 6d77af3b63676f3649da534c792b5d785f7280de712a2e935a95a5ddee9082b24a64b083761d73855a09f4bec1402b0c119a462a92202b32084018d472148e86
6
+ metadata.gz: 7ab1d5548358ab37e304e3470f506c7a9950acdf4883bae95b5af3ba15d7a8c2ecccf8f1151ac2edd375c8da25b907dcf95624824d8c42e2e8d3570f40595fa7
7
+ data.tar.gz: e39bd4c67170ba91f49f2668aaff6902e65c380e8713faff672b600876f21d701f26fee977943c8ea545072a456cf0b6badea5080321a06bc196f1d6c2b49422
data/README.md CHANGED
@@ -1,5 +1,7 @@
1
1
  # lita-jenkins
2
2
 
3
+ [![Build Status](https://travis-ci.org/daniely/lita-jenkins.png?branch=master)](https://travis-ci.org/daniely/lita-jenkins)
4
+
3
5
  Interact with your Jenkins CI server
4
6
 
5
7
  ## Installation
@@ -16,11 +18,16 @@ gem "lita-jenkins"
16
18
 
17
19
  * `url` (String) - Your Jenkins CI url. Default: `nil`.
18
20
 
21
+ ### Optional attributes
22
+
23
+ * `auth` (String) - Your Jenkins CI username and password. Default: `nil`.
24
+
19
25
  ### Example
20
26
 
21
27
  ``` ruby
22
28
  Lita.configure do |config|
23
- config.handlers.jenkins.url = "http://test.com"
29
+ config.handlers.jenkins.url = "http://test.com"
30
+ config.handlers.jenkins.auth = "user1:sekret"
24
31
  end
25
32
  ```
26
33
 
@@ -1,38 +1,85 @@
1
1
  require 'json'
2
+ require 'base64'
2
3
 
3
4
  module Lita
4
5
  module Handlers
5
6
  class Jenkins < Handler
7
+ class << self
8
+ attr_accessor :jobs
9
+ end
10
+
6
11
  def self.default_config(config)
7
12
  config.url = nil
13
+ self.jobs = {}
8
14
  end
9
15
 
10
16
  route /j(?:enkins)? list( (.+))?/i, :jenkins_list, command: true, help: {
11
- 'jekins list <filter>' => 'lists Jenkins jobs'
17
+ 'jenkins list <filter>' => 'lists Jenkins jobs'
12
18
  }
13
19
 
14
- def jenkins_list(response)
15
- url = Lita.config.handlers.jenkins.url
16
- path = "#{url}/api/json"
17
- filter = response.matches.first.last
20
+ route /j(?:enkins)? b(?:uild)? (\d+)/i, :jenkins_build, command: true, help: {
21
+ 'jenkins b(uild) <job_id>' => 'builds the job specified by job_id. List jobs to get ID.'
22
+ }
23
+
24
+ def jenkins_build(response)
25
+ if job = jobs[response.matches.last.last.to_i - 1]
26
+ url = Lita.config.handlers.jenkins.url
27
+ path = "#{url}/job/#{job['name']}/build"
18
28
 
19
- api_response = http.get(path)
20
- parsed_response = JSON.parse(api_response.body)
21
- reply = ''
29
+ http_resp = http.post(path) do |req|
30
+ req.headers = headers
31
+ end
22
32
 
23
- parsed_response['jobs'].each_with_index do |job, i|
33
+ if http_resp.status == 201
34
+ response.reply "(#{http_resp.status}) Build started for #{job['name']} #{url}/job/#{job['name']}"
35
+ else
36
+ response.reply http_resp.body
37
+ end
38
+ else
39
+ response.reply "I couldn't find that job. Try `jenkins list` to get a list."
40
+ end
41
+ end
42
+
43
+ def jenkins_list(response)
44
+ filter = response.matches.first.last
45
+ reply = ''
46
+
47
+ jobs.each_with_index do |job, i|
24
48
  job_name = job['name']
25
49
  state = color_to_state(job['color'])
26
50
  text_to_check = state + job_name
27
51
 
28
- reply << "[#{i+1}] #{state} #{job_name}\n" if filter_match(filter, text_to_check)
52
+ reply << format_job(i, state, job_name) if filter_match(filter, text_to_check)
29
53
  end
30
54
 
31
55
  response.reply reply
32
56
  end
33
57
 
58
+ def headers
59
+ headers = {}
60
+ if auth = Lita.config.handlers.jenkins.auth
61
+ headers["Authorization"] = "Basic #{Base64.encode64(auth).chomp}"
62
+ end
63
+ headers
64
+ end
65
+
66
+ def jobs
67
+ if self.class.jobs.empty?
68
+ path = "#{Lita.config.handlers.jenkins.url}/api/json"
69
+ api_response = http.get(path) do |req|
70
+ req.headers = headers
71
+ end
72
+ self.class.jobs = JSON.parse(api_response.body)["jobs"]
73
+ end
74
+ self.class.jobs
75
+ end
76
+
34
77
  private
35
78
 
79
+ def format_job(i, state, job_name)
80
+ "[#{i+1}] #{state} #{job_name}\n"
81
+ end
82
+
36
83
  def color_to_state(text)
37
84
  case text
38
85
  when /disabled/
@@ -1,6 +1,6 @@
1
1
  Gem::Specification.new do |spec|
2
2
  spec.name = "lita-jenkins"
3
- spec.version = "0.0.2"
3
+ spec.version = "0.0.3"
4
4
  spec.authors = ["Daniel Yoon"]
5
5
  spec.email = ["daniel.kiros@gmail.com"]
6
6
  spec.description = %q{Interact with Jenkins CI server.}
@@ -25,6 +25,7 @@ describe Lita::Handlers::Jenkins, lita_handler: true do
25
25
 
26
26
  before do
27
27
  allow_any_instance_of(Faraday::Connection).to receive(:get).and_return(response)
28
+ allow_any_instance_of(Faraday::Connection).to receive(:post).and_return(response)
28
29
  end
29
30
 
30
31
  it 'lists all jenkins jobs' do
@@ -40,5 +41,32 @@ describe Lita::Handlers::Jenkins, lita_handler: true do
40
41
  send_command('jenkins list fail')
41
42
  expect(replies.last).to eq("[2] FAIL deploy\n[4] FAIL website\n")
42
43
  end
44
+
45
+ it 'build job id' do
46
+ allow(response).to receive(:status).and_return(201)
47
+ allow(response).to receive(:body).and_return(api_response)
48
+ send_command('jenkins b 2')
49
+ expect(replies.last).to eq("(201) Build started for deploy /job/deploy")
50
+ end
51
+
52
+ it 'build job bad id' do
53
+ allow(response).to receive(:status).and_return(201)
54
+ allow(response).to receive(:body).and_return(api_response)
55
+ send_command('jenkins b 99')
56
+ expect(replies.last).to eq("I couldn't find that job. Try `jenkins list` to get a list.")
57
+ end
58
+
59
+ it 'build job error 500 response' do
60
+ allow(response).to receive(:status).and_return(500)
61
+ allow(response).to receive(:body).and_return(api_response)
62
+ send_command('jenkins b 2')
63
+ expect(replies.last).to eq(api_response)
64
+ end
65
+
66
+ it 'build job error 500 response' do
67
+ Lita.config.handlers.jenkins.auth = "foo:bar"
68
+ return_value = Lita::Handlers::Jenkins.new.headers
69
+ expect(return_value.inspect).to eq("{\"Authorization\"=>\"Basic Zm9vOmJhcg==\"}")
70
+ end
43
71
  end
44
72
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: lita-jenkins
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.2
4
+ version: 0.0.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Daniel Yoon
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-03-10 00:00:00.000000000 Z
11
+ date: 2015-05-01 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: lita